Web app where a user records ingredients, composes meals from them, and groups meals into meal plans, with nutrition totals at each level.
- Ingredients, meals and meal plans: list, search, sort, page, add, edit, duplicate, delete
- Nutrition totals for meal ingredients, meals and meal plans
- Compare up to 3 ingredients, meals or meal plans side by side
- Draft meal plan: a single scratchpad day kept in the browser
- Body metrics: BMI, body fat, maintenance calories and calorie targets from profile stats
- Locales:
en,de,es,fr,hu
Next.js 16 (App Router), React, TypeScript, Tailwind CSS 3, shadcn/ui, React Hook Form + Zod, Vitest, Bun.
Requires Bun.
bun installSet env vars in .env.local:
| Variable | Purpose |
|---|---|
NEXT_PUBLIC_API_URL |
Backend base URL (inlined at build time) |
COOKIE_DOMAIN |
Server-only; same as the backend's COOKIE_DOMAIN (empty locally) |
bun run devOpen http://localhost:3000.
| Command | Description |
|---|---|
bun run dev |
Start dev server |
bun run build |
Production build |
bun run start |
Start production server |
bun run lint |
ESLint (auto-fix) |
bun run test |
Vitest, single run |
app/(modules)/[lang]/locale-aware routes (dashboard and its feature modules)app/(modules)/(auth)/sign in / sign up,/signoutapp/session/session cookies, proxy routing decision, renewal, sign-outapp/components/,app/utils/,app/hooks/,app/providers/shared codeapp/i18n/settings and dictionaries
Module boundaries are enforced by ESLint (eslint-plugin-boundaries); a new dashboard module must be registered in eslint.config.mjs.
CLAUDE.mdarchitecture and conventionsCONTEXT.mddomain languagedocs/adr/architecture decision records
Deployed to EC2 via AWS CodePipeline/CodeBuild/CodeDeploy (buildspec.yml, appspec.yml, scripts/), running under pm2 as bitewise-frontend on port 3000. A Dockerfile is also provided.