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

29 August 2026

  • Model comparison tool 7 commits

    Start a model comparison run from your browser

    Starting an evaluation run used to need a terminal and an account token, and now a config file loaded in the browser does it.

    • You can now start a run by loading a config file in the browser, so no terminal or account token is needed.
    • The panel checks the file before anything is sent and lists every problem with the field that caused it, so you fix them in one go.
    • The preview shows the models, inputs, pairs to judge and how many paid model calls the run will make, so you see the cost first.
    • Minting replaces whatever run is active, so it asks you to confirm before it discards a run that already has work behind it.
    • You cannot start a new run while a comparison is still running, so an in-progress run keeps the models it began with.
  • This portfolio 2 commits

    Better internal tools, nothing new on the public site

    The tools behind the site got easier to use for creating tracking links and sharing a file map, with nothing visible to visitors.

  • Behind the scenes 7 commits

    A house style for the guides behind the build

    A new writing standard now guides the internal instructions behind the build, and the main setup and project-start guides were rewritten to follow it.

27 August 2026

  • Link shortener 1 commit

    Short links now hand their search credit to the real page

    Every short link now sends visitors on as a permanent move, so Google treats the destination as the real page and, over the coming weeks, drops the short link from its results.

  • Behind the scenes 3 commits

    Internal tooling and process, nothing you can see

    None of this touched a live app; it went into deploy checks, analytics tooling and the instructions that guide the work here.

26 August 2026

  • Anecdote 2 commits

    Texted stories no longer get dropped

    A story you texted in was being dropped without a reply, and the screens for reviewing captures got fixes too.

    • A story you send by text now reaches Anecdote and gets a reply, where before it was dropped silently with nothing coming back.
    • A reminder in your log now taps through to a prefilled capture screen, so acting on it is one tap instead of hunting for it.
    • Fixed reminder text cut off with no way to read the rest, and a new story sometimes marking an unrelated earlier capture as told.

25 August 2026

  • Sign-in service 2 commits

    Texting the shared number reaches anecdote again

    A sign-in fault had been sending texts to the shared number into a void for people using anecdote.

    • You can now reach anecdote by texting the shared number after signing in once more, where before the text went nowhere however often you signed in.
    • Identity’s database changes now go out with each deploy, so a fault like the one behind this is far less likely to slip through again.
  • Behind the scenes 6 commits

    Behind-the-scenes tooling, nothing you can see changed

    None of this touched a live app: it was internal tooling for how these updates get written, plus behind-the-scenes record-keeping.

24 August 2026

  • Anecdote 10 commits

    Text a story to anecdote and finish it later

    Anecdote now takes a story by text message and holds it until you are ready to tell it properly.

    • You can now text a line to anecdote, held as a note to turn into a full story later, so a memory is caught the moment it lands.
    • Each texted note gets one message back confirming it, with a link that opens the story ready to finish.
    • The log now opens on what you still owe, grouped under reminders and stories waiting, so nothing texted in gets lost.
    • The capture screen lists your waiting notes above the box, and tapping one fills it in ready to send.
    • Notes you never tell clear themselves after two weeks, and binned ones a day later, so the list stays current.
    • Replies in a text conversation now come back faster, because each turn makes fewer trips to the database.
  • Model comparison tool 1 commit

    Groundwork to test a cheaper model for planner habit steps

    None of this touched a live app; it set up an internal run to check whether a model costing a fifth as much writes restart-a-habit steps as well.

  • This portfolio 3 commits

    The site can now be found in search and shared with a preview card

    The site had nothing for a search engine or a link preview to work with, and that has been put right.

    • You can now share a link to the site and get a card with a title, description and image, where before it was a bare URL.
    • Search engines can now index the site through a sitemap and structured data, so it shows up properly in results instead of as a bare domain.
    • Fixed a mistyped address showing a silent copy of the homepage instead of a not-found page, and the build log skipping some days.
  • Gateway for paid services 5 commits

    Faster replies from the apps that text and talk back

    The shared service behind the text and voice apps got faster and sturdier, with nothing new to see on screen.

    • Replies to a text message or a spoken story now come back sooner, because the service checks its spending limits in one database trip instead of three.
    • Your daily usage count stays accurate now, where before a half-finished write could leave it stuck too high or too low.
    • Groundwork went in so a text from an Anecdote user can be saved as a quick note instead of a task, though nothing replies to it yet.
  • Sign-in service 1 commit

    The sign-in service now knows which apps a person uses

    Nothing looks different, but signing in now records which apps a person uses, so other apps can tailor what they send without a separate lookup.

  • Behind the scenes 2 commits

    Internal tooling fixes behind the scenes

    Both changes were to behind-the-scenes tooling, with nothing that alters how any app works for you.

    • The automated helper that builds each change now confirms it is on the right branch first, so its work no longer lands somewhere it would be lost.
    • The check that keeps dependencies in place now catches a case where installing one package quietly emptied another, which used to surface later as confusing build errors.

23 August 2026

  • Anecdote 1 commit

    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 comparison tool 1 commit

    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.

  • Remind me later 1 commit

    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 for paid services 2 commits

    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.

  • Sign-in service 2 commits

    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.

  • Link shortener 1 commit

    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.

  • Behind the scenes 8 commits

    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

  • Anecdote 9 commits

    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.
  • Shared code libraries 1 commit

    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.

  • Gateway for paid services 7 commits

    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.
  • Behind the scenes 6 commits

    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.