尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
A calorie, macro, exercise, and weight tracking web app. Users log meals (via barcode scan, voice, or manual entry), track workouts, and follow a predicted-vs-actual weight trend based on their computed BMR/TDEE.
• Frontend (Frontend/) — React 19 + Vite + TypeScript, Tailwind CSS v4, Zustand, react-router-dom v7
• Backend (Backend/) — NestJS 11 + Prisma + PostgreSQL (Neon)
• External APIs — Open Food Facts (barcode lookup), USDA FoodData Central (food name lookup), Web Speech API (client-side voice input), Cloudinary (avatar uploads)檢視完整 README ↗A calorie, macro, exercise, and weight tracking web app. Users log meals (via barcode scan, voice, or manual entry), track workouts, and follow a predicted-vs-actual weight trend based on their computed BMR/TDEE.
Frontend/) — React 19 + Vite + TypeScript, Tailwind CSS v4, React Context, react-router-dom v7Backend/) — NestJS 11 + Prisma + PostgreSQL (Supabase, database only)This is a monorepo, but Frontend and Backend deploy independently:
Frontend/ in the Vercel dashboard; framework auto-detected, no committed manifest)Backend/; NestJS is auto-detected and runs as a single Vercel Function; env vars are managed in the Vercel dashboard, no committed manifest)docker-compose.yml.See docs/architecture.md for the full system design and docs/business-logic.md for the calorie/TDEE/prediction formulas.
The backend has run on two different hosts:
Backend/ and its build, deploy and environment variables were managed in the Railway dashboard. Every feature up to October 2026 was built and shipped on it: auth with email OTP, food and exercise logging, barcode lookup, and profiles and avatars. This is where I learned to host a backend: connecting a monorepo subfolder, managing secrets on the platform, and wiring CORS between separately hosted frontend and backend.docs/adr/0011-backend-on-vercel-functions.md.docker compose up -d from the repo root)cd Backend
npm install
cp .env.example .env # DATABASE_URL already points at the local Docker DB; fill in ACCESS_TOKEN, REFRESH_TOKEN, USDA_API_KEY, etc.
npx prisma db push # applies the schema — this project uses `prisma db push`, not migrations
npx prisma generate
npx prisma db seed # loads the canonical food catalog (idempotent)
npm run start:dev # http://localhost:3000
cd Frontend
npm install
cp .env.example .env # set VITE_API_BASE_URL and VITE_GOOGLE_CLIENT_ID
npm run dev # http://localhost:5173
| Backend | Frontend | |
|---|---|---|
| Dev server | npm run start:dev | npm run dev |
| Build | npm run build | npm run build |
| Unit tests | npm test | — |
| E2E tests | npm run test:e2e | — |
| Lint | npm run lint (auto-fixes) | npm run lint (no auto-fix) |
| Format | npm run format | npm run format |
Backend unit tests (npm test) run in CI on every PR (.github/workflows/ci.yml). Backend E2E tests are not run in CI — run them locally whenever backend behavior changes.
Backend/ NestJS API — see Backend/README.md
Frontend/ React SPA — see Frontend/README.md
docs/ Architecture, business logic, and requirements docs
specs/ Per-feature specs (spec-kit workflow: spec.md → plan.md → tasks.md)
Real secrets are never committed — see each package's .env.example for the full list of required variables (Backend/.env.example, Frontend/.env.example).
JWTs are signed with HS256 using two symmetric secrets (ACCESS_TOKEN, REFRESH_TOKEN). Email/password signup requires verifying a 6-digit OTP sent by email before a session is issued. Google OAuth is also supported. Refresh tokens rotate on use (single-use, revoked on refresh).