Ian Chou's Blog

Astro EC Site MVP (Edge + AI Hybrid) 產品需求文件 PRD

Product Requirements Document (PRD)

Project Name: Astro EC Site MVP (AI-Enhanced Edition)
Version: 2.0 (Edge + AI Hybrid)
Date: 2025-12-01

1. 專案概要 (Project Overview)

本專案旨在建立一個結合「極速購物體驗」與「AI 智慧進銷存」的電子商務平台。透過 Cloudflare 邊緣網絡確保全球訪客的載入速度 (Sub-second load time),並整合 Vercel AI SDK 進銷存 Copilot 做網站後台管理。

MVP 階段劃分 (Phase 1 vs Phase 2)

功能 Phase 1 (MVP) Phase 2
商品瀏覽 + 靜態頁
Stripe 付款 + Webhook 扣庫存
管理者 JSON 上傳 (/api/sync)
AI Chat Copilot(自然語言改庫存) ⚠️ 先以列表表格編輯為主
PayPal 整合
出貨地區 GitOps 設定 ✅(簡單 JSON) 擴展至稅率計算與更多規則
購物車庫存即時驗證 ✅(基礎版) 擴展至保留庫存(暫時鎖定庫存)

2. 系統架構與技術堆疊 (System Architecture & Stack)

2.1 架構圖解 (Architecture Flow)

graph TD
    User[訪客/管理員] -->|HTTPS| CF_Pages[Astro Frontend
Cloudflare Pages] subgraph Cloudflare Ecosystem CF_Pages -->|Fetch /api/sync| CF_Worker[Cloudflare Workers
Gateway API] CF_Pages -->|Fetch /api/analyze| CF_Worker end subgraph Neon Cloud NeonDB[(Neon Serverless
Postgres)] end subgraph Vercel Ecosystem CF_Worker -->|Proxy Request| Vercel_AI[Vercel AI SDK
LangChain] end CF_Worker <-->|SQL over HTTP| NeonDB Vercel_AI <-->|SQL over HTTP| NeonDB

2.2 技術選型 (Tech Stack)

