# Epic 1: 完整任務定義 (Story 1.3-1.17)

**建立日期：** 2025-01-30
**適用於：** Webflow to Payload CMS + Astro Migration 專案

---

## 📋 專案全貌

### Epic 結構

```
Epic 1: Webflow to Payload CMS + Astro Migration
├── Story 1.1: Project Infrastructure Setup ✅ 85%
├── Story 1.2: Payload CMS Collections Definition ⚠️ 43%
├── Story 1.3: Content Migration Script ⏸️ 0%
├── Story 1.4: Global Layout Components ⏸️ 0%
├── Story 1.5: Homepage Implementation ⏸️ 0%
├── Story 1.6: About Page Implementation ⏸️ 0%
├── Story 1.7: Solutions Page Implementation ⏸️ 0%
├── Story 1.8: Contact Page with Form ⏸️ 0%
├── Story 1.9: Blog System Implementation ⏸️ 0%
├── Story 1.10: Portfolio Implementation ⏸️ 0%
├── Story 1.11: Teams Page Implementation ⏸️ 0%
├── Story 1.12: Authentication System Implementation ⏸️ 0%
├── Story 1.13: Admin Dashboard ⏸️ 0%
├── Story 1.14: SEO Implementation ⏸️ 0%
├── Story 1.15: Performance Optimization ⏸️ 0%
├── Story 1.16: Deployment to Cloudflare ⏸️ 0%
└── Story 1.17: Testing and Quality Assurance ⏸️ 0%

Total: 1 Epic, 17 Stories
```

### Story 分類

**基礎設施 (Infrastructure):**
- Story 1.1: Project Infrastructure Setup
- Story 1.2: Payload CMS Collections Definition
- Story 1.3: Content Migration Script

**前端組件 (Frontend Components):**
- Story 1.4: Global Layout Components (Header/Footer)

**頁面實作 (Page Implementation):**
- Story 1.5: Homepage
- Story 1.6: About Page
- Story 1.7: Solutions Page
- Story 1.8: Contact Page

**內容系統 (Content Systems):**
- Story 1.9: Blog System
- Story 1.10: Portfolio
- Story 1.11: Teams Page

**後台系統 (Admin System):**
- Story 1.12: Authentication System
- Story 1.13: Admin Dashboard

**上線準備 (Production Readiness):**
- Story 1.14: SEO Implementation
- Story 1.15: Performance Optimization
- Story 1.16: Deployment to Cloudflare
- Story 1.17: Testing and Quality Assurance

---

## 📊 Story 依賴關係矩陣

```
       1.1  1.2  1.3  1.4  1.5  1.6  1.7  1.8  1.9  1.10 1.11 1.12 1.13 1.14 1.15 1.16 1.17
1.1    ✓  ⬆︎
1.2         ✓  ⬆︎
1.3             ⬎︎
1.4             ✓  ⬆︎
1.5                 ✓  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎
1.6                 ✓  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎
1.7                 ✓  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎
1.8                 ✓  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎
1.9                 ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ✓  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎
1.10                ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ✓  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎
1.11                ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ✓  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎
1.12                ⬎︎  ⬎︎  ✓  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎
1.13                    ⬎︎  ✓  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎
1.14                    ⬎︎  ✓  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎
1.15                    ⬎︎  ✓  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎
1.16                    ⬎︎  ✓  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎
1.17                    ⬎︎  ✓  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎  ⬎︎

Legend:
✓ = 直接依賴 (必須先完成)
⬆︎ = 強烈建議順序
⬎︎ = 可並行開發
```

---

## Story 1.3: Content Migration Script

**User Story:**
```gherkin
As a Developer,
I want to create a migration script that imports Webflow content to Payload CMS,
So that I can automate content transfer and reduce manual errors.
```

### Overall Goal
建立自動化工具，將 Webflow CMS 導出的內容轉換並匯入到 Payload CMS，確保：
- 35+ 篇文章完整遷移
- 4 個分類保留
- 所有 Portfolio 項目遷移
- 媒體檔案上傳到 R2
- SEO 屬性（slugs, meta tags）保留
- 可重複執行，不產生重複資料

### Estimated Effort
12-16 小時（含測試和除錯）

---

### Task 1.3.1: Research Webflow Export Format

**Description:**
研究 Webflow CMS 導出的資料格式，建立欄位對應表

**Acceptance Criteria:**
- [ ] 下載或取得 Webflow JSON/CSV 範例檔案
- [ ] 分析 Posts 集合的欄位結構
- [ ] 分析 Categories 集合的欄位結構
- [ ] 分析 Portfolio 集合的欄位結構
- [ ] 建立 Webflow → Payload 欄位對應表
- [ ] 識別資料型別轉換需求
- [ ] 識別特殊欄位處理需求（richtext, 圖片, 關聯）

**Definition of Done:**
- [ ] 欄位對應表文檔完成 (`docs/migration-field-mapping.md`)
- [ ] 包含所有 3 個主要集合的對應
- [ ] 標注資料型別轉換規則
- [ ] 標注特殊處理需求

**預估時間：** 2 小時

---

### Task 1.3.2: Create Migration Script Foundation

**Description:**
建立遷移腳本的基礎架構和配置

**Acceptance Criteria:**
- [ ] 建立專案目錄 `apps/backend/scripts/migration/`
- [ ] 建立 `migrate.ts` 主程式檔案
- [ ] 建立環境變數配置檔案 `.env.migration`
- [ ] 實作 Payload CMS API 客戶端
- [ ] 實作日誌系統（記錄遷移過程）
- [ ] 實作進度顯示功能
- [ ] 支援命令列參數（dry-run, verbose, collection filter）

**Definition of Done:**
- [ ] 腳本結構清晰
- [ ] 可執行 `pnpm tsx scripts/migration/migrate.ts --help`
- [ ] 支援 `--dry-run` 模式（只驗證不寫入）
- [ ] 支援 `--collection` 參數（指定遷移哪個集合）
- [ ] 連接到 Payload CMS API 成功

**預估時間：** 2 小時

---

### Task 1.3.3: Implement Posts Migration Logic

**Description:**
實作文章（行銷放大鏡）的遷移邏輯

**Acceptance Criteria:**
- [ ] 解析 Webflow Posts JSON/CSV
- [ ] 轉換欄位對應：
  - title → title
  - slug → slug (保留原始值)
  - body → content (richtext → Lexical format)
  - published-date → publishedAt
  - post-category → categories (relationship)
  - featured-image → heroImage (上傳到 R2)
  - seo-title → meta.title
  - seo-description → meta.description
- [ ] 處理 richtext 內容格式轉換
- [ ] 處理圖片下載和上傳到 R2
- [ ] 處理分類關聯（需先遷移 Categories）
- [ ] 保留原始 publishedDate
- [ ] 設定狀態為 published

**Definition of Done:**
- [ ] 成功遷移測試資料（5 篇文章）
- [ ] 圖片成功上傳到 R2
- [ ] Richtext 格式正確轉換
- [ ] 分類關聯正確建立
- [ ] Slug 保留原始值
- [ ] 可重複執行（檢查重複）

**預估時間：** 3 小時

---

### Task 1.3.4: Implement Categories Migration Logic

**Description:**
實作分類（文章分類）的遷移邏輯

**Acceptance Criteria:**
- [ ] 解析 Webflow Categories JSON/CSV
- [ ] 轉換欄位對應：
  - name → title
  - slug → slug
  - 顏色欄位 → textColor, backgroundColor
  - 排序欄位 → order
- [ ] 處理巢狀結構（如果有）
- [ ] 設定預設值（order: 0）

**Definition of Done:**
- [ ] 成功遷移所有 4 個分類
- [ ] 顏色欄位正確轉換
- [ ] Order 欄位正確設定
- [ ] 可重複執行

**預估時間：** 1 小時

---

### Task 1.3.5: Implement Portfolio Migration Logic

**Description:**
實作作品集（網站設計範本）的遷移邏輯

**Acceptance Criteria:**
- [ ] 解析 Webflow Portfolio JSON/CSV
- [ ] 轉換欄位對應：
  - Name → title
  - Slug → slug
  - website-link → url
  - preview-image → image (上傳到 R2)
  - description → description
  - website-type → websiteType
  - tags → tags (array)
- [ ] 處理圖片下載和上傳到 R2
- [ ] 處理標籤（字串轉陣列）

**Definition of Done:**
- [ ] 成功遷移測試資料（3 個項目）
- [ ] 圖片成功上傳到 R2
- [ ] 標籤正確解析為陣列
- [ ] 外部連結正確設定
- [ ] 可重複執行

**預估時間：** 2 小時

---

### Task 1.3.6: Implement Media Migration Module

