visionA/local-tool/.autoflow/03-design/spec/01-information-architecture.md
jim800121chen c54f16fca0 Initial commit: visionA monorepo with local-tool subproject
local-tool/: visionA-local desktop app
- M1: Wails shell + Go server + Next.js UI + Mock mode (macOS dmg ready)
- M2: i18n (zh-TW/en) + Settings 4-tab refactor
- M3: Embedded Python 3.12 runtime (python-build-standalone) + KneronPLUS wheels
- M4: Windows Inno Setup script (build on Windows runner)
- M5: Linux AppImage script + udev rule (build on Linux runner)
- M6: ffmpeg (GPL, pending legal review) + yt-dlp bundled
- Lifecycle: watchServer health check, fatal native dialog,
            Wails IPC raise endpoint, stale process cleanup

.autoflow/: full PRD / Design Spec / Architecture / Testing docs
            (4 rounds tri-party discussion + cross review)
.github/workflows/: macOS / Windows / Linux build CI

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 22:10:38 +08:00

109 lines
4.8 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.

# 01 — 資訊架構IA
## 1.1 IA 總覽
```
visionA-local
├─ [1] Dashboard ⌘1 — 首頁,快速開始 + 單機狀態
├─ [2] Models ⌘2 — 模型庫(上傳、切換、比對 .nef
│ ├─ Model List
│ ├─ Model Detail (drawer / modal)
│ ├─ Upload Dialog
│ └─ Comparison Dialog
├─ [3] Devices ⌘3 — 實體 Kneron USB 裝置清單
│ ├─ Device List (grid)
│ ├─ Device Detail (drawer)
│ ├─ Connection Log
│ └─ [韌體燒錄已砍,不保留]
├─ [4] Workspace ⌘4 — 推論工作區(核心操作頁)
│ ├─ 無裝置時Empty State引導接上裝置或切到 Mock
│ ├─ 裝置選擇器top bar
│ ├─ Camera Feed + Overlay
│ ├─ Inference Panel模型、參數、結果
│ └─ Batch Image / Video Upload 分頁
└─ Settings ⌘, — 設定分頁式4 分頁)
├─ 一般(語言、啟動行為、資料目錄、主題唯讀顯示)
├─ 硬體(執行模式 Real/Mock、USB 權限、Port 設定)
├─ 模型(預置模型開關、自訂模型路徑)
└─ 進階(日誌、重置、關於)
```
## 1.2 主導航
| # | 項目 | 圖示 | 路由(內部) | 快捷鍵 | 預設頁面 |
|---|------|------|------------|-------|---------|
| 1 | Dashboard | `LayoutDashboard` | `/` | ⌘1 | — |
| 2 | Models | `Box` | `/models` | ⌘2 | — |
| 3 | Devices | `Cpu` | `/devices` | ⌘3 | — |
| 4 | Workspace | `Play` | `/workspace` | ⌘4 | 最近使用的裝置;無則 empty state |
| — | Settings | `Settings` | `/settings` | ⌘, | 一般分頁 |
**Settings 與 4 個主區塊視覺分離**Settings 放在 sidebar 最下方(靠底對齊),並用 divider 與主導航區隔。
## 1.3 Sidebar 結構
```
┌─────────────────┐
│ [logo] visionA │ ← logo 區32px 高)
│ -local │
├─────────────────┤
│ ⊞ Dashboard │ ← 主導航48px per item含 icon + label
│ ▣ Models │
│ ▣ Devices │
│ ▶ Workspace │
│ │
│ ... │
│ (spacer) │
│ │
├─────────────────┤
│ ● Server: Idle │ ← Server 狀態(唯讀,常駐)
│ localhost:3721│
├─────────────────┤
│ ⚙ Settings │
└─────────────────┘
```
- **寬度**:展開 240px / 收合 64px
- **預設狀態**:展開
- **收合時**:只顯示 iconhover 時用 tooltip 顯示 label
- **沒有漢堡按鈕**:桌面版 sidebar 固定,不提供折疊(減少決策疲勞);最小視窗寬度 960px 保證 sidebar 不會擠壓
## 1.4 HeaderTop Bar
```
┌────────────────────────────────────────────────────────────┐
│ [當前頁標題] [Mock badge (if mock)] [連線狀態] [?] │
└────────────────────────────────────────────────────────────┘
```
- **高度**56px
- **內容**
-當前頁面標題h1
- 右:
- Mock 模式時,顯示黃色 `Mock` badgehover 有 tooltip 說明)
- Server 連線狀態小燈(綠/黃/紅)
- 幫助按鈕(打開 Help drawer
- **無麵包屑**IA 扁平,不需要
- **無全域搜尋**local 版資料量小,個別頁面內建過濾即可
## 1.5 路由與 Deep Link 策略
- **內部路由**:沿用原 Next.js 檔案系統路由,但**所有 URL 對使用者隱藏**(無 URL bar
- **不支援外部 deep link**:因為是桌面 app不會有「別人把連結傳給我」的情境
- **App 內跳轉**macOS 原生 menu bar 的快速動作(如「新增裝置掃描」「上傳模型」)會跳轉到對應頁面+開啟對應 modal
- **路由歷史**:保留瀏覽歷史,以支援 App 選單的「前進/後退」(或快捷鍵 ⌘[ / ⌘]
## 1.6 導航決策理由
| 決策 | 理由 |
|------|------|
| 不放 Workspace 到 Devices 子頁 | Workspace 是高頻核心動作,放 sidebar 一級可降低點擊數;原專案把它藏在 `/devices/[id]/workspace` 的二層路徑太深 |
| Settings 獨立於 4 大區 | Settings 不是日常導航目標放底部icon only 可讓焦點集中在主功能 |
| 取消全域搜尋 | 本地資料量(模型數 < 50裝置數 < 10逐頁過濾即可 |
| 取消麵包屑 | IA 只有兩層不需要 |