# 複習功能極簡MVP重寫計劃
## 🎯 **問題診斷**
### **現況困境**
- ❌ **功能破壞**: 複習頁面返回404錯誤
- ❌ **過度複雜**: 7種測驗模式 + 5個Zustand Store
- ❌ **難以除錯**: 抽象層次太多,問題定位困難
- ❌ **維護負擔**: 複雜架構的成本 > 實際價值
### **根本原因**
```
過度工程問題:
複雜架構 (Store→Service→Component→Hook)
+ 多模式切換 (7種測驗)
+ 狀態同步 (5個Store依賴)
= 不可維護的系統
```
---
## 🚀 **極簡MVP重寫方案**
### **設計理念**
- **極簡主義**: 最少代碼實現核心功能
- **直接有效**: 無複雜抽象,直觀易懂
- **快速可用**: 1-2小時內完成可用版本
- **逐步擴展**: 從簡單到複雜,每步可驗證
### **核心功能定義**
```
MVP功能範圍:
✅ 載入詞卡 (3-5張測試數據)
✅ 翻卡記憶 (最核心功能)
✅ 基礎導航 (上一張/下一張)
✅ 簡單計分 (答對/答錯統計)
✅ 完成提示 (結束流程)
暫不實現:
❌ 多種測驗模式
❌ 複雜Store架構
❌ 智能優先級
❌ CEFR自適應
❌ 測試模式切換
```
---
## 📁 **極簡架構設計**
### **文件結構**
```
app/review-simple/
├── page.tsx # 主頁面 (所有邏輯)
├── components/
│ ├── SimpleFlipCard.tsx # 翻卡組件
│ ├── SimpleProgress.tsx # 進度顯示
│ └── SimpleResults.tsx # 結果頁面
└── data.ts # 靜態測試數據
```
### **技術棧簡化**
```
❌ 移除: Zustand Store (5個)
❌ 移除: 複雜Service層
❌ 移除: 多種測驗模式
❌ 移除: 複雜狀態同步
✅ 使用: React useState (簡單狀態)
✅ 使用: 靜態數據 (避免API依賴)
✅ 使用: 內聯邏輯 (直觀易懂)
✅ 使用: CSS動畫 (基礎體驗)
```
---
## 🎯 **實施計劃**
### **階段1: 基礎框架 (30分鐘)**
1. **創建極簡頁面** `app/review-simple/page.tsx`
- 基本的 React useState 狀態管理
- 靜態詞卡數據 (3-5張)
- 基礎布局和導航
2. **核心狀態設計**
```tsx
const [currentCardIndex, setCurrentCardIndex] = useState(0)
const [isFlipped, setIsFlipped] = useState(false)
const [score, setScore] = useState({ correct: 0, total: 0 })
const [isComplete, setIsComplete] = useState(false)
```
### **階段2: 翻卡功能 (30分鐘)**
1. **SimpleFlipCard 組件**
- 3D翻轉動畫 (純CSS)
- 點擊翻轉邏輯
- 詞卡內容顯示
2. **信心度選擇**
```tsx
const handleConfidence = (level: 1-5) => {
setScore(s => ({
correct: s.correct + (level >= 3 ? 1 : 0),
total: s.total + 1
}))
nextCard()
}
```
### **階段3: 導航和完成 (30分鐘)**
1. **SimpleProgress 組件** - 顯示 X/Y 進度
2. **導航按鈕** - 上一張/下一張/跳過
3. **SimpleResults 組件** - 完成統計和重新開始
### **階段4: 美化和優化 (30分鐘)**
1. **基礎樣式** - Tailwind CSS美化
2. **載入動畫** - 簡單的過渡效果
3. **響應式** - 手機和桌面適配
---
## 💾 **靜態測試數據**
```tsx
// app/review-simple/data.ts
export const SIMPLE_CARDS = [
{
id: 1,
word: 'hello',
definition: 'a greeting',
example: 'Hello, how are you?',
translation: '你好'
},
{
id: 2,
word: 'beautiful',
definition: 'pleasing to look at',
example: 'She has a beautiful smile.',
translation: '美麗的'
},
{
id: 3,
word: 'important',
definition: 'having great value',
example: 'This is very important.',
translation: '重要的'
}
]
```
---
## 🎯 **極簡MVP完整代碼預覽**
### **主頁面邏輯**
```tsx
'use client'
import { useState } from 'react'
import { SimpleFlipCard } from './components/SimpleFlipCard'
import { SimpleProgress } from './components/SimpleProgress'
import { SimpleResults } from './components/SimpleResults'
import { SIMPLE_CARDS } from './data'
export default function SimpleReviewPage() {
const [currentIndex, setCurrentIndex] = useState(0)
const [score, setScore] = useState({ correct: 0, total: 0 })
const [isComplete, setIsComplete] = useState(false)
const currentCard = SIMPLE_CARDS[currentIndex]
const isLastCard = currentIndex >= SIMPLE_CARDS.length - 1
const handleAnswer = (confidence: number) => {
const isCorrect = confidence >= 3
setScore(s => ({
correct: s.correct + (isCorrect ? 1 : 0),
total: s.total + 1
}))
if (isLastCard) {
setIsComplete(true)
} else {
setCurrentIndex(i => i + 1)
}
}
const restart = () => {
setCurrentIndex(0)
setScore({ correct: 0, total: 0 })
setIsComplete(false)
}
if (isComplete) {
return