**Description:**
實作媒體檔案遷移模組（下載 + 上傳 R2）

**Acceptance Criteria:**
- [ ] 從 Webflow 匯出取得所有媒體 URL 清單
- [ ] 下載圖片到本地臨時目錄
- [ ] 上傳到 Cloudflare R2
- [ ] 取得 R2 URL
- [ ] 更新 Payload 中的媒體引用
- [ ] 支援批次上傳（並行處理）
- [ ] 錯誤處理和重試機制
- [ ] 進度顯示（已處理 x / 總數 y）

**Definition of Done:**
- [ ] 成功下載測試圖片
- [ ] 成功上傳到 R2
- [ ] 取得正確的 R2 URL
- [ ] 支援常見圖片格式（jpg, png, webp）
- [ ] 支援批次上傳（5 並行）
- [ ] 錯誤時自動重試（3 次）
- [ ] 清理本地臨時檔案

**預估時間：** 3 小時

---

### Task 1.3.7: Implement Deduplication Logic

**Description:**
實作重複資料檢查機制，支援安全重複執行

**Acceptance Criteria:**
- [ ] 根據 slug 檢查是否已存在
- [ ] Posts: 檢查 slug + publishedDate 組合
- [ ] Categories: 檢查 slug
- [ ] Portfolio: 檢查 slug
- [ ] Media: 根據檔名或 hash 檢查
- [ ] 支援 `--force` 參數強制覆蓋
- [ ] 記錄跳過的項目
- [ ] Dry-run 模式只顯示不執行

**Definition of Done:**
- [ ] 重複執行腳本不產生重複資料
- [ ] 記錄每次執行的統計：
  - 新增數量
  - 跳過數量（重複）
  - 錯誤數量
- [ ] Dry-run 模式正確預覽結果
- [ ] Force 模式可正確覆蓋

**預估時間：** 2 小時

---

### Task 1.3.8: Generate Migration Report

**Description:**
產生詳細的遷移報告，供驗證使用

**Acceptance Criteria:**
- [ ] 生成 JSON 報告檔案
- [ ] 報告包含：
  - 遷移時間戳
  - 成功遷移清單（ids, slugs）
  - 失敗清單（錯誤原因）
  - 跳過清單（重複項目）
  - 統計摘要
- [ ] 生成可讀的 Markdown 報告
- [ ] 儲存到 `reports/migration-{timestamp}.md`

**Definition of Done:**
- [ ] 報告檔案格式清晰易讀
- [ ] 包含所有關鍵資訊
- [ ] Markdown 報告可直接分享
- [ ] 統計資訊準確無誤

**預估時間：** 1 小時

---

### Task 1.3.9: Testing and Validation

**Description:**
測試遷移腳本，確保資料正確性

**Acceptance Criteria:**
- [ ] 測試資料遷移（5 篇文章, 2 分類, 3 個項目）
- [ ] 驗證 Payload CMS admin 中的內容
- [ ] 驗證圖片可正常顯示
- [ ] 驗證 Richtext 格式正確
- [ ] 驗證關聯關係正確
- [ ] 測試 Dry-run 模式
- [ ] 測試重複執行（不產生重複）
- [ ] 測試 Force 模式（可覆蓋）
- [ ] 測試錯誤處理（無效資料）

**Definition of Done:**
- [ ] 所有測試案例通過
- [ ] 手動驗證 10 筆資料正確性
- [ ] 無資料損壞或格式錯誤
- [ ] 報告準確反映遷移結果

**預估時間：** 2 小時

---

## Story 1.4: Global Layout Components

**User Story:**
```gherkin
As a Developer,
I want to create Header and Footer components matching Webflow design,
So that all pages have consistent navigation and branding.
```

### Overall Goal
建立全站共用的 Header 和 Footer 組件，實現：
- 響應式導航選單（桌面/手機）
- 動態從 Payload CMS 載入導航項目
- 一致的 Enchun 品牌展示
- 頁腳動態分類連結

### Estimated Effort
8-10 小時

---

### Task 1.4.1: Design Component Architecture

**Description:**
規劃 Header 和 Footer 組件的架構和 API

**Acceptance Criteria:**
- [ ] 定義 Header 組件 Props 介面
- [ ] 定義 Footer 組件 Props 介面
- [ ] 規劃 Payload CMS Globals 結構
  - Header global (navItems array)
  - Footer global (company info, social links)
- [ ] 設計狀態管理（手機選單開闔）
- [ ] 規劃響應式斷點（991px, 768px, 479px）
- [ ] 設計顏色系統對應 Webflow

**Definition of Done:**
- [ ] 組件架構文檔完成
- [ ] Props 型別定義完成
- [ ] Payload Globals schema 規劃完成
- [ ] 響應式設計策略文檔完成

**預估時間：** 1.5 小時

---

### Task 1.4.2: Create Header Global in Payload CMS

**Description:**
在 Payload CMS 建立 Header global，管理導航選單

**Acceptance Criteria:**
- [ ] 建立 `globals/Header.ts` 檔案
- [ ] 定義 navItems 欄位（array）：
  - label (顯示文字)
  - type (link / dropdown / button)
  - url (連結位址)
  - items (子選單 array)
  - badge (Hot / New / none)
  - openInNewTab (boolean)
- [ ] Admin UI 配置（群組編輯）
- [ ] 預設導航項目：
  - 關於恩群
  - 行銷方案 (Hot badge)
  - 行銷放大鏡 (New badge)
  - 網站作品
  - 團隊介紹
  - 聯絡我們
- [ ] 設定 access control

**Definition of Done:**
- [ ] Header global 在 Payload admin 可見
- [ ] 可編輯所有導航項目
- [ ] 支援多層下拉選單
- [ ] Badge 顯示正確

**預估時間：** 1.5 小時

---

### Task 1.4.3: Create Footer Global in Payload CMS

**Description:**
在 Payload CMS 建立 Footer global，管理頁腳內容

**Acceptance Criteria:**
- [ ] 建立 `globals/Footer.ts` 檔案
- [ ] 定義欄位：
  - companyInfo (object: logo, description, phone, email)
  - socialLinks (array: platform, url)
  - marketingLinks (static array)
  - categoryLinks (dynamic: 關聯 Categories collection)
  - copyrightText (text)
- [ ] Admin UI 配置（分區編輯）
- [ ] 預設資料填入

**Definition of Done:**
- [ ] Footer global 在 Payload admin 可見
- [ ] 可編輯所有頁腳區塊
- [ ] Category links 動態載入
- [ ] 預設資料完整

**預估時間：** 1 小時

---

### Task 1.4.4: Implement Header.astro Component

**Description:**
實作 Header 組件，包含導航選單和手機選單

**Acceptance Criteria:**
- [ ] Header 固定在頂部（sticky）
- [ ] 顯示 Enchun logo（連結到首頁）
- [ ] 桌面導航選單（從 Payload CMS）
- [ ] Badge 標籤（Hot/New）
- [ ] 手機版漢堡選單按鈕
- [ ] 手機選單全螢幕覆蓋
- [ ] 手機選單項目點擊後關閉
- [ ] Scroll 時 Header 背景變化

**Definition of Done:**
- [ ] Header.astro 組件完成
- [ ] 從 Payload CMS 載入導航資料
- [ ] 桌面版導航正常顯示
- [ ] 手機版漢堡選單正常運作
- [ ] Badge 顯示正確（Hot 紅色, New 綠色）
- [ ] Responsive 斷點正確
- [ ] Scroll 行為實作

**預估時間：** 2 小時

---

### Task 1.4.5: Implement Footer.astro Component

**Description:**
實作 Footer 組件，包含公司資訊和連結

**Acceptance Criteria:**
- [ ] 顯示 Enchun logo
- [ ] 公司描述文字
- [ ] 聯絡資訊（電話, Email）
- [ ] 社群媒體連結（Facebook）
- [ ] 行銷方案連結（靜態）
- [ ] 行銷放大鏡分類連結（動態從 CMS）
- [ ] Copyright 顯示（2018 - 2024）
- [ ] 響應式佈局（桌面 3 欄，手機 1 欄）

**Definition of Done:**
- [ ] Footer.astro 組件完成
- [ ] 從 Payload CMS 載入資料
- [ ] 所有區塊正常顯示
- [ ] Category links 動態載入
- [ ] 社群連結可點擊
- [ ] Responsive 佈局正確

**預估時間：** 1.5 小時

---

### Task 1.4.6: Integration with MainLayout

**Description:**
將 Header 和 Footer 整合到 MainLayout.astro

