Skip to main content

← Back to Journal

The food tab grew up, and Product Hunt sent friends

Most of this week disappeared into Fazon. The food tab started Monday as an empty picker; it ended Saturday with search, custom foods, meals, favorites, per-item edit, and a CDN-backed catalogue refresh pipeline. Five PRDs and a follow-up — more than any week of the project so far, and probably more than any week should reasonably contain. (If my boss is reading this: the Agent Dashboard workflow runs itself — I was not actually working on Fazon all week.) The shape of those days, roughly in order:

DayWhat landed
2026-05-18 → 20PRD-006 — Food picker + Food detail + custom foods. All / Recents tabs, BM25 + frequency-boost ranking over a ~30k-row SQLite catalogue, Create-new-food sheet, Quick calories shortcut, mode-aware gradients across four picker surfaces.
2026-05-20 → 21PRD-007 — Meal builder. MealBuilderView, quantity editor, protein-progress card, ingredient-add picker mode, locale-aware quantity formatting, 26 localised strings.
2026-05-21 → 22PRD-008 — Favorites + My meals + favorite star. 4-tab picker, star pill on Food detail, long-press + swipe Remove-from-favorites with undo, FavoriteFood schema and two lightweight migrations, read-mode meal detail with Log / Edit / Delete.
2026-05-22 → 23PRD-009 — Per-item edit + delete on Food log rows. Closes the gap PRD-006 left behind (more on that below); ADR-007 picked append-then-soft-delete.
2026-05-23 → 24PRD-010 — Catalogue refresh pipeline. Python emit + manifest + signing on one side; an iOS 11-stage refresh pipeline plus Settings → About → Data sources on the other. Nordic high-protein overlay shipped with it.
2026-05-24PRD-010b — deferred resume-body + catalogue-release CI workflow split out from PRD-010's R5 refactor.

The interesting moment in the middle was PRD-009. PRD-006's picker is append-only by design — you cannot unsay "add yogurt" by tapping back through the picker — and PRD-005's MealRow UX explicitly forbade swipe-to-delete on the row itself. Those two decisions, each correct on their own, combined to leave per-entry removal with no surface anywhere. That kind of gap is only visible after a few PRDs have stacked on top of each other; the picker spec and the meal-row spec do not contradict in isolation, but they share a contract neither one quite sees. ADR-007 picked append-then-soft-delete so the audit history stays append-only and the user still gets the edit/delete shape they expect. The expansion sheet that came out of it is, quietly, the cleanest surface in the food stack now.

The other thing worth noting is that the vision picked up explicit GLP-1 support mid-week. Fazon's alternating maintenance and active phases happen to be exactly the shape GLP-1 users want around dose ramps, and not naming that audience early would have been a polite omission. The methodology did not change; the doc finally caught up with who it actually serves.

The Today screen now reads a fully-populated food log on simulator. Next on the workbench is the start of the active-phase coaching loop — phase definition, daily check-ins, end-of-phase summary.

Product Hunt: I came for users, I left with friends

Last weekend I posted My Next on Product Hunt for the first time. The apps have been on the App Store since 2026-04-09; the Product Hunt run was the formal introduction. Family-level submission (Todo + List + Note), weekend slot, locked tagline, production-grade cover image. The whole /marketing playbook ran end-to-end.

Result: one new install across the family.

I will let that breathe for a second.

What did arrive in numbers — quickly, urgently, with elaborately friendly opening lines — were marketers, SEO consultants, growth experts, design agencies, and a smaller cohort of "AI-powered" launch services offering to ten-x my Product Hunt presence next time. Some had clearly read the post. Most had not.

It is the thing people keep saying, and it keeps being true: building is the easy part now; distribution is still hard. I have not cracked it. I will keep trying. Maybe I should actually reply to one of those emails and see what happens.

Back to it.