From Meal Plan to Pantry — How We Connected the Cooking Loop
We shipped compact layouts, a mark-cooked flow, a smarter grocery list, recipe attribution, and squashed seven silent bugs. Here's everything in v5.2.
Meal planning apps love to help you plan. But the loop never closes. You plan Monday's dinner, cook it, and Tuesday's suggestions still assume you have ingredients you already used.
With v5.2, we connected the dots. Plan meals, cook them, and your pantry updates automatically — all through a conversation with Chef Kai.
Mark Cooked: The Headline Feature
Every meal on your calendar now has a checkbox. Check off what you cooked, and a green "Mark Cooked" button floats up from the bottom. Tap it and a dialog appears with your checked meals, a leftovers field, and a list of basic seasonings that are automatically skipped (because nobody tracks salt and pepper).
Hit confirm and the message goes straight to Chef Kai. He checks your pantry, figures out what was used, and reduces or removes items automatically. Cooked meals get a green border, a strikethrough title, and a "Cooked ✓" badge.
Compact Layouts: Same Data, Half the Space
Our pantry and grocery list screens had a problem — every item was its own card with full padding, shadows, and rounded corners. It looked fine with 5 items. With 20, you were scrolling forever.
We redesigned both screens with grouped category cards. Items are organized by category (Produce, Meat, Dairy, Frozen, Pantry) inside shared cards with colored headers. Each item is a compact row — just a status dot, name, quantity, and action icons.
| Before | After | |
|---|---|---|
| Items visible without scroll | ~6 | ~15 |
| Card shadows per screen | 1 per item | 1 per category |
| Vertical padding per item | 32px | 14px |
The grocery list follows the same pattern — grouped categories, round checkboxes that grey out when tapped, and a floating "Add to Pantry" pill for batch check-off.
Chef Kai Gets a Grocery List
Ask Kai to "make me a grocery list for this week" and he'll pull your meal plan, check your pantry, and save only what you need to buy — directly to the app. No copy-pasting, no switching screens.
He's smart about basics too. Salt, pepper, cooking oil, water — he won't add these by default. He'll list them separately and ask: "Do you need any of these?" Only adds them if you say yes.
Kai can also add, remove, and view your grocery list through conversation. "Add almond milk." "Remove the bell peppers." It all syncs to the Meal Prep grocery tab.
Recipe Attribution
Every recipe now shows where it came from — by Chef Kai, via Spoonacular, or by Matt. When you search "chicken fried rice" and get 5 results, you can tell them apart. Kai's version might be scaled for your family of 6. The Spoonacular version might have verified nutrition data. Your friend's version might have that secret ingredient they told you about.
Display names are unique across the platform — Xbox-style. If "Matt" is taken, the next one becomes "Matt#0001".
The Bug Hunt
We found and fixed seven silent failures — bugs that returned 200 OK but didn't actually work:
- DynamoDB reserved keywords —
unitandnamesilently broke pantry edits. Both need expression aliases. - URL-encoded # — meal IDs like
2026-03-28#dinnergot encoded to%23. Deletes succeeded against non-existent keys. - Empty PostgreSQL arrays —
json.dumps([])produces'[]'which PostgreSQL rejects. It expects'{}'. - camelCase vs snake_case — the user profile stored
familySizebut the AI readfamily_size. Every family defaulted to 4. - The tool Kai forgot — the grocery list tool was registered in the API but missing from the system prompt. Kai hallucinated that he couldn't do it.
- Path parameter mismatch — API Gateway sent
itemId, Lambda checkeditem_id. Silent null. - Accidental DynamoDB table — user profiles were being written to DynamoDB instead of RDS. Two sources of truth, neither complete.
None of these caused crashes. None showed error messages. They all looked like "the app just doesn't work right." That's what makes them dangerous.
What's Next
We're bringing this compact design language to the recipes, chat, and account screens. The goal: a kitchen assistant that doesn't just answer questions, but actively manages your food workflow from planning to shopping to cooking to cleanup.