Culin
Full-stack · nutrition
A food decision engine: one next meal, cooked or ordered, that fits your macros and your health.
- Role
- Full-stack
- Timeline
- 2025 – Present
- Stack
- React Native, Expo Router, TypeScript, Next.js, FastAPI, PostgreSQL, OpenAI, USDA/FatSecret

200+
pilot patients
+22%
recommendation accuracy
<3s
p95 decision
1
decision, not a list
Overview
People know their nutrition goals; the hard part is deciding what to eat next. Trackers log after the fact, delivery apps add endless choice, and meal plans don't react to schedule, budget or health conditions.
Culin takes macro targets, goals and conditions and commits to one next meal across cook or order paths, with grounded macros and a clear action.
What I built
- Built a mobile-first decision flow that turns macro targets, preferences, schedule and food context into one recommended next meal.
- Designed a nutrition layer on structured food data (USDA, FatSecret) with fuzzy matching and macro estimation, so numbers come from data rather than the model.
- Treated health conditions as hard constraints in scoring, piloted clinically with 200+ patients for +22% accuracy over a GPT-4 baseline.
- Shipped across React Native/Expo, Next.js API routes, FastAPI services, Cognito/OIDC auth, PostgreSQL and Docker.
Architecture
- Client
- React Native + Expo Router
- API
- Next.js API routes + FastAPI
- Food data
- USDA + FatSecret
- LLM
- OpenAI meal reasoning
- Data
- PostgreSQL
- Auth
- Cognito / OIDC
- Infra
- Docker
Decisions
One decision, not a feed
The engine commits to a single meal so the user acts instead of scrolling. Alternatives are a tap away, not the default.
Data for numbers, LLM for reasoning
Macros come from matched food data; the model only explains and composes, which keeps estimates trustworthy.
Conditions are constraints
Diabetes, blood pressure and allergies filter candidates before scoring, so taste never outranks safety.
Screens





Next project
Hanger · fashion discovery