**Acceptance Criteria:**
- [ ] 更新 `layouts/Layout.astro`
- [ ] 整合 Header 組件
- [ ] 整合 Footer 組件
- [ ] 設定頁面容器樣式
- [ ] 確保所有頁面使用此 Layout
- [ ] 測試不同頁面的 Header/Footer 顯示

**Definition of Done:**
- [ ] Layout.astro 更新完成
- [ ] Header 和 Footer 正確顯示
- [ ] 所有頁面繼承 Layout
- [ ] 無視覺問題

**預估時間：** 1 小時

---

## Story 1.5: Homepage Implementation

**User Story:**
```gherkin
As a Visitor,
I want to view the homepage with hero section and service features,
So that I can understand what Enchun Digital offers.
```

### Overall Goal
實作首頁，包含 Hero section、服務特色、Portfolio 預覽、CTA 區塊，視覺保真度 95%+。

### Estimated Effort
6-8 小時

---

### Task 1.5.1: Create Homepage in Payload CMS

**Description:**
在 Payload CMS 建立首頁內容

**Acceptance Criteria:**
- [ ] 在 Pages collection 建立 homepage
- [ ] Slug: `index`
- [ ] Hero section blocks:
  - Headline
  - Subheadline
  - CTA button text and link
- [ ] Service features section:
  - 4 個服務特色卡片
  - Icon + title + description
- [ ] Portfolio preview section
- [ ] Final CTA section
- [ ] SEO meta data

**Definition of Done:**
- [ ] Homepage 在 Payload admin 可編輯
- [ ] 所有 sections 可編輯
- [ ] Preview 功能正常

**預估時間：** 1 小時

---

### Task 1.5.2: Create index.astro Route

**Description:**
建立首頁路由和頁面結構

**Acceptance Criteria:**
- [ ] 建立 `apps/frontend/src/pages/index.astro`
- [ ] 使用 MainLayout
- [ ] 從 Payload API 載入首頁內容
- [ ] 實作各 section 組件：
  - Hero section
  - Service features grid
  - Portfolio preview
  - CTA section
- [ ] 錯誤處理（404 或 API 失敗）

**Definition of Done:**
- [ ] index.astro 路由建立
- [ ] 從 Payload API 成功載入資料
- [ ] 所有 sections 正確顯示
- [ ] 錯誤處理正常

**預估時間：** 2 小時

---

### Task 1.5.3: Implement Hero Section

**Description:**
實作首頁 Hero 區塊

**Acceptance Criteria:**
- [ ] 全背景圖片/影片
- [ ] 標題文字（headline）
- [ ] 副標題（subheadline）
- [ ] CTA 按鈕（樣式、動畫）
- [ ] 覆蓋層（深色遮罩）
- [ ] 響應式對齊（桌面置中，手機置中）
- [ ] 動畫效果（淡入、滑入）

**Definition of Done:**
- [ ] Hero.astro 組件完成
- [ ] 視覺符合 Webflow 設計
- [ ] 響應式斷點正確
- [ ] CTA 按鈕可點擊
- [ ] 動畫流暢

**預估時間：** 1.5 小時

---

### Task 1.5.4: Implement Service Features Grid

**Description:**
實作服務特色展示區塊

**Acceptance Criteria:**
- [ ] 4 個服務特色卡片
- [ ] 每個卡片包含：
  - Icon (使用 Iconify 或 SVG)
  - 標題（中文）
  - 描述文字
- [ ] Grid 佈局（桌面 2x2，手機 1x4）
- [ ] Hover 效果（陰影、上移）
- [ ] 卡片間距一致

**Definition of Done:**
- [ ] ServiceFeatures.astro 組件完成
- [ ] 從 Payload CMS 載入資料
- [ ] 視覺符合 Webflow 設計
- [ ] Grid 佈局響應式
- [ ] Hover 效果流暢

**預估時間：** 1.5 小時

---

### Task 1.5.5: Implement Portfolio Preview Section

**Description:**
實作作品集預覽區塊

**Acceptance Criteria:**
- [ ] 顯示 3-4 個精選作品
- [ ] 每個項目卡片：
  - 項目圖片
  - 項目標題
  - 簡短描述
  - "查看作品" 按鈕
- [ ] Grid 佈局（桌面 3-4 欄，手機 1-2 欄）
- [ ] 連結到 Portfolio 頁面

**Definition of Done:**
- [ ] PortfolioPreview.astro 組件完成
- [ ] 從 Payload CMS 載入精選作品
- [ ] 卡片設計符合 Webflow
- [ ] 連結正確指向 Portfolio

**預估時間：** 1 小時

---

### Task 1.5.6: Implement CTA Section

**Description:**
實作最終行動呼籲區塊

**Acceptance Criteria:**
- [ ] 標題：「準備好開始新的旅程了嗎？」
- [ ] 副標題文字
- [ ] 主要 CTA 按鈕（聯絡我們）
- [ ] 次要 CTA 按鈕（查看案例）
- [ ] 背景色區塊（品牌色）
- [ ] 按鈕樣式（主色、次色）
- [ ] 居中對齊

**Definition of Done:**
- [ ] CTASection.astro 組件完成
- [ ] 從 Payload CMS 載入內容
- [ ] 兩個按鈕功能正常
- [ ] 視覺突出吸引注意

**預估時間：** 1 小時

---

### Task 1.5.7: Performance Optimization and Testing

**Description:**
優化首頁效能並測試

**Acceptance Criteria:**
- [ ] 圖片優化（WebP, responsive sizes）
- [ ] 懶加載首屏內容
- [ ] Lighthouse Performance audit ≥ 90
- [ ] FCP < 1.5s
- [ ] LCP < 2.5s
- [ ] CLS < 0.1
- [ ] 視覺保真度測試（對比 Webflow）

**Definition of Done:**
- [ ] 所有效能指標達標
- [ ] 視覺保真度 ≥ 95%
- [ ] 所有瀏覽器測試通過
- [ ] 移動版測試通過

**預估時間：** 1 小時

---

## Story 1.6: About Page Implementation

**User Story:**
```gherkin
As a Visitor,
I want to learn about Enchun Digital's values and differences,
So that I can trust them as my digital marketing partner.
```

### Estimated Effort
6-8 小時

---

### Task 1.6.1: Create About Page in Payload CMS

**Acceptance Criteria:**
- [ ] 建立 about-enchun 頁面（slug: about-enchun）
- [ ] Hero section:
  - Title: "關於恩群數位"
- [ ] Service features section:
  - 4 個特色卡片
  - 在地化優先
  - 高投資轉換率
  - 數據優先
  - 關係優於銷售
- [ ] Comparison table:
  - 恩群數位 vs 其他行銷公司
  - 多行對比
- [ ] CTA section:
  - Title: "跟行銷顧問聊聊"
  - 按鈕連結到聯絡頁面

**預估時間：** 1 小時

---

### Task 1.6.2: Create about-enchun.astro Route

**Acceptance Criteria:**
- [ ] 建立路由檔案
- [ ] 使用 MainLayout
- [ ] 從 Payload API 載入內容
- [ ] 實作各 section 組件

**預估時間：** 1.5 小時

---

### Task 1.6.3: Implement Hero Section

**Acceptance Criteria:**
- [ ] 背景圖片
- [ ] Title: "關於恩群數位"
- [ ] 副標題（如有）
- [ ] 覆蓋層

**預估時間：** 1 小時

---

### Task 1.6.4: Implement Service Features Section

**Acceptance Criteria:**
- [ ] 4 個特色卡片
- [ ] Icon + Title + Description
- [ ] Grid 佈局
- [ ] Hover 效果

**預估時間：** 1.5 小時

---

### Task 1.6.5: Implement Comparison Table

**Acceptance Criteria:**
- [ ] Table 結構：
  - 左欄：恩群數位
  - 右欄：其他行銷公司
- [ ] 多行對比項目
- [ ] 表格樣式（邊框、間距）
- [ ] 響應式（手機可水平滾動）

**預估時間：** 1.5 小時

---

### Task 1.6.6: Implement CTA Section

**Acceptance Criteria:**
- [ ] Title: "跟行銷顧問聊聊"
- [ ] CTA 按鈕
- [ ] 連結到 contact-us 或直接 mailto

**預估時間：** 0.5 小時

---

### Task 1.6.7: Performance and Visual Testing

**Acceptance Criteria:**
- [ ] Lighthouse Performance ≥ 90
- [ ] 視覺保真度 ≥ 95%
- [ ] Responsive 測試

**預估時間：** 1 小時

---

## Story 1.7: Solutions Page Implementation

**User Story:**
```gherkin
As a Visitor,
I want to see the marketing services offered,
So that I can understand how Enchun can help my business.
```

### Estimated Effort
4-6 小時

---

### Task 1.7.1: Create Solutions Page in Payload CMS

