Log meals, workouts, and weight to track fitness progress and compare predicted versus actual results
Translation pending
AI summary · README
HealthTypeScript · JavaScriptGitHub @YoussefHawariiOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
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)Read the full 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).