The build story
Dinner, debugged.
Every family runs the same nightly standup: what’s for dinner? Meal planning is really a coordination problem — recipes live in screenshots and saved links, the shopping list lives in someone’s head, and the plan lives nowhere. SousChef is my second run at solving it. The first attempt was Flutter; it taught me what the product needed to be, and then I shelved it. This version is a clean Laravel API with two fully native clients — SwiftUI on iOS, Jetpack Compose on Android — because a kitchen app lives or dies on feeling fast in one hand while the other one stirs.
Paste literally anything
The make-or-break feature is recipe import: if adding a recipe is harder than screenshotting it, nobody migrates. So the importer refuses to depend on websites being well-behaved. It works through a chain of fallbacks until something gives up a recipe:
URL → structured data (schema.org) → done
→ stripped HTML → Claude → done
→ video description → Claude → done
→ photo of a cookbook page → OCR
→ Claude vision → done
A magazine page, a TikTok link, grandma’s handwriting — the pipeline doesn’t care about markup, only about ending with ingredients and steps. Imports run on a stronger model than chat, because extraction is where accuracy pays for itself.
An assistant with its hands on the tools
“Sous” is the in-app assistant, and it’s agentic rather than chatty: fifteen registered tools covering recipe search, the meal plan, the shopping list, cooking history, pantry estimation, even grocery price lookups. Ask “plan three dinners the kids will actually eat and put the missing bits on the list” and it operates the same API the apps use. The economics are engineered, not hoped for: a fast model for conversation, prompt caching on by default, fixed credit costs per action, per-family daily limits, and every AI call logged with token pricing attached — so the free tier can’t quietly become a fire.
One source of truth, synced live
Everything is family-scoped on the server — recipes, plans, staples, the list — with roles and invite codes, and the clients are deliberately thin. WebSockets push every change, so when one person ticks off the tomatoes in aisle four, they vanish from the other phone in aisle seven. The backend carries 222 tests that run in nine seconds, which is what lets two app stores’ worth of releases ship weekly without fear.
The logo took the long way to a leaf
The brand argued with itself for a year. The Flutter prototype wore a flat cartoon chef on a loud orange tile — fine for a placeholder, wrong for a thing that wants to feel like a well-loved recipe notebook. So the rebuild went hand-painted: watercolour everything, a warm terracotta-and-sage palette over cream. For a while the app icon was Sous herself, the chef character — I even shipped a release that zoomed right in on her face. Then I shrank it to home-screen size and watched it turn to mush: a face dates, fights the icons either side of it, and quietly whispers “chatbot”.
What followed was a pile of dead ends. Toques flat and painted, a whisk, a monogram “S”, sprigs, leaf after leaf — I even wrote a little script to generate a parametric SVG leaf with proper depth before admitting the hand-painted one I’d been sketching was better. The lesson underneath all of it: the mascot and the logo are two different jobs. So the mark became a single watercolour basil leaf — calm, hand-made, unmistakably about food; Sous stayed inside the app as the companion, never the icon; and a brush-script wordmark tied the two together. Even the name shed its space along the way: “Sous Chef” became “SousChef”. It sounds like fussing, but it’s the whole difference between an app that looks made and one that looks generated.
The household is the QA team
SousChef has been in real daily use through beta, and the commit history shows it: fixes traced to numbered feedback tickets filed from the apps by the people who actually cook with it. The feedback queue even has its own robot — a scheduled AI agent that triages new reports every fifteen minutes and drafts fixes for the obvious ones. The loop from “this annoyed me at dinner” to “fixed in the next build” is short enough that the family keeps filing.
Got a product that needs a backend, two native apps, and AI that pays its way? Here’s how we could work together.