**Acceptance Criteria:**
- [ ] 建立 marketing-solutions 頁面（slug: marketing-solutions）
- [ ] Hero section:
  - Title: "行銷方案"
- [ ] Services list:
  - Google 商家關鍵字
  - Google Ads
  - 社群代操
  - 論壇行銷
  - 網紅行銷
  - 形象影片
- [ ] 每個服務包含：
  - Title
  - Description
  - 詳細資訊（可選）
- [ ] Service badges:
  - "Hot" badge（熱門服務）
  - "New" badge（新服務）

**預估時間：** 1 小時

---

### Task 1.7.2: Create marketing-solutions.astro Route

**Acceptance Criteria:**
- [ ] 建立路由檔案
- [ ] 使用 MainLayout
- [ ] 從 Payload API 載入內容
- [ ] 實作 services list 組件

**預估時間：** 1.5 小時

---

### Task 1.7.3: Implement Hero Section

**Acceptance Criteria:**
- [ ] 背景圖片
- [ ] Title: "行銷方案"
- [ ] 副標題（如有）

**預估時間：** 1 小時

---

### Task 1.7.4: Implement Services List Component

**Acceptance Criteria:**
- [ ] 6 個服務項目卡片
- [ ] 每個卡片包含：
  - Icon
  - Service title
  - Description
  - "Hot" badge（如有）
  - "New" badge（如有）
- [ ] Grid 或 List 佈局
- [ ] Hover 效果

**預估時間：** 2 小時

---

### Task 1.7.5: Performance and Visual Testing

**Acceptance Criteria:**
- [ ] Lighthouse Performance ≥ 90
- [ ] 視覺保真度 ≥ 95%
- [ ] Responsive 測試

**預估時間：** 1 小時

---

## Story 1.8: Contact Page with Form

**User Story:**
```gherkin
As a Potential Client,
I want to contact Enchun Digital through a form,
So that I can inquire about their services.
```

### Estimated Effort
6-8 小時

---

### Task 1.8.1: Create Contact Page in Payload CMS

**Acceptance Criteria:**
- [ ] 建立 contact-us 頁面（slug: contact-us）
- [ ] Hero section:
  - Title: "聯絡我們"
  - Description
- [ ] Contact form section:
  - 表單標題
  - 表單說明
- [ ] Contact info section:
  - Phone: 02-55700527
  - Email: enchuntaiwan@gmail.com
  - Facebook link
- [ ] CTA section

**預估時間：** 1 小時

---

### Task 1.8.2: Create contact-us.astro Route

**Acceptance Criteria:**
- [ ] 建立路由檔案
- [ ] 使用 MainLayout
- [ ] 從 Payload API 載入內容

**預估時間：** 1 小時

---

### Task 1.8.3: Implement Contact Form

**Acceptance Criteria:**
- [ ] 表單欄位：
  - Name (required)
  - Email (required, email validation)
  - Phone (optional)
  - Message (required, textarea)
  - Service interest (dropdown/select)
- [ ] Client-side validation
- [ ] Submit 按鈕（樣式、loading state）
- [ ] Success message display
- [ ] Error message display

**預估時間：** 2 小時

---

### Task 1.8.4: Implement Form Submission Logic

**Acceptance Criteria:**
- [ ] 建立 API route `/api/contact`
- [ ] Cloudflare Worker 處理表單提交
- [ ] Email 發送（使用 Resend）
- [ ] Spam protection:
  - Honeypot field
  - Rate limiting
- [ ] 表單資料儲存（可選）
- [ ] 錯誤處理

**Definition of Done:**
- [ ] 表單提交成功
- [ ] Email 正確發送
- [ ] Spam protection 正常運作
- [ ] 錯誤處理完善

**預估時間：** 2 小時

---

### Task 1.8.5: Implement Contact Info Display

**Acceptance Criteria:**
- [ ] Phone number顯示
- [ ] Email 顯示（可點擊 mailto）
- [ ] Facebook link（可點擊）
- [ ] Icon 或文字標籤

**預估時間：** 0.5 小時

---

### Task 1.8.6: Implement CTA Section

**Acceptance Criteria:**
- [ ] 標題和描述
- [ ] CTA 按鈕

**預估時間：** 0.5 小時

---

### Task 1.8.7: Testing and Validation

**Acceptance Criteria:**
- [ ] 表單驗證測試
- [ ] 表單提交測試
- [ ] Email 接收測試
- [ ] Spam protection 測試
- [ ] 視覺保真度 ≥ 95%

**預估時間：** 1 小時

---

## Story 1.9: Blog System Implementation

**User Story:**
```gherkin
As a Visitor,
I want to browse marketing articles and insights,
So that I can learn from Enchun's expertise.
```

### Overall Goal
建立完整的部落格系統，包含文章列表、文章詳情、分類頁面，支援分類篩選和搜尋。

### Estimated Effort
12-16 小時

---

### Task 1.9.1: Design Blog Architecture

**Description:**
規劃部落格系統的架構和路由

**Acceptance Criteria:**
- [ ] 定義路由結構：
  - `/blog` - 文章列表
  - `/blog/[slug]` - 文章詳情
  - `/blog/category/[slug]` - 分類頁面
- [ ] 設計 Payload CMS Posts collection 擴展
- [ ] 設計分類篩選機制
- [ ] 規劃 SEO 策略（每頁獨特 meta tags）
- [ ] 設計分頁機制

**Definition of Done:**
- [ ] 路由架構文檔完成
- [ ] Posts collection 擴展計劃完成
- [ ] 分類篩選策略定義
- [ ] SEO 實作計劃完成

**預估時間：** 2 小時

---

### Task 1.9.2: Implement Blog Listing Page

**Description:**
實作文章列表頁面

**Acceptance Criteria:**
- [ ] 建立 `apps/frontend/src/pages/blog/index.astro`
- [ ] 從 Payload API 載入已發布文章（status: published）
- [ ] 預設排序：publishedDate 降序
- [ ] 分類篩選 UI：
  - 分類標籤（從 Categories collection）
  - 點擊後過濾文章
  - "全部" 選項
- [ ] 文章卡片顯示：
  - Featured image
  - Title
  - Excerpt (從 Posts.excerpt)
  - Category badge
  - Published date
- [ ] 分頁或無限滾動
- [ ] SEO meta tags

**Definition of Done:**
- [ ] /blog 頁面正常顯示
- [ ] 文章列表正確載入
- [ ] 分類篩選功能正常
- [ ] 分頁功能正常（或無限滾動）
- [ ] SEO meta 正確

**預估時間：** 2.5 小時

---

### Task 1.9.3: Implement Article Detail Page

**Description:**
實作文章詳情頁面

**Acceptance Criteria:**
- [ ] 建立 `apps/frontend/src/pages/blog/[slug].astro`
- [ ] 從 Payload API 載入文章（根據 slug）
- [ ] Hero section:
  - Category badge
  - Title
  - Published date
  - Author（如有）
- [ ] 文章內容區塊：
  - Rich text 渲染（Lexical format）
  - 圖片顯示
  - 程式碼區塊（如有）
- [ ] Related articles section:
  - 同分類文章
  - 3-5 篇
  - 卡片式顯示
- [ ] Social sharing buttons:
  - Facebook share
  - LINE share
  - Copy link
- [ ] OG tags 配置（動態從 article.ogImage）

**Definition of Done:**
- [ ] 文章詳情頁正常顯示
- [ ] Rich text 格式正確
- [ ] Related articles 相關且正確
- [ ] Social sharing 功能正常
- [ ] SEO 和 OG tags 正確

**預估時間：** 3 小時

---

### Task 1.9.4: Implement Category Page

**Description:**
實作分類頁面

**Acceptance Criteria:**
- [ ] 建立 `apps/frontend/src/pages/blog/category/[slug].astro`
- [ ] 從 Payload API 載入分類資訊
- [ ] 顯示分類名稱和描述
- [ ] 該分類文章列表
- [ ] 分類顏色主題：
  - 使用 Categories.textColor
  - 使用 Categories.backgroundColor
  - Badge 使用分類顏色
- [ ] SEO meta tags（動態）

**Definition of Done:**
- [ ] 分類頁面正常顯示
- [ ] 文章列表正確過濾
- [ ] 顏色主題套用
- [ ] SEO tags 正確

**預估時間：** 2 小時

---

### Task 1.9.5: Extend Posts Collection for Blog Features

**Description:**
擴展 Posts collection 以支援部落格功能

**Acceptance Criteria:**
- [ ] 添加 `excerpt` 欄位（已包含在 Story 1.2）
- [ ] 添加 `ogImage` 欄位（已包含在 Story 1.2）
- [ ] 添加 `showInFooter` 欄位（已包含在 Story 1.2）
- [ ] 添加 `relatedPosts` 欄位（關聯同分類文章）
- [ ] 添加 `readingTime` 欄位（計算閱讀時間）
- [ ] 更新 admin UI 配置