組件 技術/服務 角色與職責
Storefront Astro (Cloudflare Pages) 負責 UI 渲染、靜態資源、表單互動。
API Gateway Cloudflare Workers 統一 API 入口 (/api/*)、路由轉發、請求驗證。
Database Neon Postgres (Serverless) 儲存商品庫存、簡易訂單紀錄、AI 分析結果(核心交易資料庫)。
AI Backend Vercel AI SDK (LangChain) 執行進銷存 Copilot 列表頁和 Chat 介面。
Payments Stripe & PayPal 處理金流交易 (直接對接前端與 Webhook)。
ORM Drizzle ORM 統一管理 Workers 與 Vercel 對 Neon Postgres 的資料存取。

3. 使用者流程 (User Flows)

3.1 一般訪客 (Shopper)

  1. 瀏覽:訪問 Cloudflare Pages 託管的靜態頁面 (極速)。
  2. 庫存檢查:進入商品頁時,Astro (SSR) 或 Client 透過 Workers API 查詢 Neon Postgres 實時庫存。
  3. 結帳:Stripe/PayPal 結帳 -> Webhook 觸發 Workers -> 扣除 Neon 庫存。

3.2 管理者 (Admin) - 進銷存管理 & AI Copilot

  1. 資料同步 (Sync)
    • 管理員上傳最新的商品 JSON 或 Excel。
    • 前端呼叫 /api/sync
    • Workers 接收資料並更新 Neon 資料庫。
  2. AI 進銷存 Copilot(列表頁)
    • 管理員在部署於 Vercel 的 listings 頁面查看 Neon Postgres 中的商品庫存與價格。
    • 可直接在表格中編輯 stockprice 等欄位,由後端透過 Drizzle + Neon 將變更寫回資料庫。
  3. AI 進銷存 Copilot(Chat 介面)
    • 管理員在 Chat 介面輸入自然語言指令(例如:「把夏季系列庫存 +20」、「把 SKU123 價格改成 1290」)。
    • Vercel AI SDK 將指令解析為結構化變更(要修改的 SKU、欄位與新值),並呼叫 Drizzle + Neon 套用到資料庫。
    • 系統回傳本次變更摘要(被修改的 SKU、欄位與新值),方便管理員在手機或桌機上快速確認。

4. 詳細功能規格 (Functional Specifications)

4.1 資料庫設計 (Neon Postgres Schema 簡化版)

4.2 API 介面定義 (Workers Route)

所有 API 統一由 Cloudflare Workers 網域提供 (例如 api.yourbrand.com 或同網域路由),解決跨域問題 (CORS)。

Method Endpoint 描述 下游流向
GET /api/products 獲取商品列表與即時庫存 查詢 Neon Postgres
POST /api/sync 管理員上傳 JSON 更新庫存 寫入 Neon Postgres
POST /api/analyze 觸發 AI 進行進銷存分析 轉發至 Vercel
POST /api/webhook 接收 Stripe/PayPal 付款通知 寫入 Neon Postgres

4.3 Vercel AI SDK:進銷存 Copilot 整合

4.4 網站頁面架構 (Frontend Pages)

  1. 首頁 /
    • Hero 區塊(品牌標語 + CTA 按鈕)
    • 精選商品(最多 4–6 個)
    • 優點介紹 / USP
  2. 商品列表頁 /products
    • 顯示所有 SKU
    • 支援簡易篩選 / 排序(例如「價格由低到高」)
  3. 商品詳細頁 /products/[slug]
    • 商品名稱、圖片、價格、描述
    • 規格/尺寸/顏色(如有)
    • 加入購物車按鈕
  4. 購物車頁 /cart
    • 列出商品:名稱、數量、小計
    • 支援:增加 / 減少數量、移除商品
    • 顯示總金額
    • 前往結帳按鈕
  5. 結帳頁 /checkout
    • 填寫 Email、收件人姓名、收件地址(若是實體商品)
    • 選擇付款方式:Stripe / PayPal
    • 按下「前往付款」後導向對應金流頁面
  6. 訂單結果頁
    • /order/success:付款成功顯示感謝頁,顯示訂單摘要(非敏感資訊)
    • /order/cancel:付款取消或失敗的頁面,提供「回購物車」按鈕
  7. 靜態頁面
    • /about:品牌介紹
    • /contact:聯絡方式
    • /policy:隱私權 & 退換貨/退款政策

4.5 商品與購物車

4.6 金流整合 – Stripe

4.7 金流整合 – PayPal

4.8 出貨地區控制(Shipment Area Control)


5. 部署與開發流程 (Deployment & DevOps)

5.1 環境變數配置 (.env)

Cloudflare Pages & Workers:

# 連接 Vercel 的密鑰
VERCEL_SECRET=your_shared_secret_key
# Neon Postgres 連線字串
NEON_URL=postgres://user:pass@ep-xxx.neon.tech/db
# Stripe/PayPal Keys
STRIPE_SECRET_KEY=sk_...

Vercel:

# Neon Postgres 連線字串
NEON_URL=postgres://user:pass@ep-xxx.neon.tech/db
# AI Provider Keys
OPENAI_API_KEY=...
# 驗證來自 Workers 的請求
VERCEL_SECRET=your_shared_secret_key

5.2 部署指令 (Deployment Guide)

為了在 15 分鐘內完成上線,請依照以下順序:

  1. Database (Neon Postgres)

    # 在 Neon 後台建立專案與資料表,或透過 psql 套用 schema
    psql $NEON_URL < ./schema.sql
  2. API Gateway (Workers)

    # 在 workers 目錄下部署,並確保已設定 NEON_URL secret
    npx wrangler secret put NEON_URL
    npx wrangler deploy
  3. AI Backend (Vercel)

    # 部署 Vercel 專案並設定 NEON_URL / OPENAI_API_KEY
    vercel --prod
  4. Frontend (Astro -> CF Pages)

    git push origin main
    # Cloudflare Pages 自動偵測並部署

6. 商業與運維優勢 (Business & Ops Benefits)

  1. 高可用性 (High Availability)
    • 若 Vercel (AI) 掛點,消費者依然可以正常瀏覽商品與結帳 (Core flow on Cloudflare),僅後台分析功能暫停。
  2. 極致成本控制
    • 靜態流量走 Cloudflare 免費/低價額度,交易資料走 Neon Serverless Postgres 的免費額度與按量計費模型。
    • 昂貴的 AI Compute Time (Vercel Function duration) 只有在管理員按「分析」時才產生。
  3. 專業形象
    • 單一網域 (Single Domain) 體驗,不會出現 api.vercel.app 這種第三方網址,提升品牌信任度。

7. 潛在風險與解決方案


其它建議

  1. API 安全性

    • 雖然 /api/analyze 是內部功能,但因為暴露在公網,建議在 Request Header 加上簡單的 Admin Password 驗證,或者檢查 Cloudflare Access 的 Token,避免被路人亂打 API 導致你的 Vercel 帳單爆炸。
  2. Drizzle ORM 是關鍵

    • 因為你在兩個地方 (Workers, Vercel) 都要操作同一個 Neon Postgres,強烈建議把 Database Schema 定義成一個共用的 TypeScript Package,或者兩邊 copy 一份一樣的 schema.ts。使用 Drizzle ORM(搭配 neon-http)可以讓你用 TypeScript 操作 SQL,開發體驗會好非常多。
  3. 保持 Workers 輕量化

    • 千萬不要在 Workers 裡面跑複雜的迴圈或資料處理。Workers 的 CPU 時間有限 (預設 10ms/50ms)。邏輯是:Workers 負責搬運 (I/O),Vercel 負責思考 (Compute)。你的架構圖已經完美體現了這一點,執行時請務必堅持這個原則.
  4. 法律與合規(Stripe / PayPal 審核)

    • 在 footer 加上 /policy, /privacy, /terms 等靜態頁面連結。
    • 清楚寫明退款期限、聯絡方式,降低金流審核風險。
  5. 交易郵件通知(Transactional Emails)

    • 建議開啟 Stripe Dashboard 中「Email customers about successful payments」,由 Stripe 代寄收據。
    • 出貨通知在 MVP 階段可先由人工 Email 寄送,之後再視需要自動化。
  6. Cloudflare Pages _routes.json 優化

    • public/_routes.json 明確標註哪些是靜態資源、哪些走 Workers,節省運算資源並提升圖片載入速度。
  7. 測試環境 vs 生產環境(Env Vars)

    • 在 Cloudflare Pages 區分 Production / Preview 環境變數:
      • Production:Stripe Live Keys
      • Preview:Stripe Test Keys
    • 避免測試時誤用正式金流,或上線後仍使用測試 Key。
  8. 圖片處理(Image Optimization)

    • 建議善用 Astro <Image /> 元件或類似機制,自動產生多尺寸 WebP/AVIF,提升行動端載入速度。
  9. 客服入口(Contact)

    • MVP 階段可先使用 mailto:yourname@example.com 或連結至既有的聯絡渠道(例如 LINE / WhatsApp),之後再視需求擴充成表單 + 後端服務。
  10. Neon 連線效能

    • 使用 @neondatabase/serverless 的 HTTP driver,在 Workers / Vercel runtime 中共用初始化好的 Neon client,避免每個請求重新建立多個連線。
    • 後續若官方提供連線池或最大併發設定,應依實際流量調整,以避免 Workers 併發過高時觸及 Neon 資源限制。