# EwoooC 後台 — Codex 開發交接規格 (HANDOFF.md) > 這份文件是給 Codex(或任何工程團隊)將 prototype 重建為正式 production 專案的完整規格。 > Prototype 是 React 18 + Babel Standalone(瀏覽器即時 transpile),**不是 production build**。 > 請依下方規格,重建為正式專案。 --- ## 0. 專案概覽 **產品名稱**:EwoooC(內部後台 / 比價爬蟲監控系統) **目標使用者**:採購、行銷、營運人員 **核心功能**:商品價格監控、活動看板、廠商缺貨追蹤、AI 助手、雲端匯入 **資料規模**:監控 7,000+ 商品,每日掃描多次,含歷史價格走勢 **設計語言(必須沿用)**:Nothing × Claude 混合風格 - 米色基底(warm paper)+ 黑灰主體 + 焦糖橘 accent - JetBrains Mono 用於所有數字、ID、時間戳 - Inter 用於介面文字、繁體中文用 Noto Sans TC - 安靜、結構化、靠留白和排版取勝;**避免**漸層厚重 hero、彩色表頭、五彩按鈕 --- ## 1. 技術棧建議 | 類別 | 建議 | 備註 | |------|------|------| | Framework | **Next.js 14 + App Router** | SSR、RSC、檔案路由 | | 語言 | **TypeScript** | 全面型別化 | | 樣式 | **Tailwind CSS + CSS Variables** | tokens 走 CSS vars,元件用 Tailwind | | 狀態 / 資料 | **TanStack Query (v5)** | 抓 API、cache、revalidate | | 表單 | React Hook Form + Zod | 表單驗證 | | 圖表 | **Recharts** 或 **Visx** | 價格走勢圖、KPI 趨勢 | | 表格 | **TanStack Table v8** | 排序、篩選、虛擬化 | | Icon | **Lucide React**(替代現有 SVG icons) | 與 prototype 風格相容 | | 字型 | next/font 載入 JetBrains Mono + Inter + Noto Sans TC | self-host | | 部署 | Vercel / 自架 Docker | — | --- ## 2. 路由表(Next.js App Router) ``` app/ ├── layout.tsx # 全域 layout(載字型、tokens、TanStack Provider) ├── (auth)/ │ └── login/page.tsx # 登入頁 ├── (admin)/ │ ├── layout.tsx # Sidebar + Topbar shell │ ├── dashboard/page.tsx # 商品看板(首頁,重導 /) │ ├── campaigns/ │ │ ├── page.tsx # 活動看板(含 tab 切換) │ │ └── [id]/page.tsx # 單一活動詳情(可選) │ ├── products/ │ │ ├── page.tsx # 全商品列表 │ │ └── [id]/page.tsx # 商品詳情 + 30 天走勢 │ ├── analytics/page.tsx # 分析報表 │ ├── vendors/page.tsx # 廠商缺貨 │ ├── ai-assistant/page.tsx # AI 助手 │ ├── cloud-import/page.tsx # 雲端匯入 │ └── settings/page.tsx # 系統管理 └── api/ # 若用 BFF,放這 ``` **Sidebar 對應**: - 監控:商品看板(dashboard)、活動看板(campaigns)、分析報表(analytics) - 營運:廠商缺貨(vendors)、商品列表(products)、訂單(orders) - 智能:AI 助手(ai-assistant)、雲端匯入(cloud-import) - 系統:系統管理(settings) --- ## 3. Design Tokens(必讀,直接搬) 來源:`design-tokens.css`(已在交付包根目錄) **核心變數**(節錄,完整見檔案): ```css :root { /* 基底色 */ --momo-bg-primary: #f0eee9; /* 米色頁底 */ --momo-bg-surface: #ffffff; /* 卡片白 */ --momo-bg-paper: #f7f5f0; /* 微暖灰白(hover/header) */ --momo-bg-subtle: #ebe8e0; --momo-bg-muted: #e6e2d8; /* 主體色 */ --momo-ink: #1a1a1a; /* Nothing 黑 */ --momo-text-primary: #1a1a1a; --momo-text-secondary:#4a4a4a; --momo-text-tertiary: #8a8a8a; /* Accent */ --momo-accent: #c96442; /* Claude 焦糖橘 */ --momo-accent-hover: #b3553a; /* 語意色 */ --momo-success: #16a34a; --momo-danger: #dc2626; --momo-warning: #ea580c; --momo-info: #3b5cb8; /* 邊線 */ --momo-border: #d6d2c8; --momo-border-light: #e6e2d8; /* 字型 */ --momo-font-family-base: 'Inter', 'Noto Sans TC', -apple-system, sans-serif; --momo-font-family-mono: 'JetBrains Mono', 'SF Mono', Consolas, monospace; /* 字級 */ --momo-font-size-xs: 11px; --momo-font-size-sm: 13px; --momo-font-size-base: 14px; --momo-font-size-lg: 16px; /* 圓角 */ --momo-radius-sm: 3px; --momo-radius-md: 4px; --momo-radius-lg: 8px; --momo-radius-pill: 999px; /* 陰影 */ --momo-shadow-sm: 0 1px 2px rgba(0,0,0,0.04); --momo-shadow-md: 0 2px 8px rgba(0,0,0,0.06); /* 過場 */ --momo-transition-base: all 0.15s ease; } ``` **Tailwind 對應建議**:在 `tailwind.config.ts` 用 `theme.extend.colors`、`fontFamily`、`borderRadius` 直接對應上述變數。 --- ## 4. 元件清單(重建依據 `app/ui.jsx`) | 元件 | Props (核心) | 行為 | |------|--------------|------| | `