Files
ewoooc/MOMO Pro/HANDOFF.md

18 KiB
Raw Blame History

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 表單驗證
圖表 RechartsVisx 價格走勢圖、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(已在交付包根目錄)

核心變數(節錄,完整見檔案):

: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.tstheme.extend.colorsfontFamilyborderRadius 直接對應上述變數。


4. 元件清單(重建依據 app/ui.jsx

元件 Props (核心) 行為
<Button> variant: gradient | solid | outline | ghost | secondary | danger; size: sm/md/lg; icon; iconRight; loading 主色為 accentsecondary 為米底+黑邊
<Badge> tone: primary/success/danger/warning/info/secondary; dot 圓角 pill
<Card> cardStyle: flat/elevated; padding flat 為主border-light + 白底)
<Input> icon; size; error 米底外框focus 時黑邊
<Avatar> name; size; gradient 圓形,預設取首字
<Icon> name; size 統一用 Lucide 替代
<Modal> open; onClose; title; size 中央 modal漸出
<SectionLabel> num; children; sub 重要 — Dashboard 大區塊用「01 / 02 / 03」編號標籤

重要規範

  • 所有「數字、ID、時間戳、價格」必須使用 Mono 字型class momo-mono 或 Tailwind font-mono
  • 表頭 label 用 Mono + uppercase + letter-spacing 0.08em(看起來像終端機)
  • 表格不要用紫色漸層 header已棄用改用米色 paper 底 + Mono 小字 label

5. 頁面規格

5.1 商品看板 / Dashboard/dashboard

參考app/page-dashboard.jsx

