# T723 — all opportunities page

> Status: `done`  
> Milestone: `M2` · Phase B  
> Kind: `feat` · Est. change: `~200 lines`

## Goal

新增全部結果視圖，讓 stale／weak／excluded／未指定產品都可依分數排序檢查，而不污染今日商機。

## Depends on

- T720、T721

## Inputs

- `../spec.md` §3.4、§4.4、§5.4
- `apps/web/src/App.tsx`、RadarTodayPage patterns

## Outputs

| 路徑 | 動作 | 說明 |
|------|------|------|
| `apps/web/src/pages/RadarOpportunitiesPage.tsx` | add | 分頁、filters、排序、result states |
| `apps/web/src/App.tsx` | edit | `/app/radar/opportunities` route |
| `apps/web/src/styles/radar.css` | edit | 全部結果 layout |
| `apps/web/src/pages/RadarOpportunitiesPage.test.tsx` | add | stale／weak／generic／stable sort |

## Behavior

- 預設 intent desc、fit desc、posted desc、id asc。
- filter 狀態可由 URL 恢復；today 與 all 互相導覽。
- stale 清楚標示，不提供「今天」假象。

## Out of scope

- live API filter（T753）
- 刪除歷史結果

## Acceptance

- [x] 20 天 fixture 只在 all 出現；legacy 顯示未指定產品。

```bash
cd apps/web && npm run test -- RadarOpportunitiesPage && npm run build
```

Implementation result (2026-08-10): added the all-results route with persisted
URL filters, stale/weak/excluded/generic states, stable score/date sorting, and
pagination-aware repository reads.