**Definition of Done:**
- [ ] 所有新欄位可編輯
- [ ] relatedPosts 可選擇多個文章
- [ ] readingTime 自動計算（字數 / 200）
- [ ] Types regenerated

**預估時間：** 1.5 小時

---

### Task 1.9.6: Implement Search/Filter Functionality (Optional)

**Description:**
實作文章搜尋功能（可選）

**Acceptance Criteria:**
- [ ] 搜尋框 UI
- [ ] Payload API `_q` 參數搜尋
- [ ] 即時搜尋（debounce）
- [ ] 搜尋結果頁面

**Definition of Done:**
- [ ] 搜尋功能正常
- [ ] 即時搜尋流暢
- [ ] 搜尋結果準確

**預估時間：** 2 小時

---

### Task 1.9.7: Performance Optimization and Testing

**Acceptance Criteria:**
- [ ] Lighthouse Performance ≥ 90 (所有頁面)
- [ ] 圖片懶加載
- [ ] 程式碼 syntax highlighting
- [ ] 視覺保真度 ≥ 95%
- [ ] 分頁效能測試
- [ ] 跨瀏覽器測試

**預估時間：** 2 小時

---

## Story 1.10: Portfolio Implementation

**User Story:**
```gherkin
As a Potential Client,
I want to see Enchun's past website projects,
So that I can evaluate their design capabilities.
```

### Estimated Effort
6-8 小時

---

### Task 1.10.1: Design Portfolio Architecture

**Acceptance Criteria:**
- [ ] 定義路由結構：
  - `/website-portfolio` - 列表頁
  - `/webdesign-profolio/[slug]` - 詳情頁
- [ ] 設計 Portfolio collection 擴展
- [ ] 設計篩選機制（按類型、標籤）
- [ ] SEO 策略

**預估時間：** 1 小時

---

### Task 1.10.2: Implement Portfolio Listing Page

**Acceptance Criteria:**
- [ ] 建立 `apps/frontend/src/pages/website-portfolio.astro`
- [ ] 2-column grid 佈局
- [ ] Portfolio card 顯示：
  - Project image
  - Project title
  - Description
  - Tags (e.g., "一頁式銷售", "客戶預約")
- [ ] 從 Payload API 載入所有 portfolio
- [ ] Hover 效果（顯示更多資訊）
- [ ] SEO meta tags

**Definition of Done:**
- [ ] Portfolio 列表頁正常顯示
- [ ] 所有項目正確載入
- [ ] Grid 佈局響應式
- [ ] Hover 效果流暢

**預估時間：** 2 小時

---

### Task 1.10.3: Implement Portfolio Detail Page

**Acceptance Criteria:**
- [ ] 建立 `apps/frontend/src/pages/webdesign-profolio/[slug].astro`
- [ ] 從 Payload API 載入專案資料
- [ ] Hero section:
  - Project image
  - Project title
  - Tags
- [ ] 專案描述區塊
- [ ] "前往網站" 按鈕（外部連結 url）
- [ ] Image gallery（多圖片輪播）
- [ ] Case study 內容（如有）
- [ ] 相關專案推薦

**Definition of Done:**
- [ ] 專案詳情頁正常顯示
- [ ] 外部連結正確
- [ ] Gallery 功能正常
- [ ] SEO tags 正確

**預估時間：** 2 小時

---

### Task 1.10.4: Implement Portfolio Filter (Optional)

**Acceptance Criteria:**
- [ ] 篩選 UI（按 websiteType 或 tags）
- [ ] 即時篩選
- [ ] 篩選結果計數顯示

**預估時間：** 1 小時

---

### Task 1.10.5: Performance and Visual Testing

**Acceptance Criteria:**
- [ ] Lighthouse Performance ≥ 90
- [ ] 視覺保真度 ≥ 95%
- [ ] 圖片優化（WebP, lazy loading）
- [ ] Gallery 載入效能

**預估時間：** 1 小時

---

## Story 1.11: Teams Page Implementation

**User Story:**
```gherkin
As a Visitor,
I want to see the Enchun team members,
So that I can know who will be working on my project.
```

### Estimated Effort
4-6 小時

---

### Task 1.11.1: Design Teams Architecture

**Acceptance Criteria:**
- [ ] 決定是否使用 Payload CMS collection
  - 選項 A: 建立 Teams collection（可編輯）
  - 選項 B: 硬編碼（資料量少）
- [ ] 路由：`/teams`
- [ ] SEO 策略

**建議：** 使用 Teams collection 以保持一致性

**預估時間：** 0.5 小時

---

### Task 1.11.2: Create Teams Collection (if using CMS)

**Acceptance Criteria:**
- [ ] 建立 `collections/Teams/index.ts`
- [ ] Slug: `teams`
- [ ] 欄位：
  - name (成員姓名)
  - role (職稱)
  - photo (upload to media)
  - bio (簡介, richtext)
  - order (排序)
  - email (email, 可選)
- [ ] Access control
- [ ] Admin UI 配置

**預估時間：** 1 小時

---

### Task 1.11.3: Implement Teams Page

**Acceptance Criteria:**
- [ ] 建立 `apps/frontend/src/pages/teams.astro`
- [ ] 從 Payload API 載入團隊成員
- [ ] Grid 佈局（桌面 3-4 欄，手機 2 欄）
- [ ] Team member card:
  - Photo (圓形裁切)
  - Name
  - Role/title
  - Bio（截斷顯示或展開）
- [ ] Order 排序顯示
- [ ] SEO meta tags

**Definition of Done:**
- [ ] Teams 頁面正常顯示
- [ ] 所有成員正確載入
- [ ] 圓形照片裁切正確
- [ ] 響應式佈局

**預估時間：** 2 小時

---

### Task 1.11.4: Performance and Visual Testing

**Acceptance Criteria:**
- [ ] Lighthouse Performance ≥ 90
- [ ] 視覺保真度 ≥ 95%
- [ ] 圓形照片效能最佳化

**預估時間：** 1 小時

---

## Story 1.12: Authentication System Implementation

**User Story:**
```gherkin
As a Content Editor or Admin,
I want to securely log in to the admin area,
So that I can manage website content.
```

### Estimated Effort
8-10 小時

---

### Task 1.12.1: Design Authentication Architecture

**Acceptance Criteria:**
- [ ] 選擇認證方案：
  - Payload CMS built-in JWT ✅ (已決定)
  - Session management via HTTP-only cookies
- [ ] 定義路由保護策略：
  - `/admin/*` 需要認證
  - `/api/*` 部分需要認證
- [ ] 定義角色權限：
  - Admin: 完整權限
  - Editor: 僅內容管理
- [ ] 設計登入流程：
  - 登入頁面
  - 忘記密碼流程
  - Email 驗證

**Definition of Done:**
- [ ] 認證架構文檔完成
- [ ] 角色權限矩陣完成
- [ ] 流程圖完成

**預估時間：** 1.5 小時

---

### Task 1.12.2: Implement Login Page

**Acceptance Criteria:**
- [ ] 建立 `apps/frontend/src/pages/admin/login.astro`
- [ ] Login form:
  - Email input
  - Password input
  - "Remember me" checkbox
  - Login button
  - Forgot password link
- [ ] Client-side validation
- [ ] Error message display
- [ ] Loading state
- [ ] 連結到 Payload CMS `/api/users/login`
- [ ] 成功後重定向到 `/admin/dashboard`

**Definition of Done:**
- [ ] 登入頁面設計完整
- [ ] 表單驗證正常
- [ ] API 整合完成
- [ ] 重定向正確
- [ ] 錯誤處理完善

**預估時間：** 2 小時

---

### Task 1.12.3: Implement Payload Authentication Middleware

**Acceptance Criteria:**
- [ ] Payload CMS 已配置 built-in auth (✅ 完成)
- [ ] 設定 HTTP-only cookies
- [ ] JWT token 管理
- [ ] Token refresh mechanism
- [ ] Session timeout 配置

**定義 of Done:**
- [ ] Payload auth 配置正確
- [ ] Cookies 安全（HTTP-only, secure, sameSite）
- [ ] Token 自動刷新

**預估時間：** 1 小時

---

### Task 1.12.4: Implement Route Protection

**Acceptance Criteria:**
- [ ] 建立 `src/middleware.ts`
- [ ] 保護所有 `/admin/*` 路由
- [ ] 未認證重定向到 `/admin/login`
- [ ] 已認證允許通過
- [ ] Payload session verification

