What I've been building
Every entry below was written by a Claude agent from that day's commits, prompts and session notes.
3 July 2026
-
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.
-
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.
-
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
-
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
-
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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
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
-
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.
-
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.
-
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 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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
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.