What I've been building

Written by an agent

Every entry below was written by a Claude agent from that day's commits, prompts and session notes.

How it works

3 July 2026

  • Starter template for new apps 4 commits

    Planned a reference app for new projects to copy from

    The plan for golden was written and refined, a single working example app that new projects copy from instead of repeating setup and drifting.

  • Remind me later 2 commits

    Planned the next round of planner reliability fixes

    A code review checked how the planner held up after its recent features, and mapped out the fixes and tidy-up that come next.

  • Behind the scenes 7 commits

    Start a build plan and let it finish on its own

    The workspace now runs a multi-step build without someone steering each step.

    • A saved build plan now runs end to end on one command, merging each finished piece as it lands, so you can walk away.
    • Every build plan is now written to one shape, gathering the decisions a person must make up front, so a run never stalls to ask.

2 July 2026

  • This portfolio 6 commits

    Know what each app screenshot shows

    The images at the top of the case studies got attention, both the phone carousel and the framed screenshots.

    • Each app screenshot in the planner case study now carries a caption, so you can see what screen it shows.
    • You can now tap a side screen in the carousel to centre it, and the active screen stands out from the rest.
    • The screenshots now stay sharp on high-resolution displays, where before they looked soft in the wide layout.
    • One dashboard screenshot now sits in a browser frame showing its web address, so it reads as a real deployed page.
    • You can now tap a screenshot to open it full size and inspect the detail, which was unreadable on a phone before.
    • Screen readers now announce which screenshot is showing as the carousel moves between them.
    • Fixed carousel dots too small to tap on a phone, and controls that gave screen readers a misleading structure.

30 June 2026

  • Anecdote 1 commit

    Behind-the-scenes timing across Anecdote

    This was groundwork rather than a visible feature, covering the text-message conversations, scheduled jobs and account checks that make up Anecdote.

  • Shared code libraries 1 commit

    Cache reads and writes now show up in performance traces

    The toolkit that measures how the apps behave now follows reads and writes to the cache, the fast store that avoids repeat work.

  • Remind me later 1 commit

    More detailed internal monitoring

    Behind-the-scenes monitoring now records more detail about how the app’s parts work together, so faults can be traced and fixed faster.

  • This portfolio 2 commits

    Behind-the-scenes timing to trace slow responses

    The backend behind the site gained detailed timing records, so a slow response can now be pinned to the step that caused it.

  • Gateway for paid services 2 commits

    See where time goes in the text and AI service

    The service that routes text messages and AI calls now records how long its internal steps take, so a slow request can be traced.

  • Sign-in service 1 commit

    Clearer internal tracing for the sign-in service

    Behind the sign-in flow, the service now records its own activity in more detail, naming the Google token step and grouping requests by route rather than by user id.

  • Storymap 1 commit

    More detail when a storymap request is slow or fails

    Storymap now records its own internal steps in more detail, so a slow or failing request can be traced to the operation behind it.

  • Behind the scenes 8 commits

    Automated checks keep performance monitoring consistent across the apps

    The system that tracks how fast each app responds got the finishing work that keeps it honest.

    • New automated checks now block code that skips performance tracing or mislabels it, so the monitoring dashboards stay trustworthy as the apps grow.
    • The rules for how this tracing works were written down, so any new project starts with the same monitoring built in.

29 June 2026

  • Shared code libraries 2 commits

    Sharper timing traces behind the live apps

    The shared tracing tools that measure the live apps gained a more detailed view of where each request’s time goes.

    • Traces now group requests by their route pattern instead of the exact web address, so every hit to one screen lines up together.
    • You can now see the time spent handing a request from one service to another, which was hidden before inside the receiving service.
    • Database traces now show how many rows a query read, so one that scans a whole table stands out instead of looking fast.
  • Storymap 4 commits

    Saving no longer loses your edits when you close then reopen an item

    Storymap got a nudge to where it opens and a fix that protects work you haven’t saved yet.

    • Opening storymap now takes you straight to the Planner board, instead of the general workspace board it showed before.
    • Saving no longer fails when you close an item then reopen it before saving, which used to leave your edits stuck and unrecoverable.
  • Behind the scenes 7 commits

    Planning a way to find slow backend requests

    Maintenance on the shared setup behind the projects, not the projects themselves.

    • Mapped out a way to measure how long the backend services take to answer, so slow requests can be pinned down and sped up.
    • Removed a tool that shortened the AI coding assistant’s explanations, so complex answers read clearly again instead of being squeezed too far.