**Definition of Done:**
- [ ] Middleware 正確攔截未認證請求
- [ ] 重定向正常運作
- [ ] Payload session 驗證正確

**預估時間：** 2 小時

---

### Task 1.12.5: Implement Role-Based Access Control

**Acceptance Criteria:**
- [ ] Users collection 添加 `role` 欄位 (admin, editor)
- [ ] 建立 `access/adminOnly.ts`
- [ ] 建立 `access/adminOrEditor.ts`
- [ ] 更新 Users collection access:
  - delete: adminOnly
- [ ] 更新 Posts/Pages access:
  - create/update/delete: adminOrEditor
- [ ] 更新 Settings access:
  - all: adminOnly
- [ ] 重新生成型別

**Definition of Done:**
- [ ] Role 欄位可編輯
- [ ] Access functions 正確執行
- [ ] Admin 可完整權限
- [ ] Editor 僅內容管理權限
- [ ] 測試兩種角色權限

**預估時間：** 2 小時

---

### Task 1.12.6: Implement Password Reset Flow

**Acceptance Criteria:**
- [ ] "Forgot password" 連結
- [ ] 輸入 email 頁面
- [ ] Payload forgot password API
- [ ] Resend email 發送重設連結
- [ ] 重設密碼頁面
- [ ] Email 驗證 token
- [ ] 更新密碼
- [ ] 成功訊息

**Definition of Done:**
- [ ] 忘記密碼流程完整
- [ ] Email 正確發送
- [ ] Token 驗證正常
- [ ] 密碼更新成功

**預估時間：** 2 小時

---

### Task 1.12.7: Implement Logout Functionality

**Acceptance Criteria:**
- [ ] "登出" 按鈕（在 Header 或 Dashboard）
- [ ] 呼叫 Payload `/api/users/logout`
- [ ] 清除本地 session
- [ ] 重定向到首頁或登入頁

**預估時間：** 0.5 小時

---

## Story 1.13: Admin Dashboard

**User Story:**
```gherkin
As an Authenticated User,
I want to see a dashboard after logging in,
So that I can access key features quickly.
```

### Estimated Effort
4-6 小時

---

### Task 1.13.1: Design Dashboard Layout

**Acceptance Criteria:**
- [ ] Dashboard layout 結構
- [ ] Sidebar navigation:
  - Dashboard
  - Content (Posts, Pages, Portfolio, Teams)
  - Media
  - Settings
  - Logout
- [ ] Main content area
- [ ] User profile header

**預估時間：** 1 小時

---

### Task 1.13.2: Create Dashboard Route

**Acceptance Criteria:**
- [ ] 建立 `apps/frontend/src/pages/admin/dashboard.astro`
- [ ] 使用 AdminLayout（不同於 MainLayout）
- [ ] Route protection via middleware
- [ ] 從 Payload API 載入統計資料

**預估時間：** 1.5 小時

---

### Task 1.13.3: Implement Quick Stats Section

**Acceptance Criteria:**
- [ ] 統計卡片：
  - Total posts
  - Published posts
  - Draft posts
  - Total portfolio items
  - Total categories
  - Total team members
- [ ] 從 Payload API 計算統計：
  - `/api/posts?where[status][equals]=published&limit=0`
  - `/api/posts?where[status][equals]=draft&limit=0`
  - `/api/portfolio?limit=0`
- [ ] 即時載入
- [ ] Loading states

**Definition of Done:**
- [ ] 統計資料準確
- [ ] Loading states 正確
- [ ] 數據即時更新（可選）

**預估時間：** 2 小時

---

### Task 1.13.4: Implement Quick Actions

**Acceptance Criteria:**
- [ ] Quick action 按鈕：
  - "新增文章" → `/admin/collection/posts/create`
  - "新增作品" → `/admin/collection/portfolio/create`
  - "前往 CMS" → `/admin/collections`
- [ ] Button 設計一致
- [ ] Hover 效果

**預估時間：** 1 小時

---

### Task 1.13.5: Implement Recent Activity List

**Acceptance Criteria:**
- [ ] 顯示最近 5 筆內容變更
- [ ] Activity type:
  - Created post
  - Updated post
  - Published post
  - Created portfolio
- [ ] 顯示標題和時間
- [ ] 連結到編輯頁面
- [ ] 從 Payload API 查詢：
  - `/api/posts?sort=-updatedAt&limit=5`
  - `/api/portfolio?sort=-updatedAt&limit=5`

**定義 of Done:**
- [ ] 最近活動列表正確
- [ ] 時間戳格式易讀
- [ ] 連結正確

**預估時間：** 1 小時

---

### Task 1.13.6: Implement User Profile Section

**Acceptance Criteria:**
- [ ] 顯示用戶資訊：
  - Name
  - Email
  - Role
  - Avatar (如有)
- [ ] "登出" 按鈕
- [ ] "個人設定" 按鈕（可選）

**預估時間：** 0.5 小時

---

## Story 1.14: SEO Implementation

**User Story:**
```gherkin
As a Marketing Manager,
I want to maintain SEO rankings after migration,
So that organic traffic is not lost.
```

### Estimated Effort
8-10 小時

---

### Task 1.14.1: Generate Dynamic Sitemap

**Acceptance Criteria:**
- [ ] 建立 `/sitemap.xml` 動態生成
- [ ] 包含所有公開頁面：
  - Homepage
  - Pages (所有 published)
  - Posts (所有 published)
  - Portfolio items
  - Categories
  - Teams
- [ ] 使用 `next-sitemap` 套件（已配置）
- [ ] 自動更新（內容變更時）
- [ ] Sitemap 提交到 Google Search Console

**Definition of Done:**
- [ ] `/sitemap.xml` 可訪問
- [ ] 包含所有必要 URL
- [ ] XML 格式正確
- [ ] 自動更新機制運作

**預估時間：** 2 小時

---

### Task 1.14.2: Implement Meta Tags System

**Acceptance Criteria:**
- [ ] 所有頁面包含 meta tags：
  - `<title>`
  - `<meta name="description">`
  - `<meta property="og:title">`
  - `<meta property="og:description">`
  - `<meta property="og:image">`
  - `<link rel="canonical">`
- [ ] Payload SEO plugin 配置（已完成）
- [ ] 動態 meta tags from Payload CMS
- [ ] Social share preview 測試

**Definition of Done:**
- [ ] 所有頁面 meta tags 完整
- [ ] OG tags 正確
- [ ] Social share 測試通過

**預估時間：** 2 小時

---

### Task 1.14.3: Create 301 Redirect Map

**Acceptance Criteria:**
- [ ] 從 Webflow 匯出取得所有 URL
- [ ] 建立 301 redirect 對應表
- [ ] Webflow URL → New URL
- [ ] 實作 redirects in:
  - Astro middleware
  - 或 Payload Redirects plugin（已配置）
- [ ] 測試所有關鍵 redirects
- [ ] 監控 404 錯誤

**Definition of Done:**
- [ ] Redirect map 文檔完成
- [ ] 301 redirects 正確運作
- [ ] 所有關鍵頁面可訪問
- [ ] 404 錯誤降至最低

**預估時間：** 2 小時

---

### Task 1.14.4: Setup Google Analytics

**Acceptance Criteria:**
- [ ] 使用現有 GA ID: G-DKBZWCGGZR
- [ ] 在 MainLayout 加入 GA script
- [ ] 追蹤事件：
  - Page views
  - Form submissions
  - External link clicks
- [ ] 驗證 GA 接收資料

**Definition of Done:**
- [ ] GA script 正確載入
- [ ] 事件追蹤正常
- [ ] GA Real-time 測試通過

**預估時間：** 1 小時

---

### Task 1.14.5: Implement Structured Data (Schema.org)

**Acceptance Criteria:**
- [ ] 為首頁加入 Organization schema
- [ ] 為文章加入 Article schema
- [ ] 為作品加入 CreativeWork schema
- [ ] JSON-LD 格式
- [ ] Google Rich Results Test 驗證

**Definition of Done:**
- [ ] Structured data 正確
- [ ] Rich Results 無錯誤
- [ ] 驗證測試通過

**預估時間：** 2 小時

---

### Task 1.14.6: SEO Testing and Validation

**Acceptance Criteria:**
- [ ] Lighthouse SEO score ≥ 95
- [ ] Meta tags 測試
- [ ] OG tags 測試（Facebook Debugger）
- [ ] Sitemap 驗證（Google Search Console）
- [ ] Redirects 測試
- [ ] GA 測試
- [ ] SEO 完整報告

**預估時間：** 2 小時

---

## Story 1.15: Performance Optimization

**User Story:**
```gherkin
As a Visitor,
I want pages to load quickly,
So that I have a smooth browsing experience.
```

