About / Log

What we’ve been building

A reverse-chronological log of meaningful steps in building Stratatouille. Small fixes and routine polish are folded into nearby entries.

  1. July 7, 2026

    Reading a crowded board

    A board packed with events — dozens across several lanes — used to dissolve into overlapping text. Each event can now carry a short label: a few words that ride the timeline itself, with the full description a hover away, so a busy lane stays scannable without losing any of its detail. Labels also hold inside the plot now rather than crowding the lane names or the edges — and when you zoom in, events that scroll off-screen take their labels with them instead of stacking up at the margin.

  2. July 7, 2026

    Imports that survive real data

    Assembling a genuinely dense board — the Erin Brockovich / PG&E case, six lanes with a source on nearly every event — turned up every rough edge in bulk entry, so we filed them down. Paste a spreadsheet and it reads up to five columns: date, end, a short label, the description, and a source. A date range written in one cell — 1994–1996 — splits into its own span. And the date parser stopped tripping over the way sources actually write dates: a trailing “(approx.)”, “1996 (early)”, a hyphenated range now read the way a person would read them, rather than being rejected.

  3. July 6, 2026

    Every event can carry its source

    Facts should say where they come from. Each event now holds an optional source — a link or a plain citation — shown in its tooltip and in the text-table, with URLs rendered as links. On a hand-curated lane, where one fact comes from a court filing and the next from a newspaper, the provenance travels with the data: into the shared board and the export, not just your own notes.

  4. July 6, 2026

    Archive, not a trapdoor

    Deleting a board was one click from gone — too easy for something you spent an evening building. Boards now archive instead: a reversible step that tucks a board out of the way and quietly deactivates its share link while it’s gone. Archived boards live in your account, where you can restore them — share link and all — or delete for good. Permanent deletion asks you to type the board’s name first, so it only happens when you mean it.

  5. July 6, 2026

    Shared links that introduce themselves

    Paste a shared board into a message or a post and it now unfurls with its own name and description — a link to the Brockovich case reads as itself, not as a generic Stratatouille card. It’s the board’s own title and summary, rendered server-side so the preview is right the first time. Shared pages stay out of search engines, as before; this only changes how a link you chose to share looks when you share it.

  6. July 6, 2026

    Privacy and Terms, out of draft

    The Privacy Policy and Terms are no longer marked draft. They name the company behind Stratatouille, the governing law, how long data is kept and where it’s processed, and what the lightweight, aggregate analytics do and don’t collect — no advertising, no cross-site tracking, no personal data. Written to be read, not survived.

  7. July 5, 2026

    Your account, yours to close

    Account management is in place: change your password from inside the app, or reset it by email if you’re locked out. You can also delete your account — one confirmation, then your account and everything in it (boards, lanes, events) is erased in a single step. Immediate, complete, and self-serve.

  8. July 5, 2026

    Accessibility, stated plainly

    We build to WCAG 2.1 AA: semantic markup, full keyboard operation, labelled forms, and a comparison view that never relies on colour alone — every lane pairs a hue with a shape marker, with a text-table equivalent alongside for anyone who needs it. There’s now a public Accessibility Statement, linked in the footer, that says where we conform and where we don’t yet. The public pages pass an automated accessibility scan — with the honest caveat that automated checks are a floor, not a certificate.

  9. July 4, 2026

    Email, in Stratatouille’s own voice

    Stratatouille sends its own mail from its own domain, with two senders on purpose. Anything you might reply to — the welcome note when you create an account — comes from hello@stratatouille.com, an inbox a real person reads. System mail you shouldn’t reply to — password resets, confirmations, magic links — comes from no-reply@stratatouille.com, which rejects replies but sets a Reply-To back to hello@ in case you reply anyway. Subjects are branded and action-first (‘Reset your Stratatouille password’, not ‘Password recovery’), with the one-time code placed right in the subject so you can read it from a notification. The welcome email is sent server-side the moment you confirm your address, and only ever once per account.

  10. July 4, 2026

    Wiring the email plumbing

    Underneath the sender voices, the plumbing is set up properly. The stratatouille.com sending domain is verified at Resend with SPF and DKIM in place, so mail carries a full authentication chain and lands in the inbox rather than the spam folder. Incoming mail to no-reply@ bounces cleanly at the host. Supabase’s own auth emails now flow through Resend over custom SMTP, so the whole exchange comes from a stratatouille.com address, and reset links are pinned to production instead of a stray localhost. Unglamorous, but it’s what decides whether a password reset actually arrives when someone needs it.

  11. July 4, 2026

    Live context from Wikidata

    Beyond the built-in preset library, you can now pull context straight from Wikidata. Search a person and add their lifespan as a lane, or add an office as its full run of holders — every US president, each with dates. Imported events arrive dated and precision-tagged, and each lane links back to its Wikidata source. Coverage follows Wikidata’s own: politicians and laureates come through richly; figures whose records lack dates, less so.

  12. July 4, 2026

    Compare, exported and shared

    Two features land together on the Compare view. Export: a dropdown in the timeline toolbar hands you the current comparison as a PNG (for slides and docs), an SVG (crisp at any size, editable in design tools), or a JSON snapshot of the underlying data (for anyone who wants to remix it). Everything runs client-side against what’s already on screen — no round-trip, no server render, no new dependencies. Share: any board can be published as an unlisted, read-only link. Anyone with the link sees a clean public page with the same timeline and text-table, no sign-in required; nothing else about your account is exposed. The link can be rotated (invalidating the old one) or revoked outright at any time, and revocation is immediate. Under the hood it rides a single tightly-scoped read-only function that was already part of the database from day one, so there’s no new surface area to secure.

  13. July 4, 2026

    Compare view — a legibility pass

    The Compare view now gives protagonist lanes about half the vertical space regardless of how many context lanes sit alongside, so a board with two subjects and five presets isn’t swallowed by the backdrop. Context band names are set at a readable size and painted directly on the colour — white on saturated lanes, dark on pale ones. The viewport fits the actual board window rather than rounded tick years. Short tenures — a pope who reigned weeks — always render as a bar with a minimum width instead of collapsing to a dot, so the same shape means the same thing across lanes. The lane rail can collapse to reclaim about 180 pixels when you’re deep in a comparison.

  14. July 3, 2026

    Compare view — hierarchy and cleaner labels

    More on reading it at a glance. Protagonist lanes — the subjects you came for — now carry visible weight: taller bars, larger markers, bolder labels, a faint row tint. Context lanes recede into a lighter register, with shortened names — ‘Abraham Lincoln’ becomes ‘Lincoln’ — so a century of them doesn’t crowd the story. Label text uses each lane’s own colour rather than a bordered black. Overlapping events on a lane step onto a sub-shelf instead of stacking, and the plot is clipped so bars can’t slide behind the lane gutter.

  15. July 3, 2026

    Compare view — labels, edges, and default zoom

    Three fixes. Labels are now always present: spans show their title inside the bar, truncating when it’s narrow; points get one on a thin leader line. A greedy layout hides any label that would overlap rather than stacking them into a pile — hidden ones stay reachable via hover, keyboard, or the text-table — with an ‘All labels’ toggle to override. Preset events that fall outside the board’s date range are clipped at the window edge, the underlying data untouched. And the default zoom fits the board’s declared range instead of the widest extent of any preset.

  16. July 3, 2026

    A library of ready-made context

    Every board has an Add-from-library button that opens the shared context library — US Presidents, Popes, Chief Justices, Nobel laureates in Physics, and more, grouped by category with an event count on each. Adding one drops it onto the board as a context lane, styled with the next shape-and-colour and its events already dated. The picker marks what’s already added, so you can’t duplicate by accident; removing one is a normal lane delete. The library is shared and read-only — the lane becomes yours, the library stays shared.

  17. July 3, 2026

    Oops — we hadn’t written a single test

    Time for some honesty. We planned this project carefully — a concept paper, a product spec, a technical design, a competitive analysis — and then built accounts, boards, lanes, a smart-date entry grid, and the entire comparison view without a single automated test. Testing wasn’t in any of the documents. That’s an honest miss, and exactly the kind of thing that’s easy to skip when you’re moving fast and everything appears to work. So we stopped and fixed it: a test runner (Bun), unit tests for the load-bearing pure logic — starting with the date parser the whole ‘type a date naturally’ feature rides on — and a rule that code must typecheck and pass its tests before anything ships. We also wrote the testing approach into the specs, so it’s a standard now rather than an afterthought. The payoff was immediate: the very first tests caught the parser quietly rejecting ‘1949 AD’, and surfaced a documentation error we’d been carrying. Moving fast is good; moving fast with a safety net is better.

  18. July 3, 2026

    The Compare view — everything on one axis

    Every board now has a Compare tab that draws all its lanes on a single, date-scaled timeline. It’s a hand-built SVG (no charting library) so we control every pixel: the axis auto-picks its tick interval as you zoom, points and spans sit at proportionally correct positions, and each lane keeps its shape marker so overlaps stay readable in grayscale or for colour-blind readers. The signature detail is how fuzzy dates look — 1949 renders with hard edges, Dec 1993 with a two-week feather, 1949 with a half-year feather, 1940s as a full decade band, and c. 1976 with a dashed outline and the softest fade of all. You can zoom in and out, fit to the data, pan by dragging, tab through every event to hear its date and description, and click a lane’s gutter label to focus it and dim the rest. A complete text-table of the same data is always in the DOM for screen readers and one click away for anyone else.

  19. July 3, 2026

    Bulk entry grid with a smart date parser

    Each lane now has an Edit-entries editor: a roomy grid built for fast typing where you enter dates the way you’d say them out loud — 1949, 1980s, c. 1976, Dec 1993, 2 Dec 1993 — and Stratatouille figures out the precision (year, month, day, decade, or circa) and shows a small badge so you can see what it understood. Rows accept an optional end date to become spans, invalid dates are called out inline before they can hit the database, and pasting two tab or comma-separated columns fills a whole batch of rows at once. One Save button reconciles everything: new rows are inserted, edits are updated, removed rows are deleted, and existing IDs and timestamps are preserved. The lane’s inline body now shows a compact read-only summary of its saved entries.

  20. July 3, 2026

    Lanes inside a board

    Opening a board now drops you into a real workspace: add lanes, mark each as protagonist (your subjects) or context (the backdrop), rename them, and reorder with keyboard-operable up/down controls. Every lane carries both a colour and a distinct shape marker from a shared palette — so lanes stay tellable-apart in grayscale, for colour-blind readers, and in high-contrast modes. Recolour picks a new style; delete asks for confirmation and cleans up cleanly under the hood. Entries themselves are the next slice — each lane has a placeholder for now.

  21. July 3, 2026

    Boards, front and center

    The protected /app is now a real dashboard: your boards, most-recently-updated first, with a friendly empty state when you’re starting out. You can spin up a new board (title required, an optional rough year range for context), rename, and delete — deletions ask for confirmation and cascade cleanly through the underlying lanes and entries. Opening a board lands on a placeholder workspace; the actual lanes and entry grid are the next slice. Everything runs client-side against Supabase under row-level security, so each account only ever sees its own boards.

  22. July 3, 2026

    Public shell: nav, footer, and About pages

    Wrapped the site in a proper shell — top nav, footer with grouped nav, and a public /about surface split three ways: /about explains what Stratatouille is, /about/specs inventories what powers it, and /about/log (this page) records what’s shipping. Fonts (Inter, Archivo) are now self-hosted via Fontsource so no visitor IP goes to Google on page load.

  23. July 3, 2026

    Accounts and the protected app

    Email/password sign-up and sign-in on top of the existing Supabase auth, plus a protected /app that redirects out when signed out. Session state is read client-side; the real authorization lives server-side in RLS and the requireSupabaseAuth middleware.

  24. July 3, 2026

    Supabase foundation and handoff to build

    Crossed from planning into building — and changed the tooling to match. The project moved into an Obsidian vault paired with Claude Code (via a community plugin), with the Lovable codebase pulled in as a subfolder over Git, so the specs and the actual code now live side by side. Then the real work began: connected the Stratatouille Supabase project — browser client, server client, auth middleware, and generated types all in place — and applied the first database migration: tables for boards, lanes, and events, a library of ready-made context lanes, row-level security so your boards stay yours, and a single tightly-scoped function powering read-only share links without exposing anything else. The whole migration is version-controlled in the repo, not clicked together in a dashboard.

  25. June 28, 2026

    Strategy finalized

    The concept paper reached its first complete version — the product vision, who it’s for, and how it fits alongside the tools people already use — gathered in one place. It’s the north star the build works back from.

  26. June 26, 2026

    Product and technical spec

    Locked the scope for a first version and wrote it down properly: a product spec (what we’re building and why) and a technical design (the database shape, the security model, the smart date parser, and how historical context gets imported). Settled the stack too — TanStack Start on Cloudflare Workers, Supabase, and Resend.

  27. June 25, 2026

    Direction and name

    Researched where a tool like this fits, set the product direction, and landed on a name — Stratatouille — with stratatouille.com going live in the same stretch.

  28. June 25, 2026

    Kickoff

    Where it started: exploring the core idea — history as scaled, parallel lanes you can actually compare — and sketching the first interactive timeline prototypes. The initial concept paper was drafted the same day, across several iterations. This whole prep phase ran as one long, freewheeling chat session with Claude — thinking out loud, pressure-testing ideas, and writing things down as they firmed up.