The problem
The menu said honey soy glaze, the server was waiting, and I was trying to remember whether baked honey still counts for a baby under 12 months. (It does.) Every meal out with my son turned into the same quiz: honey, salt, choking hazards, and whether he'd had sesame yet.
The apps built for this want me to log every bite. I didn't need a food diary. I needed an answer before the server walked away.
What it does
Point your phone at a menu. Tiny Foodie prints a ticket, row by row, and stamps every dish Yes, Yes, if, or Not yet for your baby's age and which of the big 9 allergens they've already had. Every "Yes, if" comes with the one fix that makes the dish work. When the fix needs the kitchen, a Show server screen has the exact words to say.
- Menu scan. Live camera. The ticket prints as each dish is read.
- Dish check. Type or say any dish and get the same verdict. Unlimited on the free tier.
- Recipes from reels. Paste an instagram reel or tiktok link and get a clean recipe card with a verdict and a version adapted for your kid's stage.
- Tried foods without logging. Scanning never writes anything. Tapping "We're having this" when you order is the only thing that updates the profile.
- Stages from a birth month. Enter it once. Textures and rules advance on their own from 6 months to 3 years.
- Feed Now. Nearby spots with a counter order already sized for your kid's stage.
- PDF for the pediatrician. Export the tried-foods profile.
First open prints a bundled sample menu (La Brisa Cafe) fully offline, so you see a complete ticket in about ten seconds without typing anything.
What makes it different: the model reads, the rules decide
An LLM reads the menu and answers narrow questions about each dish. It does not issue verdicts. A deterministic rules engine does that: seven ordered rules, including stage bans (honey under 12 months, even baked in), first tastes of the big 9 allergens, preparation changes, and a confidence floor that returns "Not yet" when the read isn't solid.
This came from a bug. An early build answered every dish with "ask about added salt." Now a server ask is reserved for true vetoes (honey, nuts, whole grapes, popcorn), salt is a standing note, and every "Yes, if" has to carry a fix a parent can act on. A wrong Yes costs a parent more than a cautious Not yet, so uncertainty defaults to Not yet.
How it's built
- Stack. SwiftUI and SwiftData, iOS 17+.
- Local first. No accounts. The baby's profile stays on the phone. A small serverless proxy on Vercel holds the LLM key so it never ships in the app.
- RevenueCat. Tiny Foodie Pro is one entitlement with monthly and annual products in a single default offering. $4.99/month or $29.99/year. The paywall shows once, after the first real verdict, never before it. The free tier stands on its own: unlimited dish checks, 3 menu scans a week, 10 saved recipes.
- Designed for one hand at a table. The UI works backward from a single glance: color in 0.2 seconds, the verdict word in 0.5, the fix in 2.
- Built from a phone. Two weeks, mostly during naps. AI coding agents wrote Swift on branches and opened PRs, Xcode Cloud ran the Mac builds on its free tier, and TestFlight handled on-device QA.
What shipping it taught me
Scope is a product decision. Cutting the allergen quiz from onboarding and holding the paywall until after the first verdict made the app better, not just faster to ship.
An LLM is a reader, not a judge. A parent can trust a rule. A model's confidence is a different thing.
Free CI quotas are smaller than they look. The Github cloud Mac CI service burned its free minutes in one night, so every build moved to Xcode Cloud's free tier.
What's next
Planning to add more extensive restaurant search and menu surfacing. After that, a second child profile for siblings.
Built With
- ios
- openai
- revenuecat
- swiftdata
- swiftui
- testflight
- vercel
- xcode
Log in or sign up for Devpost to join the conversation.