Community

Share your best AI workflow. We could show it to 2M+ people.

Every day, we feature the community's top-voted AI workflow in The Rundown newsletter. One post will put you on the radar of top founders, hiring managers, and operators across the industry.

Welcome!

Turn Recipe Cards Into Structured Meal Plans With AI

Trivet is a recipe box for one household. I can photograph a recipe card—handwritten, printed, or a PDF—and get back a structured recipe with ingredients, quantities and units, numbered steps, prep, cook and rest times, oven temperature, and equipment. I can plan a dinner for each night of the week, and the shopping list builds itself: quantities are combined across meals, grouped by aisle, and texted to my phone. I built it because my family’s recipes were scattered across index cards in a drawer, including decades-old handwriting and cards from defunct meal services. Typing everything in was never going to happen. The entire AI workflow uses one model call. The photo is sent to Claude Opus as an image block with a Zod schema attached as the structured output format, so the response is already typed and validated—there’s no JSON parsing, retry loop, or “please respond only with valid JSON.” The extraction schema is intentionally looser than the database schema, with nullable numbers throughout. If a card has no cook time, the model returns `null` instead of inventing a plausible-looking value. The load-bearing instruction in the system prompt is that a missing cook time is a small gap, while an invented one is wrong every time somebody cooks from it. Nothing saves automatically. The extraction first appears in an editable review screen. The model also returns a confidence field, so a blurry card or a page that is not a recipe gets flagged instead of silently becoming a bad entry. Step-by-step: 1. I built a Next.js app with Postgres via Prisma and deployed it on Vercel. 2. I made the upload accept an image or PDF. I check the file size before encoding because the API limit applies to base64, which inflates the bytes by about a third; a 7 MB raw ceiling is the real limit. 3. I defined the extraction shape in Zod and sent it as the output format instead of describing JSON in the prompt. 4. I described fields in the schema. For example, `.describe("Unit as written, e.g. 'tbsp'")` does more than a paragraph of instruction. 5. I render the result into a review form and save it only when the form is submitted, never immediately after the model responds. 6. I store quantities as numbers with separate units so servings can be scaled and ingredients can be combined across recipes later. This is the decision that cannot be retrofitted easily. 7. I sum ingredients across planned meals, round at the end, group them by aisle, and send the list via Twilio. The pattern is not limited to recipes. Anything I would otherwise have to retype—receipts, notes, or forms—can use the same three moves: a schema looser than the database, a model told that `null` is better than a guess, and a review screen between the response and the database write.

Tools used
Industry
#familymeals#familyrecipes#grocerylist#heirloomrecipes#mealplanning
1