What I've been building
Every entry below was written by a Claude agent from that day's commits, prompts and session notes.
23 August 2026
-
Anecdote's data now lives closer to home
Anecdote now reads and writes from a database hosted in the Oceania region rather than North America, which should trim a little delay for local users.
-
Model-eval database moved to a new region
The model comparison tool now points at its database in a new region, with the old data copied across and verified as an exact match first.
-
Preview database moved to a new region
The planner’s preview database was rebuilt in a new region and reconnected, with nothing that touches the live app you use.
-
Gateway database moved to a new region
The database behind the shared gateway was copied to a new region and both the live and preview services now point at it, with nothing that changes how the apps work for you.
-
Login database moved to a closer region
The database behind sign-in moved to a new hosting region, with its data copied across and verified as an exact match, and nothing you do to log in changed.
-
Short links now served from a closer database
The URL shortener now reads from a database in the Oceania region, copied and checked against the old one before the switch, with nothing visible changing for you.
-
Faster database writes for the Australian apps
Nothing looks different, but the databases behind several apps now sit in Australia, so saving your data no longer crosses the Pacific to reach them.
22 August 2026
-
A new model behind your story capture
Anecdote’s story-capture conversations now run on a different model, chosen by testing candidates on real captures.
- The new model was picked for the quality of its probing questions and story summaries, judged blind against cost and speed.
- Work was mapped out to let you text a quick note to anecdote and finish telling the story later in the app.
- Fixed story capture failing with an error and never completing, which broke new captures for everyone right after the model change.
-
Internal groundwork for apps to use more AI models
None of this touched a live app; it was internal work letting the apps use OpenRouter chat models, and closing a way to dodge spend limits.
-
Any language model, safely, through the shared gateway
None of this touched a live app; it was work on the shared service that every app routes its paid calls through.
- Apps can now call any OpenRouter language model by name, without a new release of the shared service, so trying a different model is a config change.
- Language-model spending is now capped in dollars per person each day, so a costly model cannot quietly drain the whole day’s budget.
- The routes that spend money are no longer reachable from the public internet, closing a way for a stranger to run up spend against an account.
- Running the apps on a developer’s machine no longer makes real paid calls, because recorded replies now stand in for the language model.
- Fixed failed language-model calls being impossible to diagnose, because only the status code was kept and never the reason the vendor gave.
-
Stronger checks behind code review and deploys
Nothing here changed a live app. The work went into the tools that review and deploy the code behind them.
- The automated code reviewer now checks every endpoint a service exposes, not only the ones a change touched, so an unguarded route on an untouched path gets caught.
- A probe script was added to measure how OpenRouter bills and behaves, so an upcoming gateway change rests on real responses rather than its documentation.
- Fixed the model-eval deploy check that marked a working deploy as failed, because it now waits up to a minute for the new version to start serving.
21 August 2026
-
Dictate a story instead of typing it
Capturing a story now works by voice, aimed at the phone typing that was the slowest part of writing one down.
- You can now tap the mic in the chat composer and speak your story, watching a live timer count up to a two minute cap, instead of typing it.
- The mic is also on the first capture screen, the blank box where you start a story, which is where speaking saves you the most.
- While recording you get three choices: throw the audio away, drop the words into the draft to edit, or send them straight away.
- Fixed cancelling a recording that carried on anyway, a mistapped button sending instead of opening a draft, and text typed while speaking getting lost.
-
Read a model comparison run on a screen
The tool for comparing language models gained a screen for reading a finished run, where before the only view was raw JSON or a spreadsheet.
- You can now read a comparison run on one screen and set how much quality, speed and cost each matter, so the ranking updates live.
- Tapping a model’s name lights it up in every chart at once, so you can follow one model across all the measures.
- A link now captures the run, the chosen scenarios and the weights, so you can send someone the exact view you are looking at.
- You can now export a run as a standalone one-page file, so you can share the ranking or reopen it later.
- Every screen now carries the same header, so you are always one tap from the run, judging and results screens.
- The judging screen is easier over a long sitting, with answers in a readable font, keyboard shortcuts to vote, and the lead-up conversation collapsed.
- Fault chips now sit in a row per answer, so a note like “too long” is recorded against the answer that earned it.
- The run log now scrolls to follow its newest lines, unless you scroll up to read, so you can watch a run without chasing it.
- A run hitting a per-minute rate limit now pauses and waits, then finishes, instead of racing to a false “complete” with calls missing.
- You can now retry a run’s failed calls with a button, so a run stopped partway finishes without editing the database by hand.
- Fixed vote buttons hidden under the phone home bar, a judging screen stuck on an empty queue, a misplaced scenario picker, and other small glitches.
-
Tidying the tooling behind the update log
None of this changed anything on the site; it was internal work on how the update log gets put together, plus one documentation correction.
-
Behind-the-scenes work to power voice dictation
Internal plumbing added speech-to-text as a third paid service behind the gateway, with daily spend caps that hold whatever an upload turns out to cost.
-
Deploys now set up their own database changes
Nothing looks different in any app; the day went to deploy tooling, build-cost cleanup and internal rules.
- Deploys for three services now apply their own database changes, so a feature can’t go live against a table that was never created in production.
- Some build automation was removed or tightened to stop wasted minutes, with no effect on how any app builds or deploys.
20 August 2026
-
New chart building blocks for the design system
Work went into the shared design system that other apps build on, adding two chart shapes, a colour set for charts and a slider, with nothing you can see yet.
-
Sign in to the eval tool, no more shared password
The way into the tool changed, results became downloadable, and groundwork went in for holding more than one comparison.
- You now sign in to reach the tool with your own account, instead of pasting a shared password everyone had to remember.
- You can now download every answer, the judgements, and the last test pass as CSV files, so results open in a spreadsheet without database access.
- The tool now stores each comparison as a named run kept alongside the others, groundwork for a results screen that is still coming.
-
The update log now files shared work under the right project
None of this changes an app you use; it is tooling behind the update log, with two August days re-published to match.
- Work on a shared building block now appears under the app it was made for, where before it could be filed under the wrong project.
- A project’s first entry now reads as a launch announcement introducing the thing, rather than a list of changes to something you’ve never seen.
-
New rules for how the build log and new projects get written
The guide for writing these build log entries gained new lead examples and sample entries, so entries stop opening the same way. The new-project process now calls for an adversarial code review before any plan that changes a database holding the only copy of real data.
19 August 2026
-
Compare language models on an app's own real inputs
Model eval is a new tool for deciding whether to switch the language model behind an app’s feature, before betting the feature on it.
- It pulls real inputs from the app’s own database, so each model is tested on the real messages it would actually face, not invented ones.
- It runs the whole comparison from a web page on any device and saves each result as it lands, so closing the tab loses nothing.
- It records how fast and how expensive each model is, timing the whole answer and keeping the provider’s own charge.
- Quality is judged blind, two answers side by side, so the person who wrote the prompts can’t favour the model already in use.
- You can start judging while the run is still going, rating whatever pairs are ready instead of waiting an hour for the calls.
- The conversation so far sits beneath the two answers, so a reply can be judged against what was actually said.
- Signing in with a Cloudflare account guards the saved conversations and the two endpoints that spend money on model calls.
-
See recent writing on the homepage
The homepage now carries writing beside projects, which its opening line had promised since it was written.
- You can now see the newest writing posts on the homepage under Projects, so you reach them without opening the header menu.
- New posts appear there on their own once published, and the section hides when nothing is live, so no empty heading ever shows.
- The internal deploy dashboard now tracks the model-comparison tool and can deploy it with one button, where before that meant running commands by hand.
-
A hook now silences a false warning about unpushed commits
Set up a session hook to stop a false warning about unpushed commits, and added guidance for the model-comparison tool and file handovers.