# 智能複習系統 - 前端開發計劃 **項目基礎**: Next.js 15 + TypeScript + TailwindCSS + Supabase **開發週期**: 1-2週 (智能化重構) **目標**: 將現有7種複習方法升級為零選擇負擔的智能複習體驗 --- ## 📋 **現況分析** ### **✅ 現有前端基礎設施** - **技術棧**: Next.js 15.5.3 + React 19 + TypeScript + TailwindCSS - **認證系統**: AuthContext + ProtectedRoute 完整實現 - **詞卡管理**: 完整CRUD功能 + 搜尋篩選 + 分頁 - **音頻組件**: AudioPlayer + VoiceRecorder 基礎實現 - **UI組件**: Navigation + Toast + Modal 等基礎組件 - **服務層**: flashcardsService API 整合完善 ### **🎉 重大發現:7種複習方法UI已完成!** - **複習頁面**: ✅ `/app/learn/page.tsx` 已完整實現 - **7種複習題型**: ✅ UI和互動邏輯已完成95% - **音頻功能**: ✅ AudioPlayer + VoiceRecorder 完美整合 - **響應式設計**: ✅ 手機/平板/桌面全適配 - **3D動畫效果**: ✅ 翻卡動畫等視覺效果已完成 ### **❌ 需要新增的智能化邏輯** - **自動題型選擇**: 目前是手動切換,需改為系統自動 - **間隔重複算法**: 目前使用mock data,需整合真實API - **四情境適配**: 需新增A1/簡單/適中/困難判斷邏輯 - **實時熟悉度**: 需新增動態計算和顯示 - **A1學習者保護**: 需新增自動限制機制 --- ## 🔧 **重構計劃 (基於現有實現)** ### **📅 第一階段: 智能化核心邏輯 (Week 1)** #### **1.1 重構現有 learn/page.tsx** ```bash # 主要修改現有文件 frontend/app/learn/page.tsx # 🔄 移除手動選擇,新增自動邏輯 # 新增智能化組件 frontend/components/review/ ├── ReviewTypeIndicator.tsx # 🆕 題型顯示組件 ├── MasteryIndicator.tsx # 🆕 熟悉度指示器 └── utils/ ├── masteryCalculator.ts # 🆕 熟悉度計算 └── reviewTypeSelector.ts # 🆕 自動選擇邏輯 # 擴展現有服務 frontend/lib/services/flashcards.ts # 🔄 新增智能複習API方法 frontend/lib/services/review.ts # 🆕 專用複習服務 # 保持現有組件 (無需修改) frontend/components/AudioPlayer.tsx # ✅ 已完美整合 frontend/components/VoiceRecorder.tsx # ✅ 已完美整合 frontend/components/LearningComplete.tsx # ✅ 已完整實現 ``` #### **1.2 重構任務清單** - [ ] **移除手動模式切換** (1天) - 刪除7個模式切換按鈕 (lines 337-410) - 保留所有現有題型UI邏輯 - 新增 ReviewTypeIndicator 純顯示組件 - [ ] **整合真實API數據** (2天) - 替換 mock cards 為 getNextReviewCard() API - 整合 getOptimalReviewMode() 自動選擇 - 實現 submitReview() 結果提交 - 新增實時熟悉度顯示 - [ ] **完成例句聽力邏輯** (1天) - 補完選項生成邏輯 (目前標記為開發中) - 整合例句音頻播放功能 - [ ] **四情境適配邏輯** (1天) - A1學習者自動保護 (userLevel ≤ 20) - 簡單/適中/困難詞彙自動判斷 - 題型限制邏輯實現 #### **1.3 階段目標** - ✅ 保留所有現有優秀UI設計 - ✅ 實現系統自動選擇題型 - ✅ 整合間隔重複算法 - ✅ A1學習者自動保護機制 --- ### **📅 第二階段: 測試和優化 (Week 2)** #### **2.1 已完成功能驗證** ```bash # 現有功能狀態確認 ✅ 翻卡記憶 (flip-memory) - 3D動畫 + 動態高度 ✅ 詞彙選擇 (vocab-choice) - 選項生成 + 結果反饋 ✅ 例句填空 (sentence-fill) - 動態輸入 + 圖片顯示 ✅ 詞彙聽力 (vocab-listening) - AudioPlayer整合 ✅ 例句口說 (sentence-speaking) - VoiceRecorder完整 ✅ 例句重組 (sentence-reorder) - 拖放重組界面 ⚠️ 例句聽力 (sentence-listening) - 需補完選項邏輯 ``` #### **2.2 智能化整合測試** - [ ] **自動選擇邏輯驗證** (2天) - 四情境適配準確性測試 - A1學習者保護機制測試 - 智能避重邏輯測試 - 模式映射正確性驗證 - [ ] **API整合測試** (2天) - 真實詞卡數據載入測試 - 復習結果提交測試 - 熟悉度計算準確性測試 - 間隔重複算法整合測試 - [ ] **性能和穩定性** (1天) - 組件渲染效能測試 - 音頻功能穩定性測試 - 跨瀏覽器相容性測試 - 錯誤處理邊界測試 #### **2.3 階段目標** - ✅ 智能自動選擇功能穩定運作 - ✅ 所有7種題型與後端API完美整合 - ✅ A1學習者體驗流暢無障礙 - ✅ 系統性能滿足使用需求 --- ### **📅 可選第三階段: 進階功能增強 (未來擴展)** #### **3.1 統計和分析功能** ```bash # 學習統計面板 (可選) frontend/app/statistics/page.tsx # 詳細學習統計頁面 frontend/components/statistics/ ├── ProgressChart.tsx # 進度圖表 ├── MasteryDistribution.tsx # 熟悉度分布 └── ReviewTypeStats.tsx # 題型使用統計 ``` #### **3.2 可選擴展功能** - [ ] **詳細統計面板** (可選) - 學習進度可視化圖表 - 熟悉度變化趨勢分析 - 複習方式效果統計 - 每日/週/月數據報表 - [ ] **進階狀態管理** (可選) - SpacedRepetitionContext 全域管理 - 複習資料快取優化 - 離線復習支援 #### **3.3 優先級評估** - **P2 (可選)**: 統計面板可後續迭代開發 - **P3 (未來)**: 進階分析功能待用戶反饋後決定 --- ## 🔧 **技術實現細節** ### **API整合設計** ```typescript // 新增到 frontend/lib/services/review.ts interface ReviewAPI { getNextReviewCard(): Promise getOptimalReviewMode(cardId: string, userLevel: number, wordLevel: number): Promise submitReview(cardId: string, reviewData: ReviewSubmission): Promise generateQuestion(cardId: string, questionType: ReviewType): Promise getDueFlashcards(): Promise getReviewStatistics(): Promise } ``` ### **組件層次結構** ``` ReviewPage ├── ReviewTypeIndicator (純顯示,無選擇) ├── QuestionRenderer │ ├── FlipCardQuestion │ ├── MultipleChoiceQuestion │ ├── FillBlankQuestion │ ├── SentenceReconstructionQuestion │ ├── VocabularyListeningQuestion │ ├── SentenceListeningQuestion │ └── SentenceSpeakingQuestion └── ReviewProgress (下一張卡片按鈕) ``` ### **狀態管理策略** ```typescript // 使用 React Context 進行全局狀態管理 interface SpacedRepetitionState { currentCard: Flashcard | null reviewMode: ReviewType // 系統自動選擇 questionData: QuestionData | null showAnswer: boolean userAnswer: string | boolean | null isCorrect: boolean | null isSubmitting: boolean dueCount: number completedToday: number } ``` --- ## 🚀 **重構里程碑 (大幅縮短)** ### **Week 1 里程碑 (核心重構)** - [ ] 移除手動模式切換,改為系統自動選擇 - [ ] 整合真實API數據,替換mock cards - [ ] 完成例句聽力邏輯補完 - [ ] 實現四情境自動適配邏輯 - [ ] 新增實時熟悉度顯示 ### **Week 2 里程碑 (測試優化)** - [ ] 自動選擇邏輯全面測試 - [ ] A1學習者保護機制驗證 - [ ] API整合穩定性測試 - [ ] 性能優化和錯誤處理完善 - [ ] 跨瀏覽器音頻功能測試 ### **MVP達成標準** - ✅ 7種題型UI完整保留 (已完成) - ✅ 零選擇負擔體驗實現 - ✅ 智能自動適配運作正常 - ✅ A1學習者自動保護生效 - ✅ 間隔重複算法整合完成 --- ## 📊 **與現有系統整合** ### **復用現有組件** - ✅ **AudioPlayer**: 用於聽力題音頻播放 - ✅ **VoiceRecorder**: 用於口說題錄音功能 - ✅ **Navigation**: 新增復習入口連結 - ✅ **Toast**: 復習反饋和錯誤提示 - ✅ **ProtectedRoute**: 復習頁面權限保護 ### **擴展現有服務** - 🔄 **flashcardsService**: 新增復習相關API方法 - 🔄 **Navigation**: 新增 `/review` 路由 - 🔄 **AuthContext**: 可能需要用戶程度資訊 ### **新增專用功能** - 🆕 **reviewService**: 專門的復習API服務 - 🆕 **masteryCalculator**: 實時熟悉度計算 - 🆕 **reviewTypes**: 四情境適配邏輯 - 🆕 **SpacedRepetitionContext**: 復習狀態管理 --- ## 🎨 **UI/UX 設計重點** ### **設計原則** - **極簡介面**: 用戶無需選擇,直接答題 - **清晰反饋**: 立即顯示對錯和說明 - **流暢動畫**: 題型切換和答案展示平滑 - **響應式設計**: 手機優先,適配各種螢幕 ### **色彩系統** (沿用現有TailwindCSS) ```css /* 熟悉度顏色 */ --mastery-high: theme('colors.green.500') /* 80-100% */ --mastery-medium: theme('colors.blue.500') /* 50-79% */ --mastery-low: theme('colors.red.500') /* 0-49% */ --mastery-decaying: theme('colors.orange.500') /* 衰減中 */ /* 題型狀態 */ --question-correct: theme('colors.green.100') --question-incorrect: theme('colors.red.100') --question-neutral: theme('colors.gray.50') ``` ### **動畫設計** - 翻卡動畫: CSS transform 3D - 熟悉度進度條: CSS transition - 題型切換: fade-in/fade-out - 成功反饋: scale + bounce 動畫 --- ## 🧪 **測試策略** ### **單元測試** (Jest + React Testing Library) ```bash # 測試檔案結構 frontend/__tests__/ ├── components/ │ ├── review/ │ │ ├── ReviewPage.test.tsx │ │ ├── ReviewTypeIndicator.test.tsx │ │ └── questions/ │ │ ├── FlipCardQuestion.test.tsx │ │ ├── MultipleChoiceQuestion.test.tsx │ │ └── [...其他題型測試] │ └── utils/ │ ├── masteryCalculator.test.ts │ └── reviewTypes.test.ts ``` ### **整合測試重點** - API呼叫正確性 - 狀態更新邏輯 - 音頻功能跨瀏覽器測試 - 響應式設計測試 ### **E2E測試場景** - A1學習者完整復習流程 - 四情境自動適配驗證 - 音頻錄製和播放功能 - 複習進度統計更新 --- ## 📱 **響應式設計規劃** ### **斷點設計** (沿用TailwindCSS標準) ```css /* 手機 (sm: 640px以下) */ - 單列佈局 - 大按鈕設計 (min-height: 44px) - 簡化操作界面 /* 平板 (md: 768px-1024px) */ - 雙列卡片佈局 - 側邊統計面板 - 手勢操作支援 /* 桌面 (lg: 1024px以上) */ - 三列網格佈局 - 完整功能面板 - 鍵盤快捷鍵支援 ``` ### **音頻功能適配** - **桌面**: 完整錄音和播放功能 - **手機**: 原生MediaRecorder API - **降級方案**: 無音頻設備時隱藏聽力/口說題型 --- ## ⚡ **性能優化策略** ### **程式碼分割** ```typescript // 動態載入複習組件 const ReviewPage = dynamic(() => import('@/app/review/page'), { loading: () => }) // 題型組件懶載入 const QuestionComponents = { flipcard: dynamic(() => import('@/components/review/questions/FlipCardQuestion')), multiple_choice: dynamic(() => import('@/components/review/questions/MultipleChoiceQuestion')), // ... 其他題型 } ``` ### **快取策略** - **到期詞卡**: React Query 快取 (5分鐘) - **用戶程度**: localStorage 本地儲存 - **音頻檔案**: Service Worker 快取 - **熟悉度計算**: useMemo 記憶化 ### **音頻優化** - 音頻檔案壓縮 (MP3, 128kbps) - 預載入下一題音頻 - 錄音檔案大小限制 (5MB) --- ## 🔗 **API設計需求** ### **後端需要新增的API端點** ```typescript // 基於智能複習系統-後端功能規格書 GET /api/flashcards/due # 取得到期詞卡列表 GET /api/flashcards/next-review # 取得下一張復習詞卡 POST /api/flashcards/:id/optimal-review-mode # 系統自動選擇題型 POST /api/flashcards/:id/review # 提交復習結果 POST /api/flashcards/:id/question # 生成指定題型的題目 GET /api/user/review-stats # 取得復習統計數據 POST /api/audio/upload # 上傳口說錄音 ``` ### **資料結構擴展** ```typescript // 需要後端 Flashcard 模型新增欄位 interface FlashcardExtended extends Flashcard { userLevel: number // 學習者程度 (1-100) wordLevel: number // 詞彙難度 (1-100) nextReviewDate: string // 下次復習日期 currentInterval: number // 當前間隔天數 isOverdue: boolean // 是否逾期 overdueDays: number // 逾期天數 baseMasteryLevel: number // 基礎熟悉度 (存於DB) } ``` --- ## 📋 **開發檢查清單** ### **功能完整性** - [ ] 7種複習題型全部實現 - [ ] 系統自動選擇題型 (無用戶選擇) - [ ] A1學習者自動保護機制 - [ ] 四情境智能適配 - [ ] 實時熟悉度顯示 - [ ] 復習進度統計 - [ ] 音頻播放和錄製功能 ### **用戶體驗** - [ ] 零選擇負擔體驗 - [ ] 流暢的題型切換 - [ ] 即時的答題反饋 - [ ] 清晰的進度指示 - [ ] 響應式設計適配 ### **技術品質** - [ ] TypeScript 型別完整 - [ ] 單元測試覆蓋率 > 80% - [ ] 錯誤處理完善 - [ ] 性能優化實施 - [ ] 無障礙設計考量 ### **整合測試** - [ ] 與現有詞卡系統整合 - [ ] 認證和權限正常 - [ ] API呼叫穩定 - [ ] 跨瀏覽器相容 --- ## 🎯 **預期成果** ### **用戶體驗目標** - 開啟復習頁面 → 系統自動呈現最適合的題型 - A1學習者只會看到基礎3種題型 - 學習過程完全無選擇負擔 - 復習效率提升30%以上 ### **技術架構目標** - 現代化React架構,組件化設計 - 完整的TypeScript型別安全 - 高效能的音頻處理 - 可擴展的題型系統 ### **商業價值目標** - 用戶完成率 > 80% - A1學習者留存率 > 85% - 復習方式多樣性 > 4種 - 智能推薦準確率 > 75% --- --- ## 📊 **重構 vs 新建 對比總結** | 項目 | 原計劃 (新建) | 實際狀況 (重構) | 節省時間 | |------|---------------|-----------------|----------| | **UI開發** | 3-4週 | ✅ 已完成 | -3-4週 | | **7種題型邏輯** | 2-3週 | ✅ 已完成95% | -2-3週 | | **音頻功能** | 1-2週 | ✅ 已完成 | -1-2週 | | **響應式設計** | 1週 | ✅ 已完成 | -1週 | | **動畫效果** | 1週 | ✅ 已完成 | -1週 | | **核心邏輯重構** | - | 🔄 1週 | 新增 | | **API整合** | 1週 | 🔄 3-4天 | 節省50% | | **測試優化** | 1週 | 🔄 3-4天 | 節省50% | | **總開發時間** | **10-14週** | **1-2週** | **節省90%** | ## 🏆 **重構計劃最終評估** ### **✅ 巨大優勢發現** 1. **UI開發完成**: 所有7種題型的精美UI已完成 2. **音頻功能成熟**: AudioPlayer + VoiceRecorder 整合出色 3. **互動邏輯完善**: 答題、反饋、導航邏輯健全 4. **設計品質優秀**: 3D動畫、響應式設計、錯誤處理 ### **🔧 僅需重構項目** 1. **移除手動選擇** → 改為系統自動選擇 2. **Mock數據** → 真實API數據 3. **固定順序** → 智能適配邏輯 4. **簡單計分** → 間隔重複算法 ### **⚡ 超快上線優勢** - **開發時間**: 從10-14週縮短到1-2週 - **技術風險**: 從中高風險降為低風險 - **用戶體驗**: 保留現有優秀設計,升級為智能化 - **維護成本**: 基於成熟代碼,維護容易 --- **結論**: 您的7種複習方法UI實現是一個巨大的開發資產!現在只需要1-2週的智能化重構,就能實現業界領先的零選擇負擔複習體驗。 **開發負責人**: [待指派] **開始時間**: [確認後開始] **預計完成**: 1-2週 (重構) **風險評估**: 低 (基於成熟代碼)