10 KiB
10 KiB
LinguaForge MVP 功能規格書
1. 產品概述
產品名稱:LinguaForge MVP 版本:0.1.0 目標用戶:想要高效學習英文詞彙的台灣用戶 核心價值:AI 自動生成個人化詞卡 + 科學化間隔複習
2. 用戶故事 (User Stories)
2.1 核心用戶故事(P0 - 必做)
Feature: 用戶註冊與登入
As a 新用戶
I want to 創建帳號並登入
So that 我可以保存我的學習進度
Scenario: Email 註冊
Given 我是新用戶
When 我輸入 email 和密碼
Then 系統創建帳號並自動登入
Feature: AI 詞卡生成
As a 用戶
I want to 從句子中生成詞卡
So that 我可以學習新單字
Scenario: 生成詞卡
Given 我輸入一個英文句子
When 我選擇要學習的單字
Then AI 生成包含定義和例句的詞卡
Feature: 間隔重複複習
As a 用戶
I want to 按照科學方法複習
So that 我可以長期記住單字
Scenario: 每日複習
Given 我有待複習的詞卡
When 我打開 App
Then 我看到今日需要複習的詞卡列表
2.2 次要用戶故事(P1 - 可選)
Feature: 學習統計
As a 用戶
I want to 查看我的學習進度
So that 我可以了解學習成效
Feature: 詞卡管理
As a 用戶
I want to 管理我的詞卡
So that 我可以整理學習內容
3. 功能規格詳述
3.1 用戶系統
註冊流程
輸入欄位:
- Email (必填,驗證格式)
- 密碼 (必填,最少 8 字元)
- 暱稱 (選填)
流程:
1. 用戶填寫表單
2. 前端驗證
3. 發送到 Firebase Auth
4. 創建 Supabase 用戶資料
5. 自動登入
6. 導向首頁
錯誤處理:
- Email 已存在
- 密碼太弱
- 網路錯誤
登入流程
輸入欄位:
- Email
- 密碼
功能:
- 記住我 (選項)
- 忘記密碼 (連結)
流程:
1. 輸入憑證
2. Firebase Auth 驗證
3. 取得 Token
4. 載入用戶資料
5. 導向首頁
3.2 AI 詞卡生成
生成介面
步驟一: 輸入句子
- 文字輸入框 (最多 200 字元)
- 範例句子提示
- 清除按鈕
步驟二: 選擇單字
- 自動標記可選單字
- 點擊選擇 (最多 5 個)
- 已選單字列表
步驟三: 生成詞卡
- 生成按鈕
- 載入動畫 (預估 3-5 秒)
- 錯誤重試
步驟四: 預覽確認
- 顯示生成結果
- 編輯選項
- 儲存/放棄
詞卡資料結構
{
"id": "uuid",
"word": "abandon",
"pronunciation": "/əˈbændən/",
"definition": "停止支持或照顧;放棄",
"partOfSpeech": "verb",
"examples": [
{
"english": "He abandoned his car in the snow.",
"chinese": "他把車遺棄在雪地裡。"
}
],
"sourceSentence": "原始句子",
"difficulty": "intermediate",
"createdAt": "2024-01-15T10:00:00Z",
"nextReviewDate": "2024-01-16T10:00:00Z",
"reviewCount": 0,
"easinessFactor": 2.5
}
3.3 複習系統
複習流程
進入複習:
- 顯示待複習數量
- 開始複習按鈕
複習介面:
第一步: 顯示單字
- 單字
- 發音
- 思考時間
第二步: 顯示答案
- 翻轉卡片動畫
- 完整定義
- 例句
第三步: 自評難度
- 完全不記得 (1)
- 有點印象 (2)
- 想了一下 (3)
- 記得 (4)
- 非常熟悉 (5)
第四步: 下一張
- 更新複習時間
- 載入下張詞卡
SM-2 演算法實現
interface ReviewResult {
quality: number; // 1-5
easinessFactor: number;
interval: number;
repetition: number;
}
function calculateNextReview(
quality: number,
currentEF: number,
currentInterval: number,
repetitions: number
): ReviewResult {
let newEF = currentEF;
let newInterval = currentInterval;
let newRepetitions = repetitions;
if (quality < 3) {
// 重置
newInterval = 1;
newRepetitions = 0;
} else {
// 計算新 EF
newEF = currentEF + (0.1 - (5 - quality) * (0.08 + (5 - quality) * 0.02));
newEF = Math.max(1.3, newEF);
// 計算間隔
if (repetitions === 0) {
newInterval = 1;
} else if (repetitions === 1) {
newInterval = 6;
} else {
newInterval = Math.round(currentInterval * newEF);
}
newRepetitions++;
}
return {
quality,
easinessFactor: newEF,
interval: newInterval,
repetition: newRepetitions
};
}
3.4 詞卡管理
列表檢視
顯示內容:
- 詞卡列表 (分頁,每頁 20)
- 搜尋框
- 排序選項 (新到舊/舊到新/字母)
- 篩選 (全部/待複習/已掌握)
詞卡項目:
- 單字
- 定義摘要
- 下次複習時間
- 掌握程度圖示
詞卡詳情
顯示內容:
- 完整單字資訊
- 學習歷史
- 編輯按鈕
- 刪除按鈕
編輯功能:
- 修改定義
- 修改例句
- 重設複習進度
3.5 學習統計
儀表板
今日數據:
- 新增詞卡數
- 複習詞卡數
- 正確率
- 學習時間
總體統計:
- 總詞卡數
- 連續學習天數
- 本週學習時間
- 掌握程度分布
視覺化:
- 7 日學習趨勢圖
- 詞彙掌握度圓餅圖
4. UI/UX 規格
4.1 設計系統
顏色規範
主色:
primary: #4F46E5 (靛藍)
primaryDark: #3730A3
primaryLight: #818CF8
輔助色:
success: #10B981 (綠)
warning: #F59E0B (橙)
error: #EF4444 (紅)
info: #3B82F6 (藍)
中性色:
background: #F9FAFB
surface: #FFFFFF
text: #111827
textSecondary: #6B7280
border: #E5E7EB
字體規範
標題:
H1: 28px, bold
H2: 24px, semibold
H3: 20px, semibold
內文:
body: 16px, regular
caption: 14px, regular
small: 12px, regular
按鈕:
button: 16px, medium
4.2 主要畫面
首頁
┌────────────────────┐
│ LinguaForge │
├────────────────────┤
│ 歡迎回來,用戶! │
│ │
│ 今日待複習: 15 │
│ [開始複習] │
│ │
│ 快速操作: │
│ [+ 新增詞卡] │
│ │
│ 學習統計 │
│ 連續 7 天 🔥 │
│ 本週 120 詞 │
└────────────────────┘
[首頁][詞卡][統計][我]
詞卡生成
┌────────────────────┐
│ 新增詞卡 │
├────────────────────┤
│ 輸入句子: │
│ ┌────────────────┐ │
│ │ │ │
│ └────────────────┘ │
│ │
│ 選擇單字: │
│ [word1][word2] │
│ │
│ [生成詞卡] │
└────────────────────┘
5. 資料庫設計
5.1 資料表結構
users 表
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
email VARCHAR(255) UNIQUE NOT NULL,
nickname VARCHAR(50),
created_at TIMESTAMP DEFAULT NOW(),
last_login TIMESTAMP,
preferences JSONB DEFAULT '{}'
);
cards 表
CREATE TABLE cards (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
user_id UUID REFERENCES users(id) ON DELETE CASCADE,
word VARCHAR(100) NOT NULL,
pronunciation VARCHAR(100),
definition TEXT NOT NULL,
part_of_speech VARCHAR(20),
examples JSONB DEFAULT '[]',
source_sentence TEXT,
difficulty VARCHAR(20),
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW(),
-- 複習相關
next_review_date TIMESTAMP DEFAULT NOW(),
easiness_factor DECIMAL(3,2) DEFAULT 2.5,
interval_days INTEGER DEFAULT 0,
repetition_count INTEGER DEFAULT 0,
INDEX idx_user_review (user_id, next_review_date)
);
review_logs 表
CREATE TABLE review_logs (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
card_id UUID REFERENCES cards(id) ON DELETE CASCADE,
user_id UUID REFERENCES users(id) ON DELETE CASCADE,
quality INTEGER CHECK (quality BETWEEN 1 AND 5),
reviewed_at TIMESTAMP DEFAULT NOW(),
time_spent INTEGER, -- 秒數
INDEX idx_user_date (user_id, reviewed_at)
);
6. API 規格
6.1 端點列表
認證相關:
POST /auth/register - 註冊
POST /auth/login - 登入
POST /auth/logout - 登出
POST /auth/refresh - 更新 token
詞卡相關:
GET /cards - 取得詞卡列表
POST /cards - 新增詞卡
GET /cards/:id - 取得單一詞卡
PUT /cards/:id - 更新詞卡
DELETE /cards/:id - 刪除詞卡
POST /cards/generate - AI 生成詞卡
複習相關:
GET /review/today - 今日待複習
POST /review/submit - 提交複習結果
統計相關:
GET /stats/summary - 學習統計摘要
GET /stats/history - 歷史記錄
6.2 Gemini API 呼叫規格
Request
const prompt = `
你是一個英語教學助手。請根據以下句子和目標單字,生成詞彙學習卡片。
句子:${sentence}
目標單字:${targetWord}
請以 JSON 格式返回:
{
"word": "單字",
"pronunciation": "IPA 音標",
"definition": "中文定義",
"partOfSpeech": "詞性",
"examples": [
{
"english": "英文例句",
"chinese": "中文翻譯"
}
],
"difficulty": "beginner/intermediate/advanced"
}
`;
const response = await geminiAPI.generateContent(prompt);
7. 效能需求
7.1 回應時間
- 頁面載入:< 2 秒
- API 回應:< 1 秒
- AI 生成:< 5 秒
- 資料庫查詢:< 100ms
7.2 容量規劃
- 單用戶詞卡上限:1000 張
- 每日 API 呼叫:100 次/用戶
- 圖片大小:< 500KB
- App 大小:< 50MB
8. 測試需求
8.1 功能測試
- 註冊流程完整測試
- 登入各種情境
- AI 生成 20+ 測試案例
- 複習演算法驗證
- 資料 CRUD 操作
8.2 相容性測試
- iOS 14+
- Android 8+
- 各種螢幕尺寸
- 橫豎屏切換
8.3 效能測試
- 1000 張詞卡載入
- 離線模式
- 記憶體使用
- 電池消耗
9. 成功指標
9.1 技術指標
- 崩潰率 < 1%
- 冷啟動 < 3 秒
- API 成功率 > 99%
9.2 產品指標
- D1 留存 > 60%
- D7 留存 > 40%
- 日均使用 > 10 分鐘
- 每用戶日均新增 > 3 詞卡
10. 未來擴展預留
10.1 Phase 2 功能
- 語音評估
- 訂閱系統
- 社群分享
- 詞卡分類
- 學習計劃
10.2 技術預留
- 多語言架構
- 主題切換架構
- 插件系統架構
- A/B 測試框架