The Stack
Five services, zero vendor lock-in. Each external dependency was chosen because it's best-in-class at exactly one thing — and replaceable if it isn't.
iOS Client
SwiftUI + SwiftData
Convex Backend
Real-time DB & Functions
Auth0
OAuth 2.0
OpenRouter
AI Parsing
RevenueCat
Subscriptions
ScrapeCreators
Social Media
iOS Client
SwiftUI + SwiftData
Convex Backend
Real-time DB & Functions
Auth0
OpenRouter
RevenueCat
ScrapeCreators
Seven Sources. One Recipe.
A TikTok video, a screenshot of grandma's handwriting, and a New York Times URL all produce the same structured JSON. The import engine detects the source, routes to the right extraction strategy, deduplicates by URL, and hands clean text to the AI parser.
Source Detection
Route to the right extraction strategy
Web URL
On-device scraping — JSON-LD first, HTML fallback, og:image capture
TikTok
ScrapeCreators API — transcript extraction + video metadata
ScrapeCreators API — caption + transcript + post metadata
YouTube
ScrapeCreators API — description + transcript + chapters
Photo / Screenshot
Apple Vision OCR — on-device, image never leaves the phone
Pasted Text
Pattern matching — auto-detects ingredients, steps, and sections
AI Prompt
Two-phase — generate recipe text, then parse into structured JSON
Unified AI Parsing → Structured Recipe
End-to-End Pipeline
Input Detected
Source routing
Content Extracted
Strategy-specific
Cache Check
Dedup by URL
AI Parsing
OpenRouter → JSON
Recipe Saved
Ready to cook
Input Detected
Source routing
Content Extracted
Strategy-specific
Cache Check
Dedup by URL
AI Parsing
OpenRouter → JSON
Recipe Saved
Ready to cook
Web Extraction Priority
| Strategy | Priority | Description |
|---|---|---|
| JSON-LD | Preferred | Schema.org Recipe markup — already structured, highest accuracy |
| HTML Scraping | Fallback | Recipe-specific div extraction, Open Graph tags, meta descriptions |
| Full Text | Last Resort | Page body text with pattern detection for ingredients and steps |
AI That Parses, Never Stores
Every AI call is a pure function — text in, structured JSON out, no side effects. If the model returns garbage, the system retries with tighter constraints. If it returns valid JSON, schema validation confirms it before anything touches the database. The AI never sees usernames, emails, or photos — only recipe text.
Raw Text
From extraction
Convex Action
Orchestration
OpenRouter
Model routing
Validated JSON
Schema-checked
Recipe Parsing
Unstructured text from any source transformed into structured ingredients, steps, timing, and nutrition data.
Remix Generation
Applies user dietary preferences to a parsed recipe — smart substitutions with recalculated nutrition.
Recipe Creation
Generates complete recipes from natural language prompts, producing the same structured output as the parser.
Retry & Resilience
Exponential backoff with jitter on every call. Malformed JSON triggers a retry with tighter constraints before surfacing an error.
Schema Validation
Output is validated against a strict schema — quantities, step ordering, nutrition ranges, and tag enums are all checked before anything reaches the database.
Intelligent Meal Planning
Auto-filling a week of meals that hit your nutrition targets while keeping variety high and respecting your preferences. Runs entirely server-side with zero external services.
User Recipes
Your cookbook
Nutrition Targets
Presets or custom
Opti-Plan Engine
YALPS (pure JS)
Your Week
3 meals × 7 days
What Opti-Plan Handles
Nutrition Targets
Set your daily calorie goal and macro split. Opti-Plan builds a week that stays on target.
Macro Presets
Balanced, High Protein, Low Carb, Lean/Cut — pick a preset or dial in custom ratios.
Variety Control
Keeps your week interesting — won't overload any single recipe. Empty slots are fine too.
Pre-Filled Slots
Already planned Tuesday's dinner? Opti-Plan works around your existing picks.
Architecture
YALPS
A pure JavaScript linear programming library with zero native dependencies. Lightweight enough to run inside a Convex action — no WASM compilation, no external services, no API keys.
Server-Side Execution
The engine runs as a Convex action with full access to the user's recipe library and nutrition data. Results are written directly to the meal plan table.
No External Infra
Zero new services to deploy or pay for. YALPS is a single npm dependency bundled into the existing Convex backend — no additional API keys or third-party dependencies.
Real-Time by Default
Convex isn't a REST API you poll every 30 seconds. It's a reactive document database — when data changes server-side, every subscribed SwiftUI view updates instantly over a persistent WebSocket. No pull-to-refresh. No loading spinners. No stale state.
SwiftUI View
WebSocket
Live subscriptions
Convex Functions
Queries · Mutations · Actions
Document DB
8 tables
users
Profiles & preferences
userRecipes
All user recipes
sourceRecipes
URL dedup cache
cookingSessions
Session lifecycle
suzeStates
Evolution stats
cookbooks
Recipe collections
mealPlans
Weekly calendars
shoppingLists
Ingredient lists
Reactive Subscriptions
Views subscribe to queries that re-execute automatically when underlying data changes — no manual refresh needed.
Optimistic Updates
Mutations apply instantly on the client and reconcile with the server for a snappy native feel on any connection.
Serverless Functions
Backend logic as TypeScript functions with automatic scaling and zero cold starts.
Native Down to the Pixel
SwiftUI on iOS 26 with Apple's Liquid Glass design language. Not a web view in a native wrapper — every screen, animation, and transition is built with platform-native APIs. The app works offline via SwiftData cache, syncs when connected via Convex subscriptions, and adapts its entire color theme in real-time based on the mascot's evolution.
Liquid Glass Design
Apple's new material system — translucent surfaces, depth effects, and dynamic color adaptation throughout every screen.
Domain Services
Dedicated service files per domain — recipes, cooking sessions, stats, imports, cookbooks, meal plans — with clear separation of concerns.
Evolution Theming
The entire app theme shifts in real-time based on the mascot's evolution — colors, accents, and animations adapt dynamically.
No Passwords. No Payment Data. No Liability.
Auth0 handles identity via OAuth 2.0 with Google and Apple sign-in. RevenueCat handles commerce via App Store subscriptions. SuzeChef never touches credentials or credit cards — both services sync to Convex server-to-server. RevenueCat is free until $2,500 MRR. Auth0 is free until 25,000 MAU.
Auth0 — Identity
User
Google or Apple
Auth0 Universal Login
OAuth 2.0
JWT → Convex Session
Authenticated context
RevenueCat — Commerce
App Store Purchase
INITIAL / RENEWAL / CANCEL
RevenueCat Webhook
Server-to-server
Convex Feature Gate
Free vs. Pro entitlement
What makes this exciting: RevenueCat's architecture supports consumable in-app purchases alongside subscriptions. That means we can expand into a virtual currency system — think cosmetic items for Suze, bonus evolution skins, or extra import credits — all managed through the same webhook pipeline without building a payment backend from scratch.
Built to Ship. Priced to Scale.
The total per-recipe cost is under a penny. The entire backend runs for less than a coffee per month. Every free tier was chosen deliberately — Auth0, RevenueCat, and on-device OCR cost nothing until scale demands it. This isn't optimized for a demo. It's optimized for 10,000 users.
Security Posture
TLS encryption on all data in transit — client, backend, and third-party services
Data encrypted at rest in Convex with automatic key rotation
OAuth 2.0 — zero stored passwords, iOS Keychain for all tokens
On-device OCR — photos never uploaded, images never leave the phone
Rate limiting on import and AI endpoints to prevent abuse
No PII sent to AI — only raw recipe text reaches the model
GDPR and CCPA compliant with full account deletion
Webhook signature verification on all payment events
Unit Economics
AI Parsing (OpenRouter)
per parse — cached duplicates are free
ScrapeCreators
generous free tier for early growth
Convex Backend
pay-as-you-go, scales with usage
Auth0
up to 25,000 MAU
RevenueCat
until $2,500 MRR
On-Device OCR
Apple Vision framework — zero API cost
The Margin
Per-recipe cost: ~$0.001. Subscription: $9.99/mo.