dramaling-vocab-learning/web-mvp-master-plan.md

595 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# LinguaForge 網頁版 MVP 完整開發計劃
## 🎯 計劃概覽
**開發週期**6 週42天
**每日工時**6-8 小時
**總預算**NT$ 5,000
**目標**100 個測試用戶40% 7日留存率
**技術棧**Next.js + TypeScript + Supabase + Tailwind CSS
## 📊 為什麼選擇網頁版?
| 優勢 | 具體效益 |
|------|---------|
| **成本極低** | 省 86% (NT$ 30,000) |
| **開發快速** | 省 50% 時間 (6週) |
| **即時部署** | 改完即上線 |
| **SEO 優勢** | 免費自然流量 |
| **零門檻** | 用戶無需下載 |
## 🏗️ 技術架構決策
### 核心技術棧
```typescript
{
// 前端框架
"framework": "Next.js 14", // App Router + Server Components
"language": "TypeScript", // 類型安全
"styling": "Tailwind CSS", // 快速開發
"ui": "shadcn/ui", // 美觀免費元件
// 狀態管理
"state": "Zustand", // 輕量簡單
"fetching": "TanStack Query", // 強大的資料管理
// 後端服務
"database": "Supabase", // PostgreSQL + Realtime
"auth": "Supabase Auth", // 完整認證系統
"storage": "Supabase Storage", // 檔案儲存
// AI 服務
"ai": "Gemini API", // 詞卡生成
// 部署
"hosting": "Vercel", // 免費額度充足
"analytics": "Vercel Analytics" // 內建分析
}
```
## 📅 6週開發時程表
### 🚀 Week 0: 準備週(開始前)
#### Day -3 到 Day 0
```yaml
目標: 環境準備與規劃完成
任務:
Day -3:
✓ 申請 Gemini API Key
✓ 註冊 Supabase 帳號
✓ 註冊 Vercel 帳號
✓ 安裝開發工具
Day -2:
✓ 設計資料庫架構
✓ 規劃 API 端點
✓ 準備 UI 設計參考
Day -1:
✓ 建立 GitHub repo
✓ 初始化專案
✓ 部署測試
產出:
- 開發環境就緒
- 空白專案已部署
```
### 📱 Week 1: 基礎架構
#### Day 1-2: 專案設置
```typescript
任務清單:
Next.js 專案初始化
TypeScript 配置
Tailwind CSS 設置
shadcn/ui 安裝
基礎路由架構
Layout 元件
// 預期檔案結構
app/
├── (auth)/
├── login/page.tsx
└── register/page.tsx
├── (dashboard)/
├── layout.tsx
└── page.tsx
└── layout.tsx
```
#### Day 3-4: 認證系統
```typescript
任務清單:
Supabase 整合
註冊功能
登入功能
登出功能
Protected Routes
用戶 Context
關鍵程式碼:
// lib/supabase/client.ts
export const supabase = createClient(url, anonKey)
// hooks/useAuth.ts
export function useAuth() {
// 認證邏輯
}
```
#### Day 5: 部署與測試
```yaml
任務清單:
□ Vercel 部署設置
□ 環境變數配置
□ 基礎 CI/CD
□ 測試認證流程
□ 修復問題
里程碑: 可註冊登入的網站上線 ✅
```
### 🤖 Week 2: AI 核心功能
#### Day 6-7: Gemini API 整合
```typescript
任務清單:
API Route 設置
Gemini 服務封裝
Prompt 工程
錯誤處理
Rate Limiting
// app/api/gemini/route.ts
export async function POST(request: Request) {
// Gemini API 呼叫邏輯
}
```
#### Day 8-9: 詞卡生成介面
```typescript
任務清單:
句子輸入元件
單字選擇功能
生成按鈕與載入狀態
結果顯示卡片
錯誤提示
頁面路徑:
app/(dashboard)/generate/page.tsx
```
#### Day 10: 詞卡儲存
```yaml
任務清單:
□ Supabase 資料表建立
□ 儲存 API
□ 詞卡列表頁面
□ 詞卡詳情頁面
里程碑: AI 生成功能完成 ✅
```
### 📚 Week 3: 詞卡管理與複習
#### Day 11-12: CRUD 功能
```typescript
任務清單:
詞卡列表 API
分頁功能
搜尋功能
編輯功能
刪除功能
使用 TanStack Query:
// hooks/useCards.ts
export function useCards() {
return useQuery({
queryKey: ['cards'],
queryFn: fetchCards
})
}
```
#### Day 13-14: SM-2 複習演算法
```typescript
任務清單:
演算法實作
複習排程計算
今日複習 API
複習介面
評分功能
// lib/algorithms/sm2.ts
export function calculateNextReview() {
// SM-2 邏輯
}
```
#### Day 15: 學習統計
```yaml
任務清單:
□ 統計 API
□ 儀表板頁面
□ 進度圖表
□ 學習連續天數
里程碑: 核心功能完成 ✅
```
### 🎨 Week 4: UI/UX 優化
#### Day 16-17: 響應式設計
```css
任務清單:
手機版優化
平板適配
桌面版完善
導航優化
觸控優化
斷點設計:
- Mobile: < 640px
- Tablet: 640px - 1024px
- Desktop: > 1024px
```
#### Day 18-19: 使用體驗提升
```typescript
任務清單:
載入骨架屏
錯誤邊界
404 頁面
動畫效果
鍵盤快捷鍵
// 使用 Framer Motion
import { motion } from 'framer-motion'
```
#### Day 20-21: PWA 功能
```yaml
任務清單:
□ Service Worker
□ Manifest.json
□ 離線快取
□ 安裝提示
□ 推播通知準備
里程碑: PWA 功能就緒 ✅
```
### 🧪 Week 5: 測試與優化
#### Day 22-23: 功能測試
```typescript
任務清單:
單元測試撰寫
E2E 測試 (Playwright)
手動測試清單
Bug 修復
邊界案例處理
測試覆蓋:
- 認證流程
- AI 生成
- 複習系統
- 資料 CRUD
```
#### Day 24-25: 效能優化
```yaml
任務清單:
□ Lighthouse 評分優化
□ 圖片優化
□ Code Splitting
□ API 快取策略
□ Database 索引
目標指標:
- Performance: > 90
- Accessibility: > 95
- Best Practices: > 95
- SEO: > 100
```
#### Day 26-27: 安全性檢查
```typescript
任務清單:
API Rate Limiting
Input Validation
XSS 防護
SQL Injection 防護
環境變數檢查
// middleware.ts
export function middleware(request: NextRequest) {
// Rate limiting 邏輯
}
```
### 🚀 Week 6: 發布與推廣
#### Day 28-29: 發布準備
```yaml
任務清單:
□ 生產環境配置
□ 網域設置
□ SSL 憑證
□ 備份策略
□ 監控設置
網域選擇:
- linguaforge.com
- linguaforge.app
- linguaforge.tw
```
#### Day 30-31: 內測啟動
```yaml
任務清單:
□ 邀請 Beta 用戶
□ 意見收集表單
□ 快速修復
□ 文檔撰寫
□ 使用教學
目標:
- 20 個內測用戶
- 收集 10+ 回饋
```
#### Day 32-33: 公開發布
```yaml
任務清單:
□ ProductHunt 發布
□ 社群媒體宣傳
□ Reddit 分享
□ FB 社團推廣
□ SEO 優化
推廣管道:
- PTT: TOEIC/Language 版
- FB: 英文學習社團
- Dcard: 語言版
```
## 💰 預算控制6週
### 成本明細
```yaml
必要支出:
Gemini API 測試: NT$ 500
網域名稱 (.com): NT$ 400
總計: NT$ 900
可選支出:
Logo 設計 (Fiverr): NT$ 500
廣告測試: NT$ 1,000
總計: NT$ 1,500
最大預算: NT$ 2,400
```
### 免費資源運用
```yaml
完全免費:
- Vercel: 免費額度 (100GB 頻寬/月)
- Supabase: 免費版 (500MB DB, 1GB 儲存)
- GitHub: 私有 repo
- Gemini: 免費額度 (60 QPM)
- shadcn/ui: 開源元件
- Tailwind CSS: 開源
```
## 🎯 關鍵里程碑檢查點
### Week 1 結束
- [ ] 用戶可以註冊/登入
- [ ] 網站已部署上線
- **決策點**: 技術可行性確認
### Week 2 結束
- [ ] AI 生成功能運作
- [ ] 可儲存詞卡
- **決策點**: 核心價值驗證
### Week 3 結束
- [ ] 完整 CRUD 功能
- [ ] 複習系統運作
- **決策點**: MVP 功能完整性
### Week 4 結束
- [ ] 響應式設計完成
- [ ] PWA 功能就緒
- **決策點**: 用戶體驗達標
### Week 5 結束
- [ ] 所有測試通過
- [ ] 效能指標達標
- **決策點**: 品質標準確認
### Week 6 結束
- [ ] 100+ 用戶註冊
- [ ] 40%+ 留存率
- **決策點**: 市場驗證
## 🛠️ 技術實作重點
### 1. 資料庫設計Supabase
```sql
-- 用戶表
CREATE TABLE users (
id UUID DEFAULT auth.uid() PRIMARY KEY,
email TEXT UNIQUE NOT NULL,
username TEXT,
created_at TIMESTAMP DEFAULT NOW()
);
-- 詞卡表
CREATE TABLE cards (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
user_id UUID REFERENCES users(id) ON DELETE CASCADE,
word TEXT NOT NULL,
definition TEXT NOT NULL,
examples JSONB,
next_review TIMESTAMP DEFAULT NOW(),
easiness_factor DECIMAL DEFAULT 2.5,
interval_days INTEGER DEFAULT 0,
created_at TIMESTAMP DEFAULT NOW()
);
-- RLS 政策
ALTER TABLE cards ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Users can only see own cards" ON cards
FOR ALL USING (auth.uid() = user_id);
```
### 2. 關鍵元件架構
```typescript
// components/card-generator.tsx
export function CardGenerator() {
const [sentence, setSentence] = useState('')
const [selectedWord, setSelectedWord] = useState('')
const { mutate: generateCard, isLoading } = useGenerateCard()
// 元件邏輯
}
// hooks/useGenerateCard.ts
export function useGenerateCard() {
return useMutation({
mutationFn: async (data) => {
const response = await fetch('/api/gemini', {
method: 'POST',
body: JSON.stringify(data)
})
return response.json()
}
})
}
```
### 3. PWA 配置
```javascript
// next.config.js
const withPWA = require('next-pwa')({
dest: 'public',
register: true,
skipWaiting: true,
disable: process.env.NODE_ENV === 'development'
})
module.exports = withPWA({
// Next.js 配置
})
```
## 📈 成功指標
### 技術指標
- [ ] Lighthouse 分數 > 90
- [ ] 首次載入 < 3
- [ ] API 回應 < 500ms
- [ ] 零嚴重 Bug
### 產品指標
- [ ] 100+ 註冊用戶
- [ ] 40%+ D7 留存
- [ ] 10+ 分鐘日均使用
- [ ] 50+ NPS 分數
### 商業指標
- [ ] CAC < NT$ 50
- [ ] 30%+ 付費意願
- [ ] 5+ 用戶推薦
## 🚨 風險管理
### 技術風險
| 風險 | 機率 | 對策 |
|------|------|------|
| Gemini API 不穩 | | 準備 OpenAI 備案 |
| Supabase 限制 | | 監控用量 |
| 效能問題 | | 提前優化 |
### 時程風險
| 風險 | 機率 | 對策 |
|------|------|------|
| 功能超時 | | 狠心砍功能 |
| Bug 太多 | | TDD 開發 |
| 學習曲線 | | 選熟悉技術 |
## 🎬 立即行動
### 今天Day 0
```bash
# 1. 初始化專案
npx create-next-app@latest linguaforge --typescript --tailwind --app
cd linguaforge
# 2. 安裝核心套件
npm install @supabase/supabase-js @supabase/auth-helpers-nextjs
npm install zustand @tanstack/react-query
npm install @google/generative-ai
# 3. 設置 shadcn/ui
npx shadcn-ui@latest init
# 4. 部署到 Vercel
vercel
# 完成!你的網站已經上線了
```
### 第一週檢查清單
- [ ] Day 1: 專案架構完成
- [ ] Day 2: 基礎 UI 完成
- [ ] Day 3: 認證系統完成
- [ ] Day 4: 用戶功能測試
- [ ] Day 5: 部署上線
## 💪 成功秘訣
### Do's ✅
1. **每日部署**: 每天都要部署新版本
2. **快速迭代**: 不求完美求能用
3. **用戶優先**: 盡早收集反饋
4. **保持簡單**: 避免過度工程
5. **記錄一切**: 寫開發日誌
### Don'ts ❌
1. **不要完美主義**: MVP 夠用就好
2. **不要過度設計**: 先跑起來再說
3. **不要拖延上線**: Week 1 就要上線
4. **不要忽視反饋**: 用戶說了算
5. **不要怕失敗**: 失敗成本很低
## 📚 參考資源
### 學習資源
- [Next.js 文檔](https://nextjs.org/docs)
- [Supabase 文檔](https://supabase.com/docs)
- [shadcn/ui](https://ui.shadcn.com)
- [Tailwind CSS](https://tailwindcss.com)
### 社群支援
- Next.js Discord
- Supabase Discord
- Reddit r/nextjs
- Stack Overflow
## 🎯 最終目標
> **6 週內打造一個有 100 個活躍用戶、40% 留存率的 AI 英語學習平台!**
記住
- 網頁版成本只要 App 14%
- 開發時間只要 App 50%
- 可以即時更新快速迭代
- 成功後再做 App程式碼可重用 80%
**現在就開始6 週後見證奇蹟!🚀**