The Polish Update — From Prototype to Product
Onboarding, subscriptions, Google sign-in, a visual overhaul, and the kind of small details that make an app feel finished. Here's everything in v5.3.
KitchenKai has worked for a while now. You could chat with Chef Kai, manage your pantry, plan meals, and search recipes. But it felt like a prototype — rough edges everywhere, no guidance for new users, and no way to actually pay for it.
Phase 2 was about closing that gap. Not new features — finish. Make it feel like something you'd hand to a stranger and say "try this."
A New Way In
The old sign-up form asked for six fields before you even saw the app. We stripped it down to three — username, email, password — and moved everything else into a guided onboarding flow.
After creating an account, new users walk through three steps:
- About You — name and family size (so Kai can greet you and scale recipes)
- Your Kitchen — cooking skill, dietary restrictions, allergens (so Kai never suggests something dangerous)
- Stock Your Pantry — snap a photo of your fridge and Kai identifies everything (optional)
The onboarding matches the login screen visually — same blurred food photography background, same white card, same typography. It feels like one continuous experience, not two different apps stitched together.
We also added Google sign-in. One tap, no password, straight into onboarding. Apple sign-in is on the roadmap once we have an Apple Developer account.
Chef Kai Says Hello
When you land on the chat screen for the first time, it's no longer an empty void with a blinking cursor. Chef Kai greets you by name with a welcome message explaining what he can do — find recipes, plan meals, manage your pantry, scan your fridge. Below that, quick suggestion chips give you one-tap conversation starters.
It's a small thing, but it completely changes the first impression. Instead of "what do I do here?" it's "oh, I can just ask."
Tooltips That Actually Help
Every screen now has first-visit tooltips — glassmorphic bubbles that point to specific buttons and explain what they do.
| Screen | Tooltip |
|---|---|
| Pantry | "Scan your fridge or pantry shelf — Kai reads it automatically." |
| Recipes | "Tap the heart to save recipes to your collection." |
| Meal Prep | "Switch to your grocery list — auto-generated from your meal plan." |
| Chat | "Snap a photo of food, a recipe page, or your fridge shelf." |
| Chat | "Your past conversations with Chef Kai live here." |
They show one at a time (not all at once — we fixed that bug), only on the active tab, and dismiss permanently with a "Got it" tap. They survive app restarts but reset on reinstall.
The Widget System
This was the biggest invisible change. Every screen used to build its own layout — its own Scaffold, its own header positioning, its own card styling.
We replaced all of it with three composable widgets. Every screen returns a ScreenLayout. Every white card is a KaiCard. Dynamic margins scale with screen width — 3% clamped between 12px and 24px. A phone gets tight margins. A tablet gets breathing room. Same code, same widget.
Pricing & Stripe
KitchenKai now has real subscription tiers with real payment processing.
Starter
Pro
Family
Free users get the full app with 3 Kai actions per week. Pro unlocks unlimited actions, computer vision scanning, AI grocery lists, and recipe uploads. Family adds up to 6 members with shared pantry and meal plans (coming soon).
The pricing screen uses a header band card design — each tier has a pastel-colored band at the top with the plan name and price, centered features below, and a single action button. Tapping "Upgrade" opens Stripe Checkout. A webhook updates your account tier automatically when payment completes.
Founding member pricing ($79.99/yr for Pro) is locked for the first 500 subscribers.
The Bug List
Phase 2 was also a bug hunt. Some highlights:
- Tooltips fired on all tabs simultaneously —
didChangeDependenciesre-enqueued tooltips from inactive tabs on every rebuild. Added a dismissed flag and active-tab guard. - Onboarding loop — after completing onboarding, navigating to
AuthWrapperre-checked the flag before the cache updated. Fixed by navigating directly to HomeScreen. - Names didn't save —
updateUserProfileupdated Cognito attributes before the database. If Cognito threw, the DB save never happened. Reordered: DB first, Cognito second (non-fatal). - Display name overwritten — onboarding sent an empty
displayNamewhich overwrote the username. Fixed with a SQLCASE WHEN. - dietary_restrictions was int2[] — the column was a smallint array referencing a lookup table, but the app sends text strings. Converted to
text[]. - Meal prep header showed literal text —
${_mealPlans.length}had an escaped dollar sign. - Recipe servings defaulted to 4 — Sonnet ignored the
family_sizeinstruction. Strengthened the prompt with explicit examples. - Chat input was single-line — long messages scrolled horizontally. Added
maxLines: 5.
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
The foundation is solid. Now we're focused on the details that turn a good app into a great one — better recipe discovery, richer user profiles, and making Chef Kai even smarter about your kitchen. Stay tuned.
Ready to cook smarter?
KitchenKai is in closed beta. Founding member pricing won't last forever.
Join the Waitlist