Isaac Mineo

Live · Web & App Store

RecipeFix

Make a recipe fit your diet, ingredients and nutrition goals without starting from scratch.

For Home cooks with a diet, an allergy to plan around, a nutrition goal or a short ingredient list, who still want the dish they had in mind.

RecipeFix adapted Dairy Free Creamy Lemon Chicken Pasta for four servings: 658 calories, 34g protein, a Dairy-Free tag, Cook and Save actions and 7 checks passed.
The adapted recipe, its nutrition, and the checks it passed.

Find a dish, adapt it for your needs, and take it all the way to dinner.

The problem

A substitution can change texture, cooking time, nutrition and even the identity of the dish. A tool that swaps words without reconsidering the recipe can leave a technically compliant but disappointing meal. Searching, adapting, shopping and remembering what was cooked also tend to happen in disconnected tools.

The goal

RecipeFix helps people cook the food they actually want while working around ingredients, dietary preferences and nutrition targets. It adapts the ingredients and the method together instead of returning a list of unrelated substitutions.

The product

01Screen · Phone

Tell it how you eat: restrictions and goals come first.

App Store 2.5.1 screen set with demo recipes, 21 September 2026. Cropped to the app screen; the store caption above it is not shown.

02Screen · Phone

The adapted recipe, its nutrition, and the checks it passed.

App Store 2.5.1 screen set with demo recipes, 21 September 2026. Cropped to the app screen; the store caption above it is not shown. The free-tier save counter is visible.

03Screen · Phone

Every swap keeps the original line and says why it still works.

App Store 2.5.1 screen set with demo recipes, 21 September 2026. Cropped to the app screen; the store caption above it is not shown.

04Screen · Phone

Plan: dinners on the days they will be cooked.

App Store 2.5.1 screen set with demo recipes, 21 September 2026. Cropped to the app screen; the store caption above it is not shown.

05Screen · Phone

Shop: one list for the week, traced back to each recipe.

App Store 2.5.1 screen set with demo recipes, 21 September 2026. Cropped to the app screen; the store caption above it is not shown.

06Screen · Phone

Cook: one step at a time, with that step's ingredients.

App Store 2.5.1 screen set with demo recipes, 21 September 2026. Cropped to the app screen; the store caption above it is not shown.

Interactive demo Computed in your browser

Find, fix or create

Choose what the recipe has to fit and what a search found. RecipeFix's decision layer runs here and says whether to use a recipe, adapt one, or build a new one.

It has to fit

The search found

Found

We found a recipe that already fits what you asked for.

Use this recipe

Chosen: Seitan Steaks

  1. Seitan Steaks Go ahead

    This already fits

  2. Tomato Soup Go ahead

    A good recipe to adapt

    dairy-free: "heavy cream"

This runs RecipeFix's deterministic decision layer in your browser. It does not generate a recipe and calls no model. The layer is ported from RecipeFix's source for five diets (gluten-free, dairy-free, vegan, vegetarian, nut-free) and ingredient exclusions, and checked against RecipeFix's own decision tests. The dishes are synthetic test recipes.

Every outcome, as text

With JavaScript, this runs RecipeFix's decision layer on your choices. For the starting request it decides:

Dairy-Free, with Tomato Soup and Seitan Steaks found → Found: We found a recipe that already fits what you asked for.

Where this comes from

recipe-fix @ 7c56256

  • src/lib/foodDecision.ts:83-173 (rankForDecision, decideCreate)
  • supabase/functions/_shared/adaptation-feasibility.ts:101-168 (assessCandidateFeasibility)
  • supabase/functions/_shared/recipe-candidate.ts:291-493 (evaluateCandidate, rateAdaptability)
  • supabase/functions/_shared/diet-compliance.ts:559-632 (findDietViolations, presence diets)
  • supabase/functions/_shared/food-terms.ts:102-333 (term lists used by those diets)
  • supabase/functions/search-recipes/index.ts:140-195 (evaluation → decision wiring)
  • Portfolio port: src/lib/labs/recipefix/ · parity tests: scripts/recipefix-port.test.ts

01 · System

How it fits together

One feasibility verdict, computed on the server and shown everywhere.

Select a part to see what it is responsible for and what it connects to.

Every part and connection, as text
React client Interface

Web app and iOS wrapper. Displays the server's verdict rather than recomputing it.

→ Find / Fix / Create: request and goals

Browser extension Interface

Reads the recipe on the page and hands it to the same adaptation path.

→ Find / Fix / Create: recipe on the page

Find / Fix / Create Gate

Ranks cookbook and external candidates, prefers a fitting recipe, adapts next, creates last.

Trade-off: An honest stop is less gratifying than always returning a recipe.

→ Edge Functions: adapt or create

→ React client: feasibility verdict

Edge Functions Service

Privileged adaptation and integration work, in Deno.

→ Adaptation model: coordinated rewrite

→ Postgres: saved recipe

Adaptation model External

Rewrites ingredients and method together when an adaptation is chosen.

Postgres Data

Cookbook, plans and cook history, protected by row policies.

Trade-off: Saving and cooking are separate facts, so recording a cook is two writes, not one transaction.

MCP tools Interface

An assistant can mark a recipe cooked; it writes the same cook-history event.

→ Postgres: cook event

The React application uses React Router and TanStack Query over Supabase authentication and Postgres. Privileged adaptation and integration work lives in Deno Edge Functions; database policies protect user-owned records. Pure TypeScript modules express candidate fit and the Find/Fix/Create decision, while the client displays the canonical server feasibility verdict rather than recomputing it. The iOS product has a separate native-wrapper repository, released on its own schedule, so the web and native versions can temporarily differ. A move to an owned backend is documented in the repository; the architecture described here is the Supabase one.

02

What it does

  • Find before generating

    The decision module ranks known cookbook and external candidates, prefers a fitting recipe, considers an adaptation next, and creates only when neither is suitable. Unknown evidence is not promoted to a positive fit.

  • Explain feasibility

    The shared verdict distinguishes a straightforward adaptation from a major transformation, conflicting goals, insufficient evidence and a request the system should not claim it can satisfy.

  • Remember actual cooking

    Cook sessions record a completed cook separately from saving a recipe. Servings, plan association, source, notes and a later rating belong to that event, including an unsaved recipe.

  • Connect kitchen workflows

    The application joins a cookbook, planning and cooking history. The MCP mark-recipe-cooked tool writes a cook-history event as well as updating the recipe recency field.

03

Built with, and why

Client

The web product, which the iOS app wraps.

React · TypeScript · Vite · TanStack Query

Backend

Accounts, owned records and privileged server work.

Supabase · PostgreSQL · Deno Edge Functions

Integration

Getting a recipe in, changing it, and letting assistants act on it.

Recipe extraction · AI adaptation · MCP tools

04

Decisions and trade-offs

Preserving the dish while changing it

Approach

A canonical feasibility result is shared across discovery and adaptation surfaces. The product can recommend a similar dish or ask the person to prioritize a goal instead of forcing every request through conversion.

Trade-off

An honest stop or clarification is less immediately gratifying than always returning a recipe; it avoids disguising an entirely different dish as a small fix.

Separating intent from outcomes

Approach

The saved recipe library and completed-cook diary represent different facts. Later feedback amends a cook rather than deliberately treating a rating as another cook.

Trade-off

The browser and Deno writers have separate adapters and a denormalized recency field. That makes consistent error handling and retries a cross-surface concern rather than a property of either adapter alone.

05

Check the work

Links checked 21 September 2026

Ask about RecipeFix

Answers quote the source notes and cite them.