How kingpinlab/optimeal works
OptiMeal is a nutrition and wellness tracking app: users scan meals for AI-assisted nutrition estimates, review and confirm meals, and track daily health data, goals, progress, and coaching. The Next.js app combines a client UI and API routes, with Prisma-backed persistence. The documented meal flow runs from image scan and preview to explicit meal confirmation; scanning itself does not save. Several UI routes and integrations were not sampled, so their internal wiring is omitted where not evidenced.
Main entry points: useApi.ts API query hooks · prisma.ts Application database · scan/route.ts Meal scan API · meals/route.ts Meal records API
Components 29
Client experience
- Home screen
src/components/screens/HomeScreen.tsx - Scan screen
src/components/screens/ScanScreen.tsx - Coach screen
src/components/screens/CoachScreen.tsx - Profile screen
src/components/screens/ProfileScreen.tsx - Calendar screen
src/components/screens/CalendarScreen.tsx - API query hooks
src/hooks/useApi.ts - API client
src/lib/api.ts - UI primitives
src/components/ui/primitives.tsx
Meal nutrition
- Meal scan API
src/app/api/scan/route.ts - Food detection
src/lib/ai/vision.ts - Nutrition optimizer
src/lib/nutrition.ts - Food macro lookup
src/lib/food-database.ts - Meal records API
src/app/api/meals/route.ts - Meal item API
src/app/api/meals/[id]/route.ts
Health tracking
- Health log APIs
src/app/api
Guidance and insights
- Progress stats API
src/app/api/stats/route.ts - Achievement rules
src/lib/achievements.ts - Coach chat API
src/app/api/coach/route.ts - Coach responses
src/lib/ai/coach.ts - PDF report API
src/app/api/report/route.ts - Report document
src/lib/pdf/ReportDocument.tsx
Identity and platform
- Authentication routes
src/app/api/auth - Token and user auth
src/lib/auth.ts - App state
src/store/useStore.ts - Application database
src/lib/prisma.ts - Image storage
src/lib/cloudinary.ts
Other components
- App user
- Gemini model
- USDA FoodData
Connections 30
- App user → Scan screen: captures photo
- Scan screen → API query hooks: starts scan
src/hooks/useApi.ts - API query hooks → API client: fetches API
src/hooks/useApi.ts - API client → Meal scan API: posts image
- Meal scan API → Image storage: uploads image
src/app/api/scan/route.ts - Meal scan API → Food detection: detects foods
src/app/api/scan/route.ts - Food detection → Gemini model: queries model
- Meal scan API → Nutrition optimizer: estimates and scores
src/app/api/scan/route.ts - Nutrition optimizer → Food macro lookup: looks up macros
src/lib/nutrition.ts - Food macro lookup → USDA FoodData: queries nutrition
- App user → Meal records API: confirms meal
- API query hooks → Meal records API: posts confirmation
src/hooks/useApi.ts - Meal records API → Application database: saves meals
src/app/api/meals/route.ts - Meal records API → Achievement rules: checks unlocks
src/app/api/meals/route.ts - API query hooks → Health log APIs: logs health data
src/hooks/useApi.ts - Health log APIs → Application database: reads and writes
src/app/api/meals/route.ts - API query hooks → Progress stats API: requests charts
src/hooks/useApi.ts - Progress stats API → Application database: reads totals
src/app/api/stats/route.ts - App user → Coach screen: asks coach
- API query hooks → Coach chat API: posts message
src/hooks/useApi.ts - Coach chat API → Coach responses: requests reply
src/app/api/coach/route.ts - Coach chat API → Application database: loads context and saves chat
src/app/api/coach/route.ts - API query hooks → PDF report API: requests report
- PDF report API → Report document: renders PDF
src/app/api/report/route.ts - PDF report API → Application database: reads report data
src/app/api/report/route.ts - App user → Authentication routes: signs in
- Authentication routes → Token and user auth: verifies identity
- Token and user auth → Application database: loads user
src/lib/auth.ts - API query hooks → App state: reads token
src/hooks/useApi.ts - Home screen → UI primitives: renders components
src/components/screens/HomeScreen.tsx