### Estimated Effort
8-12 小時

---

### Task 1.15.1: Performance Audit and Baseline

**Acceptance Criteria:**
- [ ] 對所有頁面執行 Lighthouse audit
- [ ] 記錄 baseline scores:
  - Performance
  - Accessibility
  - Best Practices
  - SEO
- [ ] 識別關鍵問題：
  - Large images
  - Render-blocking resources
  - Unused JavaScript
  - Unoptimized CSS
- [ ] 建立改善計劃

**定義 of Done:**
- [ ] Baseline audit 報告完成
- [ ] 問題清單優先級排序
- [ ] 改善計劃文檔完成

**預估時間：** 2 小時

---

### Task 1.15.2: Optimize Images

**Acceptance Criteria:**
- [ ] 轉換所有圖片為 WebP 格式
- [ ] 實作 responsive images:
  - `srcset` for different sizes
  - sizes attribute
- [ ] 懶加載非首屏圖片：
  - Native loading="lazy"
  - JavaScript lazy loading fallback
- [ ] 圖片壓縮：
  - 使用 Sharp 或 ImageOptim API
  - 質質調整（80-90%）
- [ ] 圖片 CDN 配置（Cloudflare Images）

**Definition of Done:**
- [ ] 所有圖片為 WebP 格式
- [ ] Responsive images 正確
- [ ] Lazy loading 運作
- [ ] 圖片大小減少 50%+
- [ ] LCP 改善 ≥ 20%

**預估時間：** 3 小時

---

### Task 1.15.3: Optimize CSS and JavaScript

**Acceptance Criteria:**
- [ ] CSS minification（Tailwind 已處理）
- [ ] CSS purging（移除未使用樣式）
- [ ] JavaScript minification
- [ ] Code splitting:
  - 動態 import
  - Route-based splitting
  - Component lazy loading
- [ ] Tree shaking（移除未使用代碼）

**Definition of Done:**
- [ ] CSS/JS 已最小化
- [ ] Bundle size 減少 30%+
- [ ] Code splitting 正確運作
- [ ] Tree shaking 有效

**預估時間：** 2 小時

---

### Task 1.15.4: Optimize Font Loading

**Acceptance Criteria:**
- [ ] Preload critical fonts:
  - `<link rel="preload">` for Noto Sans TC
  - `<link rel="preload">` for Quicksand
- [ ] Font-display: swap
- [ ] Subset fonts（只包含必要字元）
- [ ] FOUT/FOIT 預防：
  - System font fallback
  - Invisible預載期

**Definition of Done:**
- [ ] 字載載時間 < 100ms
- [ ] 無 FOUT/FOIT 問題
- [ ] 字體顯示快速

**預估時間：** 1 小時

---

### Task 1.15.5: Implement Caching Strategy

**Acceptance Criteria:**
- [ ] Cloudflare CDN cache 配置
- [ ] Browser cache headers:
  - Static assets: 1 year
  - Images: 1 month
  - HTML: 不 cache（ETag）
- [ ] Service Worker for offline (optional)
- [ ] Cache invalidation strategy

**Definition of Done:**
- [ ] Cache headers 正確設定
- [ ] CDN hit rate > 80%
- [ ] 快取命中率良好

**預估時間：** 1.5 小時

---

### Task 1.15.6: Optimize Critical Rendering Path

**Acceptance Criteria:**
- [ ] Inline critical CSS
- [ ] Defer non-critical JavaScript
- [ ] Preconnect to external domains
- [ ] Prioritize above-the-fold content
- [ ] Minimize TBT (Total Blocking Time)

**Definition of Done:**
- [ ] FCP < 1.5s
- [ ] LCP < 2.5s
- [ ] TBT < 200ms
- [ ] CLS < 0.1

**預估時間：** 2 小時

---

### Task 1.15.7: Final Performance Testing

**Acceptance Criteria:**
- [ ] 所有頁面 Lighthouse ≥ 95:
  - Performance
  - Accessibility
  - Best Practices
  - SEO
- [ ] Core Web Vitals "Good"
- [ ] Mobile testing
- [ ] WebPageTest analysis
- [ ] Performance report

**Definition of Done:**
- [ ] 所有指標達標
- [ ] 跨瀏覽器測試通過
- [ ] 效能報告完整

**預估時間：** 1.5 小時

---

## Story 1.16: Deployment to Cloudflare

**User Story:**
```gherkin
As a DevOps Engineer,
I want to deploy the application to Cloudflare,
So that the website is live and accessible.
```

### Estimated Effort
6-8 小時

---

### Task 1.16.1: Prepare Frontend Build Configuration

**Acceptance Criteria:**
- [ ] Astro build 配置優化
- [ ] 環境變數設定：
  - `PUBLIC_PAYLOAD_CMS_URL`
  - `PAYLOAD_CMS_API_KEY` (if needed)
- [ ] wrangler.toml 配置：
  - name: "enchun-frontend"
  - compatibility_date
  - assets directory
  - routes (如有)
  - environment variables
- [ ] 構建指令測試

**定義 of Done:**
- [ ] Build 成功無錯誤
- [ ] 環境變數正確
- [ ] Wrangler 配置完整

**預估時間：** 1.5 小時

---

### Task 1.16.2: Configure Backend Deployment

**Acceptance Criteria:**
- [ ] Backend build 配置:
  - `output: 'standalone'`
  - Environment variables
- [ ] Docker configuration:
  - `Dockerfile.backend` (已存在)
  - Multi-stage build
  - Environment variables
- [ ] Deployment target:
  - Vercel / Railway / Coolify
- [ ] MongoDB Atlas connection
- [ ] R2 storage configuration

**定義 of Done:**
- [ ] Docker image 建立成功
- [ ] 環境變數正確設定
- [ ] 連線測試通過

**預估時間：** 2 小時

---

### Task 1.16.3: Configure Custom Domain

**Acceptance Criteria:**
- [ ] Frontend domain: `www.enchun.tw`
  - Cloudflare Pages
- [ ] Backend domain: `enchuntw-admin.anlstudio.cc`
  - Payload CMS admin
- [ ] DNS records:
  - A records / CNAME
  - WWW subdomain
- [ ] SSL certificates:
  - Auto-provisioned by Cloudflare
- [ ] DNS propagation 驗證

**定義 of Done:**
- [ ] DNS 正確指向 Cloudflare
- [ ] SSL 憑證有效
- [ ] WWW domain 運作正常

**預估時間：** 1.5 小時

---

### Task 1.16.4: Setup CI/CD Pipeline

**Acceptance Criteria:**
- [ ] Git repository 連接
- [ ] 自動部署觸發：
  - Push to `main` branch
  - Pull request merge
- [ ] Build steps:
  1. Install dependencies
  2. Run tests
  3. Build frontend
  4. Deploy to Cloudflare Pages
- [ ] Deployment notifications:
  - Slack / Email
  - Deployment status

**定義 of Done:**
- [ ] CI/CD pipeline 自動運作
- [ ] 測試失敗阻止部署
- [ ] 通知正常運作

**預估時間：** 2 小時

---

### Task 1.16.5: Configure Environment Variables

**Acceptance Criteria:**
- [ ] Frontend variables (Cloudflare Pages):
  - `PUBLIC_PAYLOAD_CMS_URL`
  - `PUBLIC_GA_ID` (G-DKBZWCGGZR)
- [ ] Backend variables:
  - `DATABASE_URI`
  - `PAYLOAD_SECRET`
  - `NEXT_PUBLIC_SERVER_URL`
  - `R2_*` variables
  - `RESEND_API_KEY`
- [ ] Production values
- [ ] Development values
- [ ] Secrets management

**定義 of Done:**
- [ ] 所有環境變數設定
- [ ] Secrets 安全存儲
- [ ] 開發/生產環境隔離

**預估時間：** 1 小時

---

### Task 1.16.6: Final Deployment and Verification

**Acceptance Criteria:**
- [ ] 前端部署到 Cloudflare Pages
- [ ] 後端部署到選擇平台
- [ ] DNS propagation complete
- [ ] SSL certificates active
- [ ] Full end-to-end testing:
  - Homepage loads
  - All pages accessible
  - Forms work
  - Auth works
  - CMS admin accessible
- [ ] Performance verification
- [ ] Monitoring setup

**定義 of Done:**
- [ ] 網站正式上線
- [ ] 所有功能正常運作
- [ ] 監控已建立

**預估時間：** 1.5 小時

---

## Story 1.17: Testing and Quality Assurance

**User Story:**
```gherkin
As a QA Engineer,
I want to thoroughly test the application,
So that there are no critical bugs at launch.
```

### Estimated Effort
12-16 小時