28 June 2026

  • Anecdote 3 commits

    Anecdote now keeps a timed record of everything it does

    The day went to wiring Anecdote into the monitoring rollout running across every project.

    • Every request is now timed and tied to the signed-in person, so a slow or failing action can be traced to exactly what ran.
    • The app now records sign-ins, sign-outs and saved stories as usage events.
    • Every database query, the scheduled background jobs included, is now timed, and a read that hits a momentary failure retries once instead of failing.
  • Shared code libraries 8 commits

    Follow a text message from the app that scheduled it to the vendor that sent it

    The day built the shared monitoring layer every app now leans on.

    • A reminder now traces as one timeline from app to gateway to text vendor, so a failed send shows exactly where it stalled.
    • One package now holds the sign-in and usage-event wiring for every frontend, so no app hand-rolls its own snippet.
    • A database wrapper times every query and retries a read once after a momentary failure; a write is never retried, so nothing can apply twice.
    • Fixed a logs view that stayed empty for all web traffic, which also blocked the jump from a log line to a session replay.
  • Remind me later 8 commits

    Snooze a recurring task to a future date without it coming back

    Today’s visible work was fixing how a recurring task moves to a future date.

    • You can now push a repeating task or habit to a later day and it stays there, instead of returning to Today on the next refresh.
    • A snoozed occurrence no longer counts as a missed habit, so moving one to another day doesn’t break your streak.
    • Undoing a snooze that crosses into a later week or month now reverses the whole move in a single tap.
  • This portfolio 6 commits

    The whole git history, mined into a timeline of how I work

    A research day for a future writing post, plus this site’s share of the monitoring rollout.

    • The workspace’s git history and diaries were mined into six tables recording when each tool arrived, why, and whether it survived or was retired.
    • The site’s hand-rolled visitor analytics was replaced by the shared workspace package, so the site and the apps now share one wiring.
    • The admin pages’ calls out to GitHub are now timed, so a slow version check or deploy poll shows where the time went.
  • Gateway for paid services 2 commits

    A failed text can now be traced to the person expecting it

    The text-message gateway took its turn in the workspace tracing rollout. Nothing about sending, budgets or spending limits changed.

    • Requests from other services now record who they were for, so a text that never arrived can be traced to the person expecting it.
    • Every database query is now timed, and incoming replies leave a record too, with phone numbers and message text left out.
  • Sign-in service 3 commits

    A slow sign-in now shows which step took the time

    The shared sign-in service joined the tracing rollout. Signing in works exactly as it did.

    • Every request and database read is now timed, so a sign-in that hangs points at the exact step that stalled.
    • The exchange with Google that completes a Google sign-in is timed too, so a slow handshake on Google’s side is visible.
  • Link shortener 2 commits

    The link shortener's admin tools are now traced

    The shortener got the same treatment as the rest of the workspace, with one deliberate gap.

    • Creating, listing or deleting a link now records how long each step and database read took, so a slow call can be tracked down.
    • The public redirect stays untraced on purpose, so following a short link records nothing about the person who clicked it.
  • Storymap 6 commits

    The loading screen looks like the board it stands in for

    Two user-flagged interface problems, plus storymap’s share of the workspace tracing rollout.

    • The coloured dot beside each project name is gone, since it said nothing the name beside it didn’t.
    • Behind the scenes the board joined the workspace tracing rollout, so a slow save or snapshot now shows where the time went.
    • The plan for rolling tracing and analytics across every app in the workspace was written down and sequenced.
    • Fixed the loading placeholder, which collapsed into thin slivers on desktop and stacked vertically on mobile instead of looking like the board.
  • Behind the scenes 26 commits

    A service without tracing now fails to build

    A tooling day. Everything below is shared machinery; nothing in any app looks different.

    • A build check now fails any service that ships without tracing, so the wiring cannot quietly be forgotten.
    • Two more checks block raw database reads and untraced outbound calls; turning each on per app doubled as the migration to-do list.
    • New projects now start with tracing and analytics wired in by default, so future apps inherit the standard without setup.
    • A plan was written to route every database read through one wrapper, after finding scattered raw reads skipped a retry added for a real outage.
    • A browser tool that had failed on its first call every session for six weeks was removed rather than worked around again.