Create recipes, suggest meals from ingredients, and handle dietary substitutions.
Create recipes, suggest meals from available ingredients, handle dietary restrictions and conversions, explain cooking techniques, recommend dish pairings, and repurpose leftovers. All output is delivered as structured data in a full-stack web application with database persistence.
User wants a recipe for a specific dish ("make me a mushroom risotto")
User has ingredients and wants meal ideas ("what can I make with chicken, rice, and tomatoes?")
User needs recipes for dietary restrictions ("I need a gluten-free dinner recipe")
User wants to scale a recipe up or down ("scale this to 8 servings")
User wants meal prep or batch cooking plans
User wants recipes created for a meal plan (even if the plan was generated by the meal-planner skill)
User asks to "fill in" or "build out" recipes referenced in a meal plan
User asks about ingredient substitutions ("I don't have buttermilk, what can I use?", "make this dairy-free")
User asks about cooking techniques ("how do I deglaze a pan?", "what's the right way to sear meat?")
User wants to convert an existing recipe ("turn this into a vegan version", "make this keto-friendly")
User asks what pairs well with a dish ("what goes well with risotto?", "what side dish for grilled chicken?")
User wants to repurpose leftovers ("I have leftover risotto, what can I do with it?")
Overlap with meal-planner: The meal-planner skill designs what to eat and when. This skill creates the recipes themselves — structured data with ingredients, steps, timers, nutrition, and images. If a meal plan references meals that don't have full recipes yet, use this skill to create them and link via recipeId.
All recipes are stored in a database and served through an API, displayed in a React web app. This means:
Recipes persist across conversations — the user's collection grows over time
New recipes are added via API calls; the frontend renders them automatically
No hardcoded components per recipe — recipes are structured data, not custom React components
recipes table:
id, title, description, heroImage
prepTime, cookTime, totalTime, difficulty
baseServings
ingredients (jsonb): array of { name, qty, unit, stepIndex[], shared? }
steps (jsonb): array of { title, text, timerSeconds?, timerLabel?, image? }
prepTimeline (jsonb): array of { label, start, end, type }
nutrition (jsonb): { calories, protein, carbs, fat } per serving
tags (text[]), allergens (text[])
notes (jsonb): array of { label, text }
createdAt
meal_plans table:
id, title, description
days (jsonb): array of { label, meals: [{ slot, recipeId?, mealName, mealDescription, time, nutrition }] }
shoppingList (jsonb): array of { item, qty, usedIn[] }
prepTips (jsonb): array of { label, text }
prepTimeline (jsonb): array of { label, start, end, type }
createdAt
Hero image
Metadata bar (prep/cook/total time, difficulty, servings adjuster)
Smart-scaling ingredient list with checkboxes
Step-by-step instructions with inline images
Prep timeline (visual Gantt-style)
Nutrition panel (per serving, updates with serving size)
"Start Cooking Mode" button
Notes section (storage, substitutions, allergens)
One step at a time, large readable text
Built-in countdown timers
Step images inline
Prev/Next navigation
Wake lock to prevent screen dimming
Day-by-day layout with meal slots
Links to individual recipes
Weekend prep session timeline
Combined shopping list with checkable items and cross-references
Nutrition totals
GET /api/recipes — List all recipes (supports ?search= and ?tags=)
GET /api/recipes/:id — Get single recipe
POST /api/recipes — Create recipe
PUT /api/recipes/:id — Update recipe
DELETE /api/recipes/:id — Delete recipe
GET /api/recipes/dashboard — Summary stats
GET /api/meal-plans — List meal plans
GET /api/meal-plans/:id — Get single meal plan
POST /api/meal-plans — Create meal plan
DELETE /api/meal-plans/:id — Delete meal plan
Write the OpenAPI spec with all endpoints above
Run codegen to generate React hooks and Zod schemas
Write DB schema and push to database
Create the web app artifact and launch design subagent
Implement API routes
Seed the database with user's requested recipes (structured data, not components)
Generate hero images for each recipe using generateImage
Test end-to-end
When the user requests new recipes in future conversations:
Generate the recipe data (ingredients, steps, nutrition, etc.)
Generate a hero image
POST the recipe to the API
The frontend automatically displays it in the collection
No new components need to be written. The recipe is just data.
Generated hero image — Use generateImage to create a photorealistic hero image. Style: overhead or 45-degree angle, natural lighting, styled surface.
Step images — For key technique steps, generate images showing what that step should look like.
Serving size adjuster with smart scaling — Dynamic recalculation with intelligent unit conversion:
const unitUpgrades = {