I gave an agent one sentence and it gave me back eleven years of this blog: 123 posts, 130,641 words, four eras and one 832-day silence, in 45 seconds, with a soundtrack. The video is below. So is the prompt, and everything that happened between the two.
The prompt
Create a nice video of the evolution of my blog apilama.com over the years and I’m going to post it as a tweet and as an article. I’m going to post the prompt
That was the whole brief. No brand file, no reference video, no storyboard. The agent — Claude, running in Cowork with a browser and a Linux sandbox — asked me four multiple-choice questions (visual style, length and format, audio, whether I wanted the copy drafted) and went to work. My only intervention afterwards was one line: “it’s too mute, it needs a tune.”
What the video shows
Everything on screen comes from one source: this site’s own WordPress REST API. Every post since September 2015 appears as a brick on a timeline, coloured by what it is about. The playhead slows down in the years I wrote a lot and sprints through the years I didn’t. Nineteen posts get named. Four eras get labels I did not choose but recognised immediately.
[IMAGE: apilama-evolution-eras.png — “Four eras. One thread.” — the final frame of the video]
| Era | Years | Posts | What I was writing about |
|---|---|---|---|
| The API years | 2015–2016 | 32 | hypermedia APIs, linked data, IoT, smart cities |
| Systems & semantics | 2017–2018 | 49 | serverless, microservices, gRPC, digital affordances |
| The operator years | 2019–mid-2024 | 14 | the CTO and CDO roles, hyper-growth, culture, M&A |
| The agentic era | mid-2024– | 28 | agents, MCP, vibe coding, 20x teams |
It also measured the thing I knew but had never counted: 832 days without a single post, April 2022 to July 2024. That is what the middle of the video looks like, and the music drops out to a clock ticking to make the point.
[IMAGE: apilama-evolution-silence.png — the 832-day gap, as the video shows it]
How it was made
Data. The sandbox the agent runs in had no network route to my site, and the Wayback Machine was blocked outright, so the “screenshots of old designs” idea died in the first minute. It switched to the source of truth instead: /wp-json/wp/v2/posts (two pages), plus categories and tags, fetched through the browser pane, with word counts computed in-page from the rendered HTML. 123 posts, 130,641 words, 10 categories, 700 tags. Nothing else went in.
Analysis. Posts per year, ten categories folded into five buckets, keyword shifts in titles. From that came the four eras, the nineteen landmark posts and the gap.
Rendering. No video editor. One HTML file with a 2D canvas and a deterministic renderFrame(t) function, so every frame is a pure function of time; a monotone-cubic time warp for the pacing; Inter and JetBrains Mono for type; a five-colour palette checked for colour-blind separation. Playwright drove headless Chromium through 2,724 frames at 1920×1080, four pages in parallel, and ffmpeg encoded them to H.264 at 60 fps. It rendered preview frames, spotted two text collisions on its own and re-rendered only the affected range.
Sound. The first cut was silent, and silent is boring. Instead of licensing a track, it wrote one: a numpy/scipy script that synthesizes every sound — detuned saw pads, plucked arpeggios through a ping-pong delay, a swept-sine kick, noise hats — on a beat grid locked to the video’s scene changes. The drums stop for the 832 days and leave a clock ticking; they return with the agentic era and end on the downbeat of the final frame. About 800 lines of code in total, including the soundtrack. I wrote none of them.
[IMAGE: apilama-evolution-pipeline.png — the pipeline, step by step]
What I take from it
The interesting part is not that a model can animate a bar chart. It is the chain of decisions when the obvious path is closed: recognise that the archive route is dead, find the API that is the source of truth, derive the story from the data rather than from my memory of it, keep the pipeline deterministic so any frame can be re-rendered, and, when told the result is boring, reach for a synthesizer rather than a stock-music site.
That is the shape of the thing I have been writing about here since 2015, under different names: hypermedia, affordances, DeepGraphs, MCP. An agent that traverses what a system actually exposes instead of guessing. The engine has changed three times since I started. The map — a machine-readable description of what is there and what you can do with it — is still what makes the engine useful. My blog turned out to be a decent test case. It had an API all along.




Leave a Reply