# Plan: 巡樓 Console 從零重寫 > Status: **`approved`**(與 task 拆分一併啟動) > Source: `docs/product/haixun-console/spec.md` > Last updated: `2026-07-09` ## 1. 交付策略 舊碼已在 `old/` 封存。主線 **greenfield**: 1. **先 B(前端 mock)** 讓 Harbor Desk 流程(含 lead 可回覆)你摸到滿意。 2. **A 的 live 地基**不阻塞 B;可在 B 過關後或平行用 `services/api` 補。 3. **C** 同一 UI 接真;**D** 海巡等。 本 plan 的 **可立即開工區間是 M0–M2(tasks T001–T022)**,對應 Phase B 完整 mock。 Phase C/D 只定里程碑與 task 編號預留,細 task 待 B 過關再拆。 ## 2. 里程碑 ### M0 — 倉庫骨架 - **目標:** 可 `npm run dev` 的空應用 - **完成定義:** `apps/web` Vite+React+TS 起來;根 README 有啟動指令 - **Tasks:** T001 - **驗證:** `cd apps/web && npm install && npm run build` ### M1 — 設計系統 + App Shell - **目標:** Harbor Desk 外殼可導覽 - **完成定義:** token、基礎元件、桌面側欄+手機底欄、5 入口路由占位 - **Tasks:** T002–T005 - **驗證:** 手動點 5 入口;build 通過 ### M2 — Auth mock + 路由守衛 - **目標:** 未登入進不了 `/app/**` - **完成定義:** mock 登入/登出/重整保 session - **Tasks:** T006 - **驗證:** 登入後進 Today;logout 回 login ### M3 — 資料層 mock - **目標:** repository 介面 + localStorage + seed - **完成定義:** accounts/plays/outbox/jobs/notifications 可讀寫;`mock|live` 切換點存在(live 可 stub 丟錯) - **Tasks:** T007–T008 - **驗證:** 重整後 seed/草稿仍在 ### M4 — Crew(帳號) - **目標:** 看帳號列表、mock 新增、不可用狀態 - **Tasks:** T009 - **驗證:** 列表 ≥2 假帳;連線 error 不可當 lead/cast ### M5 — Studio 列表 + Wizard 船隊/劇本 - **目標:** 建立串場;lead+cast;步驟含 lead 發言 - **Tasks:** T010–T013 - **驗證:** root(A)→reply(B)→reply(A) 可編輯保存 ### M6 — 預覽 / 船期 / 提交 - **目標:** 預覽泡泡、排程、進 Outbox - **Tasks:** T014 - **驗證:** submit 後 Outbox 有對應 bundle ### M7 — Outbox 發送模擬 - **目標:** 逐步狀態、主失敗不發後續、重試 - **Tasks:** T015–T016 - **驗證:** 模擬成功全 published;root fail 時 reply 不 published ### M8 — Job + 通知 + Today - **目標:** 任務進度、鈴鐺、今日總覽 - **Tasks:** T017–T019 - **驗證:** 模擬 job 完成出通知;Today 有捷徑 ### M9 — Scout / Settings / 收尾 - **目標:** 占位頁、datasource 切換、RWD 基線、範例劇本 - **Tasks:** T020–T022 - **驗證:** Scout 無假成功;手機底欄可用;build 通過 ### M10 — Phase B 過關(人審) - **目標:** 你主觀認可流程與風格 - **Tasks:** 無新碼;走查 checklist(requirements Phase B) - **驗證:** 文件勾選 + 你回「B OK」 ### M20 — Phase C 接真(預留,B 後再拆細 task) - `services/api` 最小 auth/me/permissions - Threads OAuth + accounts - Jobs + notifications live - ThreadPlay/Outbox live 垂直切片 預留 task 號:**T100+**(本輪不寫檔) ### M30 — Phase D(預留) - Scout 海巡滿血等 → **T200+** ## 3. 依賴 ```text M0 → M1 → M2 → M3 → M4 ↘ M5 → M6 → M7 ↘ M8 ↘ M9 → M10 (人審) ↘ M20 → M30 ``` ## 4. 風險與緩解 | 風險 | 緩解 | |------|------| | Task 膨脹超 200 行 | 實作時再拆子 task,更新 INDEX | | Mock 契約與 C 不一致 | T007 介面以 spec §5 為準,C 只換 adapter | | 過早寫 Go | M10 前禁止大範圍 `services/api` 業務 | ## 5. 刻意不做(本 plan 週期內 = 到 M10) - 海巡真功能、舊碼搬回、重型 UI 庫 - live Threads 發文(屬 M20) - email 驗證閘 ## 6. 全域驗證指令 ```bash cd apps/web && npm install && npm run build # 之後若有測試: # npm test ``` ## 7. 批准 - [x] Plan 已批准:2026-07-09(使用者:好請幫我開始拆) - 實作順序:從 **T001** 起,完成一題勾 INDEX 再下一題