Inspiration
- People leave hospital after gallbladder removal with "eat low fat" and little else. Then come the questions nobody answers: Why did a meal that was fine last week send me running today? How long after eating should I stay near a bathroom?
What it does
- Meal estimates: snap or describe a meal, or scan a barcode. You get an estimate of how it's likely to sit, with plain-English reasons and the fat in grams.
- Corrections: if it misreads the portion, the cooking method or the ingredients, you fix it and the estimate is worked out again.
- Logging: record urgency or symptoms in three taps. The app works out the time since your last meal.
- Patterns: how soon after eating episodes tend to come, and which meal characteristics show up before them, with counts. Nothing is shown until there's enough data.
- Clinician summary: a one-page summary to bring to an appointment.
- Onboarding starts from your surgery date and gives first guidance before any account.
- Pricing: free to start, Premium with a 3-day trial. It doesn't diagnose.
How we built it
- Stack: Laravel API with PostgreSQL, an Expo/React Native app, and RevenueCat for subscriptions on the App Store and Google Play.
- Scoring: a vision model reads the photo; a deterministic engine scores it. Scoring never reads the clock or calls a model, so the same meal always rescores identically.
- Spec-driven development: a written constitution, with three principles enforced by tests that fail the build:
- a vocabulary check: never refer to a gallbladder in the present tense, never mention gallstones
- parity with the parent's scoring engine
- deterministic scoring
- plus over 300 backend tests in total
Challenges we ran into
- RevenueCat webhooks had silently never worked for 17 days. The payload was nested under event, and the server answered 204, which RevenueCat counts as success.
- The entitlement identifier was wrong twice: first the parent's, then the display name instead of the lookup key.
- Android testers spent the whole 14-day closed test on an older build, and Apple rejected a build because version 1.0.0 was already live.
- Making the demo video exposed a real bug: ordinary scans weren't stored with a meal time, so episodes never linked to meals. It was fixed on the server, with no app update needed.
Accomplishments that we're proud of
- Live on the App Store since Sep 23 with subscriptions approved. Google Play's 14-day closed test completed, and production access applied for.
- Tester feedback shipped during the event: an honest onboarding step counter and editable names (1.0.1).
- Patterns stated as observations with counts, never as causes, and nothing labelled "safe".
What we learned
- Ask the people first. "Everyone's fat limit is different" changed what the app shows.
- Check which build testers actually have.
- A success response can hide a dead integration, so verify end to end.
- Wording is part of the product.
What's next for GallDiet: Post-Op
- A personal fat-limit setting. You promised this publicly, so worth including.
- An episode list in History.
- Google Play production.
- A view across several days for "fat stacking".
- Recovery-stage content and food reintroduction. The backend for these already exists.

Log in or sign up for Devpost to join the conversation.