基於 Octalysis 框架的習慣追蹤應用,幫助用戶透過遊戲化元素建立持續的好習慣。
- 前端: React + TypeScript + Vite + Tailwind CSS
- 後端: Node.js + Express + TypeScript + Prisma
- 資料庫: PostgreSQL (Supabase)
- 部署: Vercel (前端) + Render (後端)
- Node.js 22.x
- Yarn 1.22.x
- PostgreSQL 資料庫
- 克隆專案
git clone https://github.com/Retsomm/OctalysisHabitTracker.git
cd OctalysisHabitTracker- 設定環境變數
# 後端環境變數
cp backend/.env.example backend/.env
# 編輯 backend/.env 填入實際的環境變數值
# 前端環境變數
cp frontend/.env.example frontend/.env
# 編輯 frontend/.env 填入實際的環境變數值- 安裝依賴
# 在根目錄一次安裝前後端依賴
yarn install- 資料庫設定
cd backend
yarn db:migrate
yarn db:generate- 啟動開發服務器
# 在根目錄同時啟動後端、前端
yarn dev
yarn dev會同時啟動後端(3001)與前端(5173)。 資料庫使用你在backend/.env設定的DATABASE_URL/DIRECT_URL(例如 Supabase)。
# 構建後端
cd backend
yarn build
# 構建前端
cd frontend
yarn build專案已配置 GitHub Actions 進行自動化部署:
- 推送到 main 分支 → 自動觸發部署流程
- 後端 → 部署到 Render
- 前端 → 部署到 Vercel
- 資料庫 → 自動執行 migration
- ESLint: 代碼規範檢查
- TypeScript: 靜態類型檢查
- Prisma: 資料庫 ORM
- Tailwind CSS: CSS 框架
├── backend/ # 後端應用
│ ├── src/
│ │ ├── controllers/ # 控制器
│ │ ├── routes/ # 路由
│ │ ├── services/ # 服務層
│ │ ├── middleware/ # 中介軟體
│ │ └── types/ # 類型定義
│ ├── prisma/ # 資料庫配置
│ └── package.json
├── frontend/ # 前端應用
│ ├── src/
│ │ ├── components/ # React 組件
│ │ ├── pages/ # 頁面組件
│ │ ├── store/ # Redux 狀態管理
│ │ └── types/ # 類型定義
│ └── package.json
└── .github/workflows/ # CI/CD 配置
JWT_SECRET: JWT 令牌密鑰DATABASE_URL: Prisma Client 使用的資料庫連接 URL(建議 Supabase Pooler)DIRECT_URL: Prisma Migration 使用的直連 URL(Supabase Direct Connection)LINE_CLIENT_ID/SECRET: LINE Login OAuth 設定X_CLIENT_ID/SECRET: X (Twitter) OAuth 設定
DATABASE_URL: 使用 Supabase Connection Pooler(通常為pooler.supabase.com)DIRECT_URL: 使用 Supabase Direct Connection(db.<project-ref>.supabase.co:5432)- CI(GitHub Actions)請在 Secrets 同時設定
DATABASE_URL與DIRECT_URL
VITE_GOOGLE_CLIENT_ID: Google OAuth 客戶端 IDVITE_LINE_*: LINE Login 相關設定VITE_X_*: X (Twitter) 相關設定
- Fork 專案
- 創建功能分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 開啟 Pull Request
本專案採用 MIT 許可證 - 詳見 LICENSE 文件。