Iteration 4 · five recipes · 2026-09-08

Recipe Journey Prototype

Discovery is back — search, categories, bookmarking from a card, and a visible sign that one recipe holds seven looks. Editing a saved version now updates that version instead of piling up near-duplicates. Copy comes before customise.

The thing worth trying. Save a version, go to Mine, press Edit, change something, and press Save changes — you should still have one version, not two. Then press Save as new version and you should have two. Reset prototype starts over.
01

What changed

Your pointWhat it is now
The editor exposes its machineryThe infographic editor opens on the seven looks, Colors, and one place to add your own instructions. Tone, texture, lighting, composition, typography, categories and the closing wording are folded away. One prominent Add block; the between-block seams became hairlines. The four simple recipes stay one editable block.
Discovery disappearedSearch, three outcome categories, Save on every card, and a stacked badge showing the infographic holds seven styles. Only with an example still filters.
Editing a version made another oneOpening a version names it at the top of the editor. Save changes updates it; Save as new version forks deliberately. Entering from a recipe offers only the fork, because there is nothing to update.
Customise outranked copyCopy prompt is primary on the recipe page, Make my version beside it. The attach-in-your-AI-tool line now follows the copy actions into Mine.
Priorities were wrongYou were right. The storage lie is fixed at the source — store.save returns false and the interface says the change could not be stored. A deleted block now counts as a change. Phone inputs are 16px so iOS will not zoom, and every phone control clears 44px. Row height is not treated as a defect.
A third real example. Scanning all 10,980 items rather than the 498 recipes found 106 posts carrying images but only seven with an extracted prompt. One usable render came out of it: the pie chart from the same post as the boat, a different outcome and previously unused. Three of five recipes now carry a real example instead of two of four.
One provenance note. The chart prompt was never captured as text — I read it off the screenshot in the source post. Transcribing legible text is reading rather than reconstructing, but it is not the same provenance as the others, so its recipe page says so.
02

Verified by execution

SuiteCoversResult
Document modelserialize(parse(t)) === t plus a 400-case fuzz33/33
Version lifecycleSave changes updates in place; Save as new version forks; reopening restores identity, blocks and style; storage failures return false and name the cause30/30
Journey regressionThe whole v3 path re-run in Firefox against this build29/29
The five changesSearch filters, categories filter, card save works, seven-style badge, copy is primary, Save changes does not fork, storage failure is stated18/18

The last two suites are mine, run against the published file rather than reported by the agents that built it. Two findings in their list turned out to be stale — the phone panel order and a claim that added text lands at the end of the prompt. It lands at block 2 of 20, 8% in, and renders as the first field, so the editor and the prompt agree.

03

The prototype

Both frames live on one state object.

Desktop
Preparing the prototype…
Phone · 390
Preparing the prototype…
04

Known and not fixed

Eleven problems found; three majors fixed and re-verified. These 6 remain.

AreaWhat is still wrong
The five changes actOn phone the per-seam insert control is a permanent button, which is the pattern change 1 asked to replace. `.gap-b` is opacity .55 at 44x44 on every seam: 1 visible on r3's first screen, 11 visible once the three sections are open (measured phone_gapb_all_open 11, opacity ["0.55"]), and 2 on r1's single-block editor. Desktop behaves as s
The five changes actText added from the prominent Add action, or from a seam inside an opened section, renders detached from where it actually sits in the prompt. Verified: after clicking "+ Add your own instructions" on r3 the typed block is the LAST block in the draft (blocks_after_type ends ["MY LINE ONE","","MY LINE TWO"]) but is drawn second in the prim
The five changes actAdding free text and then removing it does not return the prompt to the original: one trailing newline is left behind (serialized == r1.prompt + "\n"), because addFree inserts a separator block that removeFree does not reclaim. The change report is honest about it ("Show 1 change" / "Spacing changed") and Restore original clears it, but t
The five changes actThe phone header still reads "Make my version" while a saved version is open, so the two frames disagree about what is being edited (desktop h1 reads "Edit my version"; the phone body idbar does say "Your version | Named V | You are editing this saved version, not the catalog recipe.").
Truthfulness"Remove this text? It is not kept anywhere else." is false whenever a saved version is open in the editor. Proved by execution (/tmp/ui4/vtruth/t10_notkept.py): added "PRECIOUS NOTE" to r1, saved it as a version (idbar "Your version | My version 1"), removed the block through the confirmation, then went to Mine -> "SAVED VERSION STILL HOL
TruthfulnessNot a false statement, but an incomplete one. Explicit save sites always report failure via persistTell, verified. Background saves (typing, adding or removing a block, navigating, switching style) go through persist(), which warns once per failure streak and then stays silent; the toast itself clears after four seconds. In t1_storage.py,
The one to weigh. "Remove this text? It is not kept anywhere else." is false while a saved version is open — the text is still in the saved version until you press Save changes. It is a small string, but it is the app telling you something untrue about your own work, which is the category you ranked first.
05

What still needs a person, and an image

Everything above is a machine driving the app the way I predicted someone would. The test you named — choose a recipe, understand its inputs, get a useful result in an AI tool, come back to the saved version — is the one that has not run, and it is the one that decides whether any of this is worth building.

The blocking gap for it is the anime recipe. Its journey is complete and it has no example image, because the corpus has none and I cannot produce one. It is also the recipe that best represents the common case — bring your own photo — so it is the first image worth making. The caricature recipe is second. With those two produced, all five cards carry a real example and discovery finally shows what it is meant to.