2026-03-18 — Dinly: from scaffold to working MVP in one session
What shipped today
Dinly went from an empty Next.js scaffold to a fully functional family meal planning app in a single session. The entire 4-phase MVP spec was implemented: household management, recipe library, weekly voting, ranking engine, meal plan builder, shopping list, and calendar export. Every feature was built, tested in the browser, and verified end-to-end with real data.
The foundation phase delivered Supabase auth with household creation, an 18-table database schema with row-level security, family member CRUD with a 5-step onboarding wizard (dietary rules, ingredient preferences, dish preferences), a recipe library with Mela import support, and a dark-mode app shell with shadcn/ui sidebar navigation. A critical RLS chicken-and-egg bug in household setup was discovered and fixed using an admin client pattern.
The weekly voting phase added cycle management (draft → voting → closed → finalized), candidate recipe selection from the library, per-member voting with yes/maybe/no plus reaction toggles, and a deterministic ranking engine that scores recipes using vote signals, preference data, dietary constraints, and cook history. The ranking engine produces explainability metadata and groups results into best bets, safe choices, divisive, and avoid buckets.
The plan and outputs phase completed the product loop: a meal plan builder with a 7-day grid and ranked recipe sidebar, an auto-generated shopping list with interactive checklist (check off, add items, grouped by category), and .ics calendar export with dinner events at the household’s configured time and timezone.
Polish delivered a settings page, vote flow improvements (progress bars, skip confirmation, success animation), enriched results with expandable score breakdowns and household preference summaries, recipe cook history on detail pages, and dashboard nudges for incomplete onboarding.
After the feature work, 3,805 recipes were imported from a real Mela .melarecipes export with zero failures. 93 recipe images were extracted and uploaded to Supabase Storage. Original Mela creation dates were preserved in a new source_created_at column. 2,019 recipes were backfilled with cook time data parsed from human-readable text (“20 minutes”, “1 hour 30 minutes”). The recipe library got full filter/sort: search, date filter, cook time filter, source filter, photo filter, multi-select category chips with frequency counts, 6 sort options, and pagination across all 3,808 recipes.
Base UI console errors from the render prop pattern were eliminated by creating a LinkButton component and replacing all <Button render={<Link>}> patterns across 16 files.
Completed
- #1 Set up Supabase, shadcn/ui, and app shell
- #2 Create full database schema with RLS policies
- #3 Build auth flow with household creation on first login
- #4 Build family member management UI
- #5 Build family member onboarding wizard
- #6 Build recipe model and Mela import pipeline
- #7 Build recipe library UI
- #15 Build weekly cycle CRUD and status management
- #16 Build candidate recipe selection UI
- #17 Build voting UI for family members
- #18 Build ranking engine with explainability
- #19 Upgrade dashboard to weekly planning hub
- #25 Build meal plan builder with day assignment
- #26 Build shopping list generation and interactive checklist
- #27 Build .ics calendar export for finalized meal plans
- #31 Add household settings page
- #32 Improve voting flow UX
- #33 Enrich results page with score breakdown
- #34 Show recipe cook history on detail page
- #35 Enhance dashboard with activity trends and onboarding nudge
Release progress
- Phase 1: Foundation — 7/7 closed
- Phase 2: Weekly voting — 5/5 closed
- Phase 3: Plan and outputs — 3/3 closed
- Phase 4: Polish — 5/5 closed
- March 2026 — 0/0 (empty milestone)
All 4 phases complete. 20 issues closed, 0 open.
Carry-over
- Paul mentioned wanting a trial plan + Stripe integration — not yet scoped or decomposed
- Python engine question deferred — TypeScript handles everything for now, revisit if ranking needs experimentation
- Supabase default 1000-row limit was worked around in recipes page but other queries may hit it as data grows
Risks
- RLS policies use deeply nested subqueries (shopping_list_items → shopping_lists → meal_plans → weekly_cycles → households) which fail with the authenticated client. Shopping list and some other actions use admin client as workaround. Should audit all server actions for RLS issues before inviting real users.
- No email confirmation flow tested — Supabase email was manually confirmed via admin API. Need to either disable email confirmation or wire up a proper email provider before launch.
- 3,808 recipes are sent as props to the client-side search component. Works fine now but will degrade with larger libraries. Consider server-side filtering/pagination for scale.
Flags and watch-outs
- Base UI (not Radix) was auto-selected by shadcn init — uses
renderprop instead ofasChild. Documented in DECISIONS.md. New components should userenderfor polymorphism andLinkButtonfor navigation buttons. proxy.tswithproxyexport (notmiddleware) is the Next.js 16 pattern. Supabase SSR docs still referencemiddleware.ts.- Shopping list generation uses admin client to bypass RLS. Auth is still checked via
requireHousehold()but the actual DB queries bypass row-level security.
Next session
/featurefor Stripe trial plan integration — Paul requested this during the session- Deploy to Vercel — the app is ready for a preview deployment
- Disable Supabase email confirmation (or configure a real email provider) so new users can sign up without manual admin intervention
- Audit server actions for RLS compatibility — identify which ones need admin client and which can use the authenticated client safely
- Consider adding Paprika import support (spec mentions it as second priority after Mela)
Why customer tools are organized wrong
This article reveals a fundamental flaw in how customer support tools are designed—organizing by interaction type instead of by customer—and explains why this fragmentation wastes time and obscures the full picture you need to help users effectively.
Infrastructure shapes thought
The tools you build determine what kinds of thinking become possible. On infrastructure, friction, and building deliberately for thought rather than just throughput.
Server-side dashboard architecture: Why moving data fetching off the browser changes everything
How choosing server-side rendering solved security, CORS, and credential management problems I didn't know I had.
The work of being available now
A book on AI, judgment, and staying human at work.
The practice of work in progress
Practical essays on how work actually gets done.
The day we shipped two products and the agents got bored
112 issues across 12 projects. Two new products went from nothing to code-complete MVP in single sessions. And the most interesting signal wasn't the speed — it was the scout that came back empty-handed.
The org chart your agents need
The AI community is reinventing organizational design from scratch — badly. Agencies figured this out decades ago. Competencies, not clients. Briefs, not prompts. Lateral communication, not hub-and-spoke. The answers are already there.
AI agents need org charts, not pipelines
Every agent framework organizes around tasks. The agencies that actually work organize around competencies. The AI community is about to rediscover this the hard way.