佈局(從上到下):

  1. 區塊 01監控總覽 — 一排 4 個 KPIhorizontal divider 分隔),第二顆「今日變動」用黑底反白

    • 監控總數 / 今日變動accent/ 漲價danger/ 降價success
    • 大字 44px Mono下方 sub 11px
  2. 區塊 02焦點數據 — 三欄並排

    • 最活躍分類 / 最大變動(紅色 +金額)/ 爬蟲排程(綠點 ACTIVE + 上次執行時間)
  3. 區塊 03商品列表

    • 篩選列:搜尋 + 分類 select + segmented tabs全部/新上架/漲價/降價/下架)+ 更新/發送通知按鈕
    • 表格:分類 / 商品名稱(含 emoji 縮圖 + ID/ 當天價格 / 昨日漲跌 / 週漲跌 / 更新時間 / 上架時間
    • 表頭:米色 paper 底Mono uppercase 小字
    • 漲跌格子:紅色▲ / 綠色▼ + Mono 數字

互動

  • 點 row → 開 Modal 顯示 30 天價格走勢(用 Recharts LineChart
  • 篩選即時觸發client-side 過濾或 query params

5.2 活動看板(/campaigns

參考app/page-campaigns.jsx

佈局

  1. 活動切換 segmented tabs(限時搶購 / 1.1狂歡 / 母親節 / 520 / 勞動節)

    • 每顆 tab 含 icon + 名稱 + 商品數 pill
  2. Hero 雙欄

    • 左 2/3活動主資訊卡漸層背景,色相依活動切換
      • flash: 紅橘漸層 / festival: 紫 / mothers: 玫紅 / valentine: 情人紅 / laborday: 藍
      • 點陣裝飾背景 + 大圖示 watermark
      • CAMPAIGN 標籤 + ID + 大標題 + meta時段 / 最後更新 / 商品總數)+ 操作按鈕
    • 右 1/3活動數據 KPI上架/新品/漲價/降價 2x2+ 底部排程 footer
  3. 時段時間軸(僅限時搶購顯示)

    • 24h 條狀圖,當前時段顯示 NOW 標籤
    • bar 高度依商品數accent 色為當前
  4. 分類 chipsfestival / mothers / valentine / laborday

    • 橫向 wrap每個 chip 有名稱 + count pill可點選
  5. 商品列表

    • 同 Dashboard 表格樣式,但欄位:分類 / 商品資訊 / 價格 / 倒數組數 (限時) 或狀態

5.3 商品列表(/products

參考app/page-products.jsx
全商品 CRUD + 篩選 + 編輯 modal。可重用 Dashboard 的 ProductTable 元件。


5.4 廠商缺貨(/vendors

簡單表格vendor / count / lastSeen資料來源 EWOOOC_DATA.outOfStock


5.5 其他頁面

  • 分析報表圖表為主Recharts尚未在 prototype 完整定義 → 可先做 placeholder
  • AI 助手 / 雲端匯入 / 系統管理prototype 為佔位 → 與 PM 確認需求

6. 資料模型 / API 規格

6.1 Mock 資料來源

app/data.jsxEWOOOC_DATA 為所有假資料。重建時請替換為 API 呼叫

6.2 建議的 OpenAPI Endpoints

GET  /api/dashboard/summary         # 監控總覽 + 今日變動
GET  /api/dashboard/focus           # 最活躍分類 / 最大變動 / 排程狀態
GET  /api/products?category=&q=&tab=&page=  # 商品列表(含篩選)
GET  /api/products/{id}             # 商品詳情
GET  /api/products/{id}/price-history?days=30  # 30 天價格走勢
POST /api/products/{id}/notify      # 發送通知

GET  /api/campaigns                 # 所有活動清單
GET  /api/campaigns/{id}            # 單一活動詳情(含 timeSlots, categories, products, stats
POST /api/campaigns/{id}/refresh    # 手動觸發爬蟲
POST /api/campaigns/{id}/notify

GET  /api/vendors/out-of-stock      # 廠商缺貨
GET  /api/schedule/status           # 爬蟲排程狀態

6.3 Schema 範例TypeScript

interface Product {
  id: string;
  category: string;
  name: string;
  emoji?: string;          // 暫時佔位,正式版改為 imageUrl
  imageUrl?: string;
  price: number;
  yesterdayChange: number | null;
  weekChange: number | null;
  updatedAt: string;       // ISO
  listedAt: string;        // ISO
  isNew?: boolean;
}

interface DashboardSummary {
  monitor: { total: number; todayAdded: number; weekGrowth: number; stableCount: number };
  dynamics: {
    priceUp: number; priceDown: number; delisted: number;
    avgUp: number; avgDown: number;
    activity: number; activeCount: number;
    hottestCategory: string; hottestCount: number;
    biggestChange: { product: string; amount: number };
  };
  schedule: { lastRun: string; scanned: number; added: number; status: 'success' | 'running' | 'failed' };
}

interface Campaign {
  id: 'flash' | 'festival' | 'mothers' | 'valentine' | 'laborday';
  name: string;
  icon: string;
  time: string;
  lastUpdate: string;
  total: number;
  schedule: { lastRun: string; anomalies: number; status: string };
  timeSlots?: { time: string; count: number; active?: boolean }[];
  categories?: { name: string; count: number; active?: boolean }[];
  stats: { listed: number; new: number; up: number; down: number; delisted: number };
  products: CampaignProduct[];
}

7. 互動行為清單

行為 描述
Sidebar 折疊 寬度從 240 → 64icon-only
Topbar 搜尋 ⌘K / Ctrl+K 開啟全域搜尋
表格 row click 開啟商品詳情 Modal含 30 天走勢圖)
漲跌欄排序 點欄頭 ↕ 切換 asc/desc
篩選 tabs 即時過濾URL 同步 query string
匯出報表 後端產 CSV 後 download
發送通知 trigger backend webhook回應 toast
活動切換 tab URL ?tab=flash 同步
Tweaks 面板 正式版可移除prototype 用)

8. 字型與資源

Self-host 字型

// app/layout.tsx
import { Inter, JetBrains_Mono, Noto_Sans_TC } from 'next/font/google';
// 對應 CSS variable

Icon:用 Lucide 替換現有 SVG名稱對照

  • dashboard → LayoutDashboard
  • megaphone → Megaphone
  • chart → BarChart3
  • box / package → Package
  • robot / ai → Bot
  • cloud → Cloud
  • settings → Settings
  • search → Search
  • bell → Bell
  • refresh → RefreshCw
  • copy → Copy
  • download → Download
  • trendUp → TrendingUp
  • arrowUp / arrowDown → ArrowUp / ArrowDown
  • clock → Clock
  • tag → Tag

9. 必須遵守的視覺紀律 ⚠️

不要

  • 不要回到原本的紫色漸層 + emoji 圖示風格(舊 momo 後台)
  • 不要在表頭用紫色漸層
  • 不要用五彩繽紛的按鈕
  • 不要在 KPI 卡用厚重藍色 hero 漸層
  • 不要使用 Inter 以外的 sans-serif 主體(避開 Roboto, system-ui
  • 數字、ID、時間不要用 sans-serif

  • 米色底 + 黑灰主體 + 焦糖橘 accent
  • 區塊用「01 / 02 / 03」編號 + uppercase Mono label
  • KPI 大數字 44px+ Mono靠 horizontal divider 分隔,不要每顆都包卡片
  • 活動 hero 才用漸層(且色相依活動主題)
  • 表格安靜,靠 Mono 字體和留白做出層次
  • 邊框細且淺border-light陰影克制

10. 開發里程碑建議

  1. Week 1:架構 + tokens + 共用元件Button/Card/Badge/Input/Modal/Icon/SectionLabel
  2. Week 2Sidebar + Topbar shell + 路由 + Auth
  3. Week 3DashboardKPIRow / FocusRow / ProductTable+ API 串接
  4. Week 4Campaigns5 個 tab + Hero + Timeline + Products
  5. Week 5Products 詳情 + 30 天走勢圖 modal
  6. Week 6Vendors / Analytics / 其他頁面 + 微調 + QA

11. 交付包檔案清單

ewoooc-handoff/
├── HANDOFF.md                      # ← 本文件
├── EwoooC 後台原型.html            # 入口(瀏覽器直開)
├── design-tokens.css               # 所有 CSS 變數
├── data.jsx                        # (根目錄舊版,可忽略)
├── design-canvas.jsx               # prototype 工具,可忽略)
├── tweaks-panel.jsx                # prototype 工具,可忽略)
└── app/
    ├── data.jsx                    # 假資料(轉為 API schema 參考)
    ├── icons.jsx                   # SVG icon 定義(轉為 Lucide
    ├── ui.jsx                      # 共用元件(轉為 TS components
    ├── shell.jsx                   # Sidebar + Topbar
    ├── main.jsx                    # 路由分派 + Tweaks
    ├── modals.jsx                  # 商品詳情 / 編輯 modal
    ├── page-dashboard.jsx          # 商品看板
    ├── page-campaigns.jsx          # 活動看板
    ├── page-products.jsx           # 商品列表
    └── page-orders.jsx             # 訂單(範例頁)

12. 與 PM / Designer 確認清單

開發前請與 PM / Designer 對齊:

  • 真實 API endpoint 文件
  • 認證 / 權限模型RBAC單一管理者
  • 商品 emoji 是否替換為真實圖片CDN
  • Analytics 頁面圖表規格
  • AI 助手 / 雲端匯入功能定義
  • 多語系需求(目前只有繁中)
  • 部署環境Vercel / 自架 / on-prem
  • 監控與錯誤追蹤Sentry

有任何視覺或行為不確定的地方,以 prototype 的呈現為準
Prototype 路徑:開啟 EwoooC 後台原型.html 直接看 live demo並用右下角 Tweaks 面板觀察可調整的設計變數。


13. 2026-05 增量更新Codex 必讀)

本章記錄 HANDOFF.md 初稿後追加的所有設計決策。以下優先於前面章節

13.1 商品看板 — KPI 列強化

KPI 從 4 格擴成 5 格最後一格為「AI 挑品」入口:

# label value 互動
1 監控總數 7,234
2 今日變動 2,180黑底反白
3 漲價danger 458 點擊 → tab 切到 up
4 降價success 612 點擊 → tab 切到 down
5 AI 挑品 50 ↗ 點擊 → tab 切到 ai 並平滑滾到 §03 商品列表

實作KPI cell 加 cursor: pointeronClick 設 setTab(...) + document.getElementById('product-table')?.scrollIntoView({behavior:'smooth'})(或等效 ref 滾動)。

13.2 商品看板 — FilterBar tabs 順序

全部 | AI 揀品 | 新上架 | 漲價 | 降價 | 下架

AI 揀品 tab 對應規則:目前用模擬條件(價格波動 > 8% 或標題含關鍵字)挑出約 1/3 商品,正式版請改接 GET /api/products/ai-picks(後端 ML 推薦schema 同 /api/products response。

13.3 商品看板 — 表格分頁

Client-side 分頁,50 筆/頁。Footer 顯示 150 · 共 N 筆 + 上下頁鈕圖示按鈕disabled 時 opacity 0.3)。正式版改 server-sideGET /api/products?page=1&pageSize=50

13.4 商品看板 — Row hover & 警報欄位

  • Row hover 時加左側 3px caramel accent 條(box-shadow: inset 3px 0 0 var(--momo-warm-caramel))。
  • 警報 chip 所在 <td>min-width: 140px; white-space: nowrap,避免 chip 被擠到換行。

13.5 PriceHistoryModal新元件

點商品 row → 開全螢幕 modal 顯示價格走勢。

Header

  • 左:商品縮圖 + 名稱 + IDmono
  • 3 顆 icon-only 操作鈕(加入監控 / 匯出 CSV / 分享連結)+ 關閉

Body

  • 區段切換 tabs7d / 30d / 90d / 1y
  • LineChartdays 改變時呼叫 buildSeries(days) 重算資料點
    • 7d / 30d / 90d → 每日一點
    • 1y → 每週一點,共 52 點
  • 下方資訊欄:當前價 / 區間最高 / 區間最低 / 變動幅度

APIGET /api/products/{id}/price-history?range=7d|30d|90d|1y{points: [{date, price}], stats: {...}}

13.6 活動看板 — Hero 漸層與點陣

§03 三張活動卡(限時搶購 / 1.1 狂歡 / 母親節)背景:

  • 加左上 3×36px caramel accent 條
  • 疊一層 opacity: 0.18 的點陣紋理(background-image: radial-gradient(circle, currentColor 1px, transparent 1px); background-size: 8px 8px
  • §02 三張焦點卡 padding 16px從 18 收緊)

13.7 設計紀律補充

  • 絕不使用 emoji 當功能 iconemoji 只能出現在商品縮圖位置)。
  • 絕不用漸層當大面積背景,僅活動 hero 卡可用,且需配點陣紋理壓低彩度。
  • 所有數字、ID、時間戳一律 JetBrains Mono中文標題用 Noto Sans TC。
  • 表格 row 高度 56px、表頭 40pxpadding 一律走 tokens。

13.8 尚未交付Phase 2

以下在 prototype 是 placeholder正式版需設計 + 實作:

  • 分析報表(/analytics)— 預期:類別趨勢、競品對比、季節性熱圖
  • AI 助手對話流(/ai-assistant)— 串 LLM
  • 雲端匯入精靈(/cloud-import)— S3 / GDrive 連接器
  • 系統管理 RBAC/settings

若 prototype 與本章描述衝突,以 prototype 的實際行為為準。Codex 可直接讀 app/page-dashboard.jsxapp/modals.jsxapp/page-campaigns.jsx 取得真實實作。