Adding TILs, releases, museums, tools and research to my blog
20th February 2026
I’ve been wanting to add indications of my various other online activities to my blog for a while now. I just turned on a new feature I’m calling “beats” (after story beats, naming this was hard!) which adds five new types of content to my site, all corresponding to activity elsewhere.
Here’s what beats look like:
![Screenshot of a fragment of a page showing three entries from 30th Dec 2025. First: [RELEASE] "datasette-turnstile 0.1a0 — Configurable CAPTCHAs for Datasette paths usin…" at 7:23 pm. Second: [TOOL] "Software Heritage Repository Retriever — Download archived Git repositories f…" at 11:41 pm. Third: [TIL] "Downloading archived Git repositories from archive.softwareheritage.org — …" at 11:43 pm.](https://static.simonwillison.net/static/2026/three-beats.jpg)
Those three are from the 30th December 2025 archive page.
Beats are little inline links with badges that fit into different content timeline views around my site, including the homepage, search and archive pages.
There are currently five types of beats:
- Releases are GitHub releases of my many different open source projects, imported from this JSON file that was constructed by GitHub Actions.
- TILs are the posts from my TIL blog, imported using a SQL query over JSON and HTTP against the Datasette instance powering that site.
- Museums are new posts on my niche-museums.com blog, imported from this custom JSON feed.
- Tools are HTML and JavaScript tools I’ve vibe-coded on my tools.simonwillison.net site, as described in Useful patterns for building HTML tools.
- Research is for AI-generated research projects, hosted in my simonw/research repo and described in Code research projects with async coding agents like Claude Code and Codex.
That’s five different custom integrations to pull in all of that data. The good news is that this kind of integration project is the kind of thing that coding agents really excel at. I knocked most of the feature out in a single morning while working in parallel on various other things.
I didn’t have a useful structured feed of my Research projects, and it didn’t matter because I gave Claude Code a link to the raw Markdown README that lists them all and it spun up a parser regex. Since I’m responsible for both the source and the destination I’m fine with a brittle solution that would be too risky against a source that I don’t control myself.
Claude also handled all of the potentially tedious UI integration work with my site, making sure the new content worked on all of my different page types and was handled correctly by my faceted search engine.
Prototyping with Claude Artifacts
I actually prototyped the initial concept for beats in regular Claude—not Claude Code—taking advantage of the fact that it can clone public repos from GitHub these days. I started with:
Clone simonw/simonwillisonblog and tell me about the models and views
And then later in the brainstorming session said:
use the templates and CSS in this repo to create a new artifact with all HTML and CSS inline that shows me my homepage with some of those inline content types mixed in
After some iteration we got to this artifact mockup, which was enough to convince me that the concept had legs and was worth handing over to full Claude Code for web to implement.
If you want to see how the rest of the build played out the most interesting PRs are Beats #592 which implemented the core feature and Add Museums Beat importer #595 which added the Museums content type.
More recent articles
- Two new Showboat tools: Chartroom and datasette-showboat - 17th February 2026
- Deep Blue - 15th February 2026