---

### Task 1.17.1: Create Test Plan

**Acceptance Criteria:**
- [ ] 測試範圍定義
- [ ] 測試案例清單
- [ ] 測試環境設定
- [ ] Bug 報告模板
- [ ] Launch checklist

**定義 of Done:**
- [ ] 測試計劃文檔完整
- [ ] 所有團隊成員理解計劃

**預估時間：** 2 小時

---

### Task 1.17.2: Cross-Browser Testing

**Acceptance Criteria:**
- [ ] 測試瀏覽器：
  - Chrome (latest 2 versions)
  - Firefox (latest 2 versions)
  - Safari (latest 2 versions)
  - Edge (latest 2 versions)
- [ ] 測試平台：
  - Windows 10/11
  - macOS 12+
  - iOS (latest)
  - Android (latest)
- [ ] 測試項目：
  - All pages render correctly
  - Navigation works
  - Forms submit
  - Media displays
  - Interactive features work
- [ ] Document browser-specific issues

**定義 of Done:**
- [ ] 所有主流瀏覽器相容
- [ ] 記錄已知問題
- [ ] Critical issues resolved

**預估時間：** 4 小時

---

### Task 1.17.3: Responsive Testing

**Acceptance Criteria:**
- [ ] 測試裝置尺寸：
  - Desktop: 1920x1080, 1440x900
  - Tablet: 768x1024 (iPad)
  - Mobile: 375x667, 414x896
- [ ] 測試項目：
  - 無水平滾動
  - Navigation menu works
  - Text is readable
  - Images scale correctly
  - Touch targets adequate size
  - No broken layouts
- [ ] Orientation testing (portrait/landscape)

**定義 of Done:**
- [ ] 所有裝置響應式正常
- [ ] 無 layout 破壞
- [ ] 觸控操作流暢

**預估時間：** 2 小時

---

### Task 1.17.4: Functional Testing

**Acceptance Criteria:**
- [ ] User flow 測試：
  - Browse homepage → About → Contact
  - Browse blog → Read article
  - View portfolio → View project
  - Login → Edit content → Logout
- [ ] Form 測試:
  - Contact form submission
  - Login form validation
  - Search/Filter functions
- [ ] External links 測試:
  - All social links work
  - Portfolio external links
  - Download links
- [ ] 301 redirects 測試:
  - All critical redirects work
- [ ] Admin functions 測試:
  - Create/edit/delete content
  - Upload media
  - Manage users

**定義 of Done:**
- [ ] 所有關鍵功能正常
- [ ] 無阻塞性 bug
- [ ] 測試報告完成

**預估時間：** 4 小時

---

### Task 1.17.5: Performance Testing

**Acceptance Criteria:**
- [ ] Lighthouse audit (all pages):
  - Performance ≥ 95
  - Accessibility ≥ 95
  - Best Practices ≥ 95
  - SEO ≥ 95
- [ ] WebPageTest analysis:
  - FCP < 1.5s
  - LCP < 2.5s
  - TBT < 200ms
  - CLS < 0.1
- [ ] Load testing:
  - 100 concurrent users
  - Response time < 1s (95th percentile)
- [ ] Mobile performance testing

**定義 of Done:**
- [ ] 所有效能指標達標
- [ ] Load testing 通過
- [ ] 效能報告完整

**預估時間：** 3 小時

---

### Task 1.17.6: Accessibility Testing

**Acceptance Criteria:**
- [ ] WCAG 2.1 AA compliance check
- [ ] Keyboard navigation test:
  - Tab 順序
  - Focus indicators
  - Skip links
- [ ] Screen reader test (basic):
  - NVDA / VoiceOver
  - Image alt text
  - Heading structure
- [ ] Color contrast verification:
  - All text WCAG AA compliant
- [ ] Form accessibility:
  - Labels properly associated
  - Error messages accessible
- [ ] Video captions (if applicable)

**定義 of Done:**
- [ ] WCAG AA 合規
- [ ] Keyboard 可完整操作
- [ ] Screen reader 基礎支援
- [ ] 顏色對比合格

**預估時間：** 2 小時

---

### Task 1.17.7: Security Testing

**Acceptance Criteria:**
- [ ] SQL injection testing
- [ ] XSS protection testing
- [ ] CSRF protection testing
- [ ] Authentication bypass testing
- [ ] Authorization bypass testing
- [ ] File upload security
- [ ] Rate limiting testing
- [ ] Sensitive data exposure check

**定義 of Done:**
- [ ] 無安全漏洞
- [ ] 保護機制正常運作
- [ ] 安全報告完成

**預估時間：** 2 小時

---

### Task 1.17.8: Content Verification

**Acceptance Criteria:**
- [ ] Manual content review:
  - 35+ articles all present
  - 4 categories all present
  - Portfolio items all present
  - No broken images
  - No broken links
- [ ] Content accuracy check:
  - Text formatting correct
  - Images display correctly
  - Rich text formatting correct
- [ ] SEO verification:
  - Meta tags present
  - OG tags correct
  - Canonical URLs correct
- [ ] Visual fidelity check:
  - Compare with Webflow
  - 95%+ similarity

**定義 of Done:**
- [ ] 所有內容完整遷移
- [ ] 無內容錯誤
- [ ] SEO 完整
- [ ] 視覺符合預期

**預估時間：** 4 小時

---

### Task 1.17.9: Bug Tracking and Resolution

**Acceptance Criteria:**
- [ ] Bug tracking system:
  - GitHub Issues
  - Priority levels (Critical, High, Medium, Low)
  - Status tracking
- [ ] Critical bugs must be fixed before launch
- [ ] High bugs should be fixed
- [ ] Medium/Low bugs documented
- [ ] Re-testing after fixes

**定義 of Done:**
- [ ] 所有 critical bugs 解決
- [ ] High bugs 解決或文件化
- [ ] 測試報告完成
- [ ] Launch decision made

**預估時間：** 2 小時

---

### Task 1.17.10: Launch Preparation

**Acceptance Criteria:**
- [ ] Launch checklist completed:
  - All tests passed
  - Critical bugs fixed
  - Monitoring setup
  - Backup strategy
  - Rollback plan
- [ ] Stakeholder sign-off
- [ ] Launch announcement prepared
- [ ] Support documentation ready

**定義 of Done:**
- [ ] Checklist 完成
- [ ] 利益相關者批准
- [ ] 準備好正式上線

**預估時間：** 1 小時

---

## 📊 總時間線和 Sprint 規劃

### Adjusted Timeline

| 週次 | Sprint | 主要交付物 | 預估工時 |
|------|--------|----------|----------|
| Week 1 | Sprint 0 | Story 1.1 完成 + Story 1.2 關鍵部分 | 8-12 hr |
| Week 2-3 | Sprint 1 | Story 1.2 完成 + Story 1.3 遷移 | 24-30 hr |
| Week 4-5 | Sprint 2 | Story 1.4-1.7 核心頁面 | 30-40 hr |
| Week 6-7 | Sprint 3 | Story 1.8-1.11 內容系統 | 30-40 hr |
| Week 8 | Sprint 4 | Story 1.12-1.13 認證後台 | 16-20 hr |
| Week 9-10 | Sprint 5 | Story 1.14-1.17 上線準備 | 40-50 hr |

**總預估：** 148-192 小時（約 10 週）

---

## 🎯 執行建議

### 立即執行（本週）
1. **完成 Story 1.1**（剩餘 40 分鐘）
2. **建立 Story 1.2-1.17 詳細任務定義** ✅ 本文檔
3. **開始 Story 1.2 Phase 1**（Portfolio Collection）

### 下週執行
4. **完成 Story 1.2**（剩餘 3 小時）
5. **準備 Story 1.3-1.4 規劃**

---

## 📌 關鍵決策點

### 決策 1: Story 1.3 優先順序？

**選項 A：** 儘先執行遷移腳本
- 優點：確保內容完整
- 缺點：無法立即看到頁面效果

**選項 B：** 延後執行，先實作頁面
- 優點：快速展示視覺成果
- 缺點：後續需更新所有內容

**建議：** **選項 B** - 先完成 Story 1.4-1.8，用測試資料實作，再執行 Story 1.3 正式遷移

### 決策 2: Story 1.12 認證優先級？

**選項 A：** 現在實作（與頁面並行）
- 優點：編輯者可提前開始工作

**選項 B：** 頁面完成後實作
- 優點：集中精力完成用戶可見功能

**建議：** **選項 B** - 在 Sprint 4 執行（頁面完成後）

---

**文檔完成時間：** 2025-01-30
**適用範圍：** Epic 1 所有 Stories 的詳細任務定義
**下一步：** 根據優先級開始執行或調整計劃
