jim800121chen fb7da5d180 chore(autoflow): migrate .autoflow/ 共享層文件至 docs/autoflow/
依 autoflow-agent workspace v2 設計把 PRD / 設計 / 架構 / 交付類
共享文件從個人層 .autoflow/(ignored)搬到 docs/autoflow/(進 git),
讓團隊可共享產品與架構文件,個人層只留 progress / review / testing 等
per-branch 筆記。

- 02-prd/        21 個檔(PRD、features、market-analysis 等)
- 03-design/     18 個檔(design-spec、wireframes、flows 等)
- 04-architecture/ 31 個檔(TDD、design-doc、ADR×14、API 規格等)
- 07-delivery/   3 個檔(project-summary、phase-0.6-handover、stage-deployment-setup)

合計 73 檔。原檔已從 .autoflow/ 移除(migration 工具執行 git mv,
但因 .autoflow/ 在 .gitignore 中、git 將此操作視為新增、無 rename history)。
2026-05-04 16:55:55 +08:00

310 lines
16 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# visionA Cloud — 設計規格Design Spec索引
| 項目 | 內容 |
|------|------|
| 專案代號 | visionA Cloud`visionA-frontend` |
| 文件版本 | v0.1Phase 0 雛形規劃) |
| 最後更新 | 2026-04-21 |
| 狀態 | 三方聯合討論中Design Agent 產出) |
| 主要負責 | Design Agent |
| 基礎設計稿 | `local-tool/frontend/` 既有實作Shadcn 風)+ `edge-ai-platform` POC 的 clusters 頁面 |
| 模式 | 既有版型反向整理 + 補齊雲端版缺失 + 局部 Design Review |
> **本規格從既有程式碼反向整理**。版型與 Design Tokens 直接沿用 local-tool以確保「離線版 / 雲端版同一套前端」的決策可執行。雲端版新增的頁面登入、註冊、帳號、Pairing、Clusters與狀態在線 / 離線 / 遠端掉線)為本次新增設計。
---
## 文件結構
本規格採用模組化結構,避免單檔過大。本檔為索引,詳細內容拆成以下子檔案:
```
.autoflow/03-design/
├── design-spec.md ← 本檔(索引 + 設計系統概述 + 整體策略)
├── design-tokens.md ← Design Tokens 三層架構
├── components.md ← 元件庫清單與規格
├── pages.md ← 頁面結構(既有 + 雲端新增)
├── flows/
│ ├── flow-pairing.md ← Pairing 流程(最重要的新增流程)
│ ├── flow-offline-handling.md ← 離線 / 掉線 UI 行為
│ ├── flow-auth.md ← 登入 / 註冊流程(雛形 stub
│ └── flow-conversion.md ← 轉檔流程Phase 0.8 新增)
├── design-review.md ← 對既有 local-tool 版型的 Design Review
└── wireframes/ ← 文字版 wireframe僅針對雲端新增頁面
├── wf-login.md
├── wf-register.md
├── wf-account.md
├── wf-pairing.md
├── wf-clusters.md
└── wireframe-conversion.md ← 轉檔頁面 wireframePhase 0.8 新增)
```
> `03-design/prototype/` 在 Phase 0 雛形**暫不產出** high-fidelity prototype。版型直接沿用 local-tool 實作,前端工程師可直接參考 `local-tool/frontend/` 複用元件。
---
## 1. 設計系統概述
### 1.1 設計哲學
**「Editor-grade Console — 開發者每天要用 8 小時也不累的工作台」。**
visionA Cloud 的使用者是**開發者 / FAE / SI**,不是一般消費者。他們:
- 一天可能開著這個頁面數小時
- 熟悉技術細節,不需要過度的引導
- 重視資訊密度與快速操作,勝過視覺華麗
- 多半在桌面環境工作Mac / Windows
- 對載入狀態、連線狀態、錯誤訊息的「誠實性」非常敏感
**設計原則(由此延伸):**
1. **資訊優先於裝飾** — 任何視覺元素都要有功能理由。不用漸層、不用花俏動畫。
2. **誠實呈現狀態** — 在線 / 離線 / 連線中 / 錯誤,一定要讓使用者看得出差別(不是只用顏色,必須搭配文字 / icon
3. **一致性勝過驚喜** — 與 local-tool 完全共用同一套元件與版型,使用者在兩種模式間切換無感。
4. **可預期勝過可愛** — 按鈕按下去會發生什麼事,應該從文字、位置、圖示就能預測。
5. **鍵盤友善** — 所有操作都應該有鍵盤路徑(符合 WCAG 2.1 AA
6. **Dark Mode 第一** — 跟隨系統主題,不做強制光亮。
### 1.2 設計目標
| 目標 | 衡量方式(供 Testing 參考) |
|------|--------------------------|
| 與 local-tool 視覺一致 | 同一使用者在兩種模式間能一眼認出是同個產品 |
| 雲端特性清晰 | 使用者隨時知道「我現在連的是哪台遠端裝置」「它在線嗎」 |
| 學習成本 < 10 分鐘 | 看得懂 Dashboard能找到 `/devices/pair`能開 Workspace |
| 無障礙符合 WCAG 2.1 AA | axe-core 自動掃描 0 Critical鍵盤可操作所有核心流程 |
| Dark Mode 完整 | 100% 頁面在 Dark Mode 下色彩對比達標 |
### 1.3 設計範圍Phase 0 雛形)
| 類別 | 頁面 / 元件 | 範圍 |
|------|-----------|------|
| **沿用 local-tool**版型完全不動 | `/``/devices``/devices/[id]``/models``/models/[id]``/workspace``/workspace/[deviceId]``/settings` | 複用元件複用 Design Tokens只改 API base URL 的連法 |
| **從 POC 搬**適配雲端 | `/clusters``/workspace/cluster/[clusterId]` | 視覺風格與既有頁面對齊搬完就等同原生雲端功能 |
| **雲端新增 — 雛形 stub** | `/login``/register``/account` | 低保真 compile 可導覽即可UI 細節可 Phase 1 細化 |
| **雲端新增 — 完整設計** | `/devices/pair`Sidebar 的帳號區塊裝置掉線徽章與降級體驗 | 本次規格 focus 的核心 |
| **全域行為改動** | 頂部 `ConnectionStatus``api.ts` 錯誤處理WebSocket 重連 UI | 雲端場景連線邏輯不同需要調整 |
### 1.4 設計範圍外(不做的事)
- 高保真 prototypeFigma HTML)— 版型沿用 local-tool沒有價值
- 行銷 Landing Page 不在雛形範圍
- Onboarding Wizard 雲端版的 onboarding Phase 1 再細化
- Mobile 響應式完整版 雛形只保證 DesktopTablet 可讀Mobile 降級詳見第 6
- 重新發明 Design Tokens 完全沿用 local-tool CSS 變數
---
## 2. 子文件總覽
詳細內容在各子文件以下是一句話摘要
### [2.1 Design Tokens](design-tokens.md)
**完整沿用 local-tool 的 shadcn CSS 變數系統**包含 Reference / Semantic / Component 三層色彩使用 `oklch()` 色彩空間radius base `0.625rem`Tailwind 4 `@theme inline`Dark Mode 透過 `.dark` class 切換。**本專案不新增不覆寫任何 Token。**
### [2.2 元件庫清單](components.md)
**基礎 UIShadcn 風22 個**ButtonCardDialogAlertDialogTabsInputSelectBadgeSliderProgressCheckboxLabelSeparatorScrollAreaSonnertoast)、EmptyState
**業務元件(沿用)**models/、devices/、inference/、camera/、dashboard/
**Layout**HeaderSidebarConnectionStatusHelpButton
**新增(雲端版)**UserMenuPairingTokenCardRemoteDeviceBadgeNetworkErrorBanner
### [2.3 頁面結構](pages.md)
逐頁規格沿用頁面列出版型沿用 + 雲端適配點」,新增頁面列出版型主要區塊互動重點」。雲端新增 5 個頁面`/login``/register``/account``/devices/pair``/clusters`)。
### [2.4 Pairing 流程](flows/flow-pairing.md)
**雲端版最關鍵的新增流程**使用者在雲端 Web 登入 `/devices/pair` 產生 Pairing Token`vAc_` + 32 字元 hexTTL **15 分鐘**一次性使用local agent 成功換取後獲得 90 Session Token 維持 tunnel使用者感受不到後者)→ 複製 token 到自己電腦的 local agent 貼上 顯示 local agent 已連上雲端 `/devices` 看到遠端裝置
### [2.5 離線 / 掉線處理](flows/flow-offline-handling.md)
雲端版特有local agent 可能掉線tunnel 可能斷裝置列表裝置詳情頁Workspace 都要能誠實顯示狀態」。建議新增一個全域的 `RemoteDeviceBadge`在裝置列表 / 卡片 / Header 顯示最後心跳 X 秒前」。
### [2.6 登入 / 註冊流程](flows/flow-auth.md)
Phase 0 雛形只需要 **stub 頁面**Email + Password 輸入框一個登入按鈕一個還沒有帳號註冊連結後端尚未接送出後直接跳 Dashboard 即可實際 OAuth / 密碼驗證 Phase 1 再做
### [2.7 Design Review](design-review.md)
對既有 local-tool 版型做一次檢查目前已知的改善點整理成 Critical / Major / Minor 三級**雛形階段不改**但寫進文件給 Phase 1+ 參考
### [2.8 轉檔流程](flows/flow-conversion.md) + [Wireframe](wireframes/wireframe-conversion.md)
**Phase 0.8 新增的核心動線**Sidebar 轉檔tabWand2 icon單頁 `/conversion` state 機切 `idle / uploading / processing / completed.success / completed.failed` 五個畫面上傳走 visionA backend streaming proxyXHR + 進度條轉檔以 polling510 追狀態完成後**半自動**讓使用者選加到模型庫下載」(兩按鈕互不互斥)。失敗時顯示翻譯後的錯誤訊息PRD §F5 對照表+ suggestions。**前端不持久化 jobId** backend `GET /jobs/active` 提供 source of truth跨瀏覽器 / 多分頁 / 重新整理都能正確恢復
---
## 3. 技術對齊
| 項目 | 決策 | 備註 |
|------|------|------|
| UI 框架 | Next.js App Router 16 + React 19 | 沿用 local-tool |
| 樣式 | Tailwind CSS 4 + shadcn/uiRadix UI 封裝| 沿用 |
| 圖示 | Lucide React | 沿用 |
| 狀態管理 | Zustand 5 | 沿用新增 `auth-store``session-store` |
| Toast | Sonner | 沿用 |
| i18n | 自訂實作`src/lib/i18n`繁中 + English | 沿用 |
| 圖表 | Recharts 3 | 沿用Workspace 效能圖表 |
| 引導 | driver.js | 沿用Dashboard onboarding |
| 無障礙 | shadcn/ui 內建 ARIA 為基礎關鍵頁面補強 | 目標 WCAG 2.1 AA |
| Dark Mode | 跟隨系統主題`theme-sync.tsx`| 沿用 |
---
## 4. 設計與開發的職責切分
為避免設計與實作脫節明確職責
| 誰做 | 什麼 |
|------|------|
| **Design Agent本文件** | Design Tokens 規格 / 元件清單 / 頁面結構 / 互動規格 / UX Writing 文案規範 / Design Review |
| **Architect Agent** | API 契約 / Session 設計 / 狀態同步策略 / Token 生命週期 |
| **Frontend Agent** | 依本文件實作 React 元件 / API / 實作 WebSocket 重連邏輯 |
| **PM Agent** | User Story / 成功指標 / Persona |
**設計規格有衝突時的排序:** 使用者口述需求 > PRD > 本設計規格 > local-tool 現況 > 個人偏好。
---
## 5. 與 PM / Architect 的協作提醒
### 5.1 給 PM 的提醒
- Phase 0 雛形**不做完整 Onboarding**。Dashboard 的 `OnboardingDialog` 在雲端版情境不合適local-tool 的版本假設使用者「插 USB Dongle 掃描」,雲端版第一步是 Pairing建議 Phase 1 重寫。
- `/settings` 頁的「Advanced」分頁目前有 ServerStatusDashboard 與 ServerLogViewer**雲端版應該移除或重新定位**(使用者看不到「他電腦上的 local agent log」除非有專門的 remote log 設計)— 建議 Phase 1 再處理。
- 未來如果有 Billing`/account` 會擴展成 `/account/*`profile / billing / api-keys / sessions。Phase 0 只做單頁 stub。
### 5.2 給 Architect 的提醒
- **裝置狀態同步**:雲端版裝置狀態依賴 local agent 的 heartbeat / WebSocket前端必須能顯示「上次心跳 X 秒前」。建議 API 直接回傳 `lastSeenAt` 欄位ISO 8601
- **Pairing Token 顯示格式**設計上用「8+8 分隔顯示」(`a1b2c3d4 e5f6g7h8`方便肉眼辨識複製API 回傳請保持原始無空白字串,由前端格式化顯示。
- **WebSocket 重連策略**:前端會用指數退避,但需要 Architect 確認後端能否容忍短暫重連抖動。
- **錯誤分類**:前端需要區分「雲端 API 不可達」整個服務掛vs「local agent 掉線」單裝置不可用。API 錯誤回應的 `error.code` 請明確分類,讓 UI 可以給不同提示。
---
## 6. 響應式策略(整體總綱,詳見 pages.md
| 斷點 | 寬度 | 雛形策略 |
|------|------|---------|
| Mobile | < 640px | **降級顯示**能讀但不建議操作顯示提示建議使用桌面版於關鍵頁面 PairingWorkspace |
| Tablet | 640 1024px | **可用**Sidebar 折疊為 drawer主內容區單欄 |
| Desktop | 1024 1440px | **主要目標**Sidebar 展開w-60主內容區自適應 |
| Wide | > 1440px | 最大寬度限制 max-w-7xl1280px內容置中 |
**核心決策****Desktop First**。使用者是開發者主要用桌機。Mobile 僅確保能登入、看 Dashboard 資訊、讀通知;不要求能操作推論。
---
## 7. 國際化策略(沿用 local-tool
- **支援語言**:繁體中文(`zh-TW`、English`en`
- **預設語言**:跟隨系統 locale無法辨識則 `en`
- **切換位置**`/settings` → 一般 → 語言;使用者選擇會存 `localStorage`
- **文案位置**`src/lib/i18n/zh-TW.ts``src/lib/i18n/en.ts`
- **新增雲端版的文案 key**
```
auth.login.* 登入頁
auth.register.* 註冊頁
auth.error.* 認證錯誤訊息
account.* 帳號設定頁
pairing.* Pairing 頁與流程
cluster.* 叢集(已在 POC 存在,整併)
remote.* 遠端裝置相關(掉線、心跳、最後連線)
nav.cloudAppName visionA Cloud取代 visionA Local
```
- **UX Writing 原則**:參考 `components.md` 第 8 節。
---
## 8. 無障礙基準WCAG 2.1 AA
### 8.1 色彩對比
- 一般文字對背景 ≥ 4.5:1
- 大文字18pt+/14pt Bold+)≥ 3:1
- Icon / UI 元件 ≥ 3:1
- 不只靠顏色傳達資訊(裝置狀態徽章同時有「圓點 + 文字」)
### 8.2 鍵盤操作
- 所有互動元素可 Tab 聚焦
- Focus ring 可見shadcn 預設 `ring-[3px]` 已達標)
- Modal 聚焦陷阱Dialog 自動處理)
- Escape 關閉 ModalDialog 自動處理)
- Skip link全新頁面需要加
### 8.3 ARIA 與語意
- 使用語意化 HTML`<nav>``<main>``<aside>``<header>`
- 動態內容使用 `aria-live` 通知 Screen Reader如 toast、裝置連線狀態變化
- 圖示只做裝飾時加 `aria-hidden="true"`
- 表單 label 與 input 綁定
### 8.4 觸控目標(即使是桌面版)
- 最小點擊區域 32×32shadcn Button `size=default` h-9 px-4 剛好)
- Mobile 版需求:最小 44×44雛形不保證
### 8.5 Reduce Motion
- 支援 `prefers-reduced-motion`,停用非必要動畫(已由 Tailwind 4 內建)
詳細無障礙檢查項目見 `design-review.md`
---
## 9. 交付物清單
本次 Design Agent 的交付:
| 檔案 | 內容 | 狀態 |
|------|------|------|
| `design-spec.md`(本檔)| 索引 + 設計系統概述 + 整體策略 | ✅ 完成 |
| `design-tokens.md` | Design Tokens 三層架構(從 local-tool 反向整理) | ✅ 完成 |
| `components.md` | 元件庫清單與規格 | ✅ 完成 |
| `pages.md` | 頁面結構(逐頁) | ✅ 完成 |
| `flows/flow-pairing.md` | Pairing 流程(核心新增) | ✅ 完成 |
| `flows/flow-offline-handling.md` | 離線 / 掉線 UI 行為 | ✅ 完成 |
| `flows/flow-auth.md` | 登入 / 註冊(雛形 stub | ✅ 完成 |
| `design-review.md` | 對 local-tool 的設計審查 | ✅ 完成 |
| `wireframes/wf-*.md` | 文字版 wireframe5 個新增頁面) | ✅ 完成 |
| `prototype/` | Hi-fi prototype | ❌ 不做(雛形階段無價值) |
---
## 10. TODO需後續補齊
| 項目 | 負責方 | 時機 |
|------|-------|------|
| `/account` 完整設計Profile / API Keys / Sessions / Billing | Design Agent | Phase 1 |
| 完整登入 / 註冊流程含社群登入、密碼重設、Email 驗證) | Design Agent | Phase 1 |
| 雲端版 Onboarding取代 local-tool 的 USB Dongle 版本) | Design Agent + PM | Phase 1 |
| 管理面 / Admin Console若有多租戶管理需求 | Design Agent | Phase 2 |
| Billing UI | Design Agent + PM | Phase 2 |
| Mobile 完整響應式設計 | Design Agent | Phase 1+(待使用者回饋) |
| 設計 QA實作完成後 | Design Agent | Phase 0 開發完成時 |
| 對 ServerLogViewer / ServerStatusDashboard 在雲端情境的重新設計 | Design Agent | Phase 1 |
---
## 11. 交叉審閱點Three-way review
交給 PM 與 Architect 審閱時,請特別檢查:
**PM 審閱:**
- 設計規格涵蓋的頁面是否與 PRD User Stories 完全對齊?
- Pairing 流程的 UX 是否符合 Persona 使用情境?
- UX Writing 的語調是否符合產品定位?
**Architect 審閱:**
- `RemoteDeviceBadge` 顯示「最後心跳 X 秒前」需要後端提供 `lastSeenAt`API 契約是否支援?
- Pairing Token 的 `vAc_` + 32 hex 格式與 15 分鐘 TTL 是否與後端實作一致?(已對齊 PRD / TDD
- WebSocket 掉線後的 UI 降級,前端要不要 fallback 到 polling
- 登入流程雛形的「送出直接跳轉」是否會導致未來改正式 auth 時大幅重寫?建議 Architect 確認 auth-store 的介面,讓雛形與正式實作 API 相容。