What actually changed.
Chronological. No PR sheen. Regressions are owned publicly. If you want the narrative version, /blog has the monthly roundups.
- 2026-08-08FIXEDChangelog fabrication audit
Rebuilt this file to reflect only shipped code, dated against actual commits. Removed 40+ entries describing events that had not happened (a PBC filing, a ShareTheMeal partnership, monthly WFP receipts, a million-meals milestone, specific incident post-mortems). The whole point of a receipts-first company is that its receipts are real.
- 2026-08-08SHIPPEDTHE LOOK — definitive visual overhaul
Warm-dark rebase across the app. Old cold near-black scale (#0B0A0C / #121014) replaced with a warm umber scale (#0F0D10 → #14110F → #17130F → #1B1611 → #1E1913). Ambient center-light layer. Four signature moments (send ripple, streaming shimmer, meal-toast rebuild, theme cross-dissolve). Kill list: Constellation/Field art removed from chat canvas. Written into DESIGN.md as §18 / The Look.
- 2026-08-08SHIPPEDMarketing expansion — six pages substantially deeper
Manifesto rebuilt as 10 chapters + 4 addenda. Principles rebuilt as 13 principles with per-principle receipts. Docs expanded from 10 to 20 pages in three categories. Learn expanded from 16 to 23 guides in five tracks. Help expanded from 34 to 48 articles across 8 categories (added Features and Troubleshooting). ~35,000 new words of first-party product writing.
- 2026-08-07FIXEDFeature audit — 69 features verified end-to-end
New grand-tour self-test provisions a real user via admin.createUser + signInWithPassword, walks 69 features through the deployed API with a real session cookie. Uncovered and fixed: chat search returning 500 (PostgREST embed-filter collision on the messages.chats join); sign-out-all returning 500 (wrong signOut signature — admin.signOut takes a JWT not a user id); ⌘K 'Share this chat' event had no listener; composer chip toggles silently no-op'd before first message on new chats.
- 2026-08-07SHIPPEDShare chat modal + header button
The share endpoint existed but no UI reached it. Added ChatShareModal listening for ladle:share-current; wired the ⌘K palette action; added a SHARE button in the chat header (visible when a chat has at least one turn).
- 2026-08-07FIXEDComposer toggles now apply on the first turn
SEARCH / THINK / MODEL / STYLE flipped before the first message on a new chat used to no-op silently (the client bailed at `if (!currentChatId) return`). Fixed: the send route now accepts the four flags in the request body on new-chat creation and PATCHes them onto the fresh chats row before the first send reads them back.
- 2026-08-07SHIPPEDI-series: dedicated flagship surfaces
/design becomes a real gallery page (live-iframe hero, own-work grid with IntersectionObserver, starter briefs, recent design-chats rail). /artifacts becomes its own surface with type-chip filter + grid/list toggle. /plans and /give move in-app (marketing pages remain for visitors).
- 2026-08-07SHIPPEDSetting the Table — 10-step onboarding
New first-run flow: name, role, intents, style (with live-streamed samples), theme (with mid-flow re-render), context + memory consent, language (conditional), the cause split, the receipts moment, plan interest, table closer. Every answer writes to a real profile field. Seeded role memory shows up in the standard Memory settings.
- 2026-08-07FIXEDArtifacts + Design mode incident — root cause + fix
Artifacts hadn't been landing on prod (zero rows ever created). Two bugs: (1) client-side detect POST raced router.replace() on new chats, unmounting ChatSurface before the POST returned; (2) design turns exceeded the 90s maxDuration and the post-stream persist block never ran. Fixed: detection moved server-side (LADLE_ARTIFACT sentinel in the stream), maxDuration→300s, max_tokens=16K for design. Added a real-API-route + real-session E2E test suite.
- 2026-08-07CHANGEDCLAUDE.md self-test rule
Every self-test suite must include at least one end-to-end test per feature through the REAL API route with a REAL authenticated session (not service_role, not in-process function calls). Prior test suites passed while the artifacts feature was broken — that's the specific failure mode this rule prevents.
- 2026-08-07SHIPPEDDaylight theme compat layer
The theme was authored dark-first with hardcoded rgba(244,239,230,x) values inline. Tokens invert on daylight; inline literals don't. Added a CSS attribute-substring override sheet that catches every common ivory-alpha pattern under html[data-theme='daylight'] and remaps to ink-alpha equivalents. Daylight reads on every surface.
- 2026-08-06SHIPPEDH-series: furniture density + Daylight theme + languages + Design mode
Commit a6ae118. Adds chats.mode='design' with a dedicated system prompt, per-user theme + reduced-motion + response-language preferences via ui_prefs, and an English/Français interface dictionary.
- 2026-08-06SHIPPEDG.5: Kitchen panel (radical transparency) + Second Opinion
Commit a5665d6. Every assistant reply persists prompt_meta (base/style/memory/custom/project lengths, model, tier, routing reason, thinking budget, search state). Kitchen opens from the ⋯ menu on any assistant turn and shows the whole plate. Second Opinion: one click routes the reply through the OTHER tier for a verifier critique, stored on messages.second_opinion.
- 2026-08-06SHIPPEDG.4: project knowledge + voice dictation + usage meter
Commit 8497437. Files attached to a project are extracted (pdf-parse) and rendered into a 'Project knowledge' block in the system prompt with per-message filename citation. Web Speech API dictation in the composer. Usage counters (input/output tokens, search count) exposed at Settings → Usage.
- 2026-08-06SHIPPEDG.3: memory — user-owned, fully inspectable
Commit 674083d. memories table with per-user RLS. Manual add from Settings → Memory. Background extraction after every 10th assistant reply via a Haiku call. Every memory visible, editable, deletable. Never announced by the assistant. Off entirely via a single ui_prefs toggle.
- 2026-08-06SHIPPEDG.2: manual model override + extended thinking
Commit 2ad2e4a. Per-chat FAST/DEEP/AUTO override on chats.model_override. Extended thinking (Sonnet-only) on chats.thinking_enabled with a ~8K reasoning budget; the trace streams via a LADLE_THINKING sentinel and renders inside a collapsed 'Thinking…' block.
- 2026-08-06SHIPPEDG.1: conversation branching + temporary chat + shared links
Commit dfba9cb. Regenerate creates a sibling branch via parent_id + branch_index on messages. Active-leaf-per-chat persists so re-opening a chat restores the exact conversation. Temporary chats (?temp=1) skip persistence entirely. Public /share/:slug snapshots of the active branch; image attachments copied to a public bucket, PDFs represented as chips.
- 2026-08-06SHIPPEDF.6 polish: star action + response style + rail icons
Commits 126d9b1 + 5fe762a. messages.starred_at column + POST /api/app/messages/:id/star. chats.response_style + per-chat STYLE chip in the composer. Bottom-rail nav icons on the sidebar. Self-test verifies both round-trip through the real API.
- 2026-08-06SHIPPEDF.5: Library + response styles + palette destinations
Commit c06fdf7. /library first iteration (later refactored to Starred + Snippets during the I-series). Five response-style presets (Default, Concise, Thorough, Direct, Friendly) as directive tokens appended to the system prompt. ⌘K palette gains destinations for the new surfaces.
- 2026-08-06SHIPPEDF.4: scheduled tasks (Vercel cron)
Commit 6c0d6bb. Recurring prompts on daily / weekdays / weekly cadences at a chosen hour + timezone. Cron endpoint claims due tasks with a row-level lock (status='running'), executes a one-shot Anthropic call, persists user + assistant messages, computes next_run_at. Two target modes: dedicated_chat and new_chat_per_run.
- 2026-08-06CHANGEDF.4 downgrade: cron runs daily 09:00 UTC on Hobby
Commit 8b572b8. Vercel Hobby doesn't allow */15 * * * * cron schedules; downgraded to a single 0 9 * * * daily firing. Higher-frequency runs blocked on a Pro upgrade.
- 2026-08-06SHIPPEDF.3: web search with citations (Anthropic server-side tool)
Commit 3d39bc1. Per-chat SEARCH toggle wires the Anthropic web_search_20250305 tool with max_uses=3 per turn. Citations captured to messages.citations jsonb and rendered as a sources rail below the reply. Usage counted separately in usage_counters.searches_count.
- 2026-08-06SHIPPEDF.2: real image + PDF uploads via Anthropic vision / document
Commit 79fe9ca. Composer accepts images (PNG, JPG, WEBP, GIF up to 20MB) and PDFs (up to 32MB / 100 pages). Files land in the uploads bucket; the send route streams them as base64 into Anthropic vision / document content blocks. Attachments force HEAVY tier so Haiku doesn't get vision work.
- 2026-08-06SHIPPEDF.1: provider seam + Artifacts (right-side panel)
Commit a92efe9. First iteration of the artifact system: detection heuristic (code ≥40 lines / HTML doc / prose ≥600 words after a write-ask), artifacts + artifact_versions tables with RLS, right-side ArtifactPanel with per-type rendering. Provider abstraction (getProvider(name).streamChat(...)) allows a future OpenAI drop-in without touching the send route.
- 2026-08-06FIXEDA-gap: loud logging when instructions read fails
Commit 616ea3d. Silent-swallow was hiding cases where custom instructions failed to load. Every failed read now logs with the specific error and the user_id so the incident is diagnosable from server logs.
- 2026-08-06SHIPPEDA.4: shell polish, mobile drawer, Setting placements, feel pass
Commit 0d45282. Mobile responsive rebuild — sidebar becomes a drawer under 900px, layout collapses to a single column, composer respects env(safe-area-inset-bottom) so it never sits under the iOS home indicator. Setting glyphs placed at their earned moments.
- 2026-08-06SHIPPEDA.3: My Table flagship + full settings + onboarding v1
Commit abe9c33. /my-table is the personal impact ledger (renders a plate grid per subscribed cycle when the ledger has entries). Full settings shell (Account, Behavior, Appearance, Memory, Language, Data, Billing, Usage). First-run onboarding (later expanded to the 10-step Setting the Table flow on 2026-08-07).
- 2026-08-06SHIPPEDA.2: sidebar rebuild + search + projects + palette + shortcuts
Commit b97a444. Sidebar with pinned/recent chat groups and per-row menus. Chat search across titles + message content. Projects (create/rename/delete/instructions). ⌘K command palette. ⌘/ shortcut overlay.
- 2026-08-06SHIPPEDA.1: message-rendering pipeline + composer + empty-state moment
Commit 1ee0fc8. react-markdown + remark-gfm + Shiki-based code blocks with a custom LADLE theme. Composer input, attachments, autofocus, submit-on-Enter, Esc-to-stop. Greeting-based empty state on first-turn.
- 2026-08-05SHIPPEDM4.3: nav restructure + 12 bespoke pages
Commit 77779ed. Two-column dropdown panels with featured cards. New pages: /teams, /models, /api, /roadmap, /community, /partners, /education, /nonprofits, /security, /manifesto, /changelog, /meals-map.
- 2026-08-05SHIPPEDM4.2: /demo hub + core page expansions + ClosingCTA + ReceiptsTableWithFilter
Commit 0047558. Expanded core marketing pages with the reveal + closing-CTA components. The receipts-table-with-filter is the mock rendering of what a real receipts feed will look like once we have receipts to feed it.
- 2026-08-05FIXEDM4.1: keyword-match on word boundaries
Commit 873390f. The homepage hero composer was routing 'postgres' to the 'post/write' scenario because the keyword matcher was substring-based. Switched to word-boundary matching.
- 2026-08-05SHIPPEDM4.1: plan ladder + MealsPlanDemo + /pricing rebuild + hero composer
Commit 197fa56. Three plans (Ladle · Max 5x · Max 20x) with the meal-math for each. MealsPlanDemo interactive calculator. /pricing rebuilt with the plan cards + comparison matrix. The homepage hero becomes an interactive composer that maps free-typed input to eight scripted scenarios.
- 2026-08-05SHIPPEDM3.6: polish pass — easing + depth tokens + PWA + audit
Commit ae9bc5f. Global --ladle-ease token. Depth tokens for cards / overlays / hairlines. Micro-interaction polish across the marketing surfaces. PWA manifest and beforeinstallprompt capture.
- 2026-08-05SHIPPEDM3.5: content wave 3 + GEO/AEO infrastructure
Commit 8882ee9. sitemap.xml, robots.txt, llms.txt, llms-full.txt, dynamic OG images. Schema.org markup on every core page. Later commits will layer more content.
- 2026-08-05SHIPPEDM3.4: content wave 2 — 30 prompts + 24 help articles + 8 learn guides
Commit 1d22d5b. First large content push. Every entry Zod-validated; taxonomy indexed by slug.
- 2026-08-05SHIPPEDM3.3: content wave 1 — 11 use cases + 9 comparisons + 7 bespoke pages + 404
Commit c14f846. First real content. Use cases per role; comparison pages against ChatGPT, Claude, Copilot, and others.
- 2026-08-05SHIPPEDM3.2: 8 family templates + 1 seeded entry each
Commit a998e77. Registry pattern for content families (docs, help, learn, prompts, use-cases, comparisons, workflows, glossary). Every family gets a schema-validated seed.
- 2026-08-05SHIPPEDM3.1: content architecture + component library + nav+footer at scale
Commit da369ab. Foundation for the marketing content system: content/ registries with Zod schemas, marketing-page shell, sitewide nav + footer. First flagship-home iteration.
- 2026-08-05SHIPPEDPass 2: search screen + all 8 marketing pages + interactive My Table
Commit b0027b8. Second major visual pass. Search-answer surface, the eight core marketing routes, and the interactive plate toggle on /my-table.
- 2026-08-05SHIPPEDPass 1: full 1:1 build of the imported design
Commit 920bcf7. First implementation of the entire visual system from the LADLE v3 import — sidebar, chat surface, composer, marketing hero, footer.
- 2026-08-05SHIPPEDDESIGN.md as source of truth
Commit 909a0bd. Extracted every value from the imported design mockup into DESIGN.md — colors, typography, spacing, motion, component patterns. The rule since: DESIGN.md wins over prose; do not deviate.
- 2026-08-05SHIPPEDRepository scaffold — marketing + app shells + mock data layer
Commit 61326ef. First commit. Next.js 15 App Router. Marketing + (app) route groups. Mock data layer that lets the whole UI be developed in mock mode before the Supabase swap.
Every change on the record. No exceptions.
Regressions get their own tag. That's the whole trust mechanism.