How nhatquang2288/nutriboost-project works
NutriBoost is a Vietnamese, mobile-first nutrition coaching PWA for clients and personal trainers. The client journey covers sign-in, onboarding and energy goals, daily meal logging, meal and workout plans, progress, and AI assistance; the PT console adds invitations, client management, and plan review. The README documents a deterministic nutrition layer and a unified AI gateway. Some route and subsystem implementations were not sampled, so only documented capabilities and evidenced connections are shown; Supabase and the model provider are external services.
Main entry points: chat/route.ts Chat API orchestrator · server.ts Supabase server client · callback/route.ts Auth callback · OnboardingFlow.tsx Onboarding flow
Components 30
Client experience
- Onboarding flow
apps/web/src/app/onboarding/OnboardingFlow.tsx - Daily dashboard
apps/web/src/app/(app)/hom-nay/page.tsx - Meal logging
apps/web/src/app/(app)/ghi-nhan/page.tsx - Seven-day meal plan
apps/web/src/app/(app)/ke-hoach/page.tsx - Workout calendar
apps/web/src/app/(app)/lich-tap/page.tsx - Progress tracking
apps/web/src/app/(app)/tien-do/page.tsx
Nutrition and plans
- Onboarding actions
apps/web/src/lib/actions/onboarding.ts - Nutrition calculations
packages/nutrition/src/index.ts - Meal actions
apps/web/src/lib/actions/meals.ts - Safety assessment
packages/nutrition/src/safety.ts - Plan actions
apps/web/src/lib/actions/plans.ts
AI assistant
- Assistant interface
apps/web/src/components/assistant/AssistantProvider.tsx - Chat API orchestrator
apps/web/src/app/api/ai/chat/route.ts - AI gateway
packages/ai/src/gateway.ts - Gemini model client
packages/ai/src/client.ts - AI data store adapter
apps/web/src/lib/ai/store.ts
PT console
- PT overview
apps/web/src/app/(pt)/pt/page.tsx - Invite management
apps/web/src/app/(pt)/pt/loi-moi/InviteManager.tsx - Invite actions
apps/web/src/lib/actions/invites.ts - Client profile
apps/web/src/app/(pt)/pt/khach/[clientId]/page.tsx - Plan approval queue
apps/web/src/app/(pt)/pt/duyet/page.tsx
Identity and data
- Magic-link sign-in
apps/web/src/app/dang-nhap/page.tsx - Magic-link API
apps/web/src/app/api/auth/magic-link/route.ts - Auth callback
apps/web/src/app/auth/callback/route.ts - Supabase server client
apps/web/src/lib/supabase/server.ts - Shared database types
packages/db/src/database.types.ts
Other components
- Client
- Personal trainer
- Supabase Auth and database
- Google Gemini
Connections 34
- Client → Magic-link sign-in: requests sign-in
- Magic-link sign-in → Magic-link API: sends email
- Magic-link API → Supabase server client: creates client
- Supabase server client → Supabase Auth and database: authenticates with
- Supabase Auth and database → Auth callback: returns link
- Auth callback → Supabase server client: exchanges code
- Auth callback → Onboarding flow: routes new users
- Client → Onboarding flow: enters profile
- Onboarding flow → Onboarding actions: submits answers
- Onboarding actions → Nutrition calculations: uses calculations
- Client → Daily dashboard: views daily status
- Client → Meal logging: records meals
- Meal logging → Meal actions: submits meal
- Client → Seven-day meal plan: views plan
- Client → Workout calendar: views schedule
- Client → Progress tracking: views progress
- Client → Assistant interface: asks assistant
- Assistant interface → Chat API orchestrator: sends messages
- Chat API orchestrator → Safety assessment: checks safety
- Chat API orchestrator → AI gateway: builds chat response
- AI gateway → Gemini model client: requests generation
- Gemini model client → Google Gemini: calls model
- Chat API orchestrator → AI data store adapter: creates AI store
- AI data store adapter → Supabase Auth and database: uses persistence
- Chat API orchestrator → Supabase server client: gets session client
- Personal trainer → PT overview: manages clients
- Personal trainer → Invite management: manages invitations
- Invite management → Invite actions: creates or revokes
- Invite actions → Supabase server client: uses data access
- Personal trainer → Client profile: opens client
- Personal trainer → Plan approval queue: reviews plans
- Client profile → Plan actions: requests plan draft
- Plan approval queue → Plan actions: reviews plan
- Shared database types → Supabase Auth and database: defines shared shapes