97 Pixel Scenes in 28 Days, and I Drew None of Them
Opus 5.5 built Riffiter Floor, a walkable pixel world of music history: the engine, the scenes, the performance work. Here is what it got right, measured, and the two things it could not do without me.
There is a page on Riffiter, the music site I run, called Floor. It is a pixel-art city block of music history you can drag around: Queen at Live Aid, the Beatles on the Apple rooftop, Daft Punk inside their pyramid, Johnny Cash at Folsom. Every scene is animated. Click one and a card tells you what happened that day.
I did not draw any of it. I did not write the engine either. Opus 5.5 did both, and Sonnet 5 did the research.
The idea is borrowed and I should say so. floor796 is a hand-drawn animated world that one artist has been building since 2018, and it is still growing. I wanted that feeling for music. I did not have eight years, and I cannot draw.
I handed the job to an agent instead, and I kept the notes. Some of what came back was better than I expected, and some of it was wrong in ways I only caught by looking.
What exists after 28 days
The first commit went in on 23 September. On 21 October the branch held:
- 97 scenes, 81 of them on the live floor as a 9 by 9 square.
- About 30,000 lines of TypeScript across 103 files.
- 140 commits.
The first two prototypes were hand-drawn on a 2D canvas and kept getting the perspective wrong. The third attempt was real 3D: three.js with an orthographic camera at a fixed 45° azimuth and 30° elevation, rendered at half resolution and scaled up with nearest-neighbour filtering. That is why it looks drawn even though it is geometry, and it has stayed that way since day one.
The first 39 scenes came from parallel agents in the first few days, each one working from a research file a Sonnet agent had written for it. Since 24 September it has run as a daily job. A researcher writes one new research file, and then the builder polishes two existing scenes and adds one new one. Nobody tells it which scenes; it reads the research file and the rules and gets on with it. The commit history shows three floor commits a day, with a handful of gaps.
Where it was good, in numbers
I am not going to argue that it wrote code quickly, because nobody can check that. What I can show is the dull engineering that keeps a page like this from melting a laptop. It did that work, and it wrote each piece up as a before and an after, which is how I can quote them here:
- Frame gating. The scenes animate at 12 fps, but the page was rendering on every display refresh, 60 or 120 times a second. It now renders only when a frame actually changes, which works out at roughly five to ten times less work.
- Shared geometry. 27,399 geometries became 3,219, and static meshes went from 9,412 to 3,210, by merging everything that does not move.
- Far zoom. At full zoom-out the floor was issuing 8,024 draw calls and taking about 20 ms a frame. Culling plots against the camera and dropping ink outlines and tiny face parts below a zoom threshold brought it to about 3,250 calls and 11 ms. Loading went from 14 long tasks (about 940 ms in total) to 3 (about 65 ms).
- Lights, which is the one I would not have found myself. 23 scenes add their own point lights, and three.js includes the light count in its shader cache key, so panning across a lit scene silently recompiled every shader on the page. That was five stalls of about 75 ms each. The fix was a fixed pool of 8 lights, with the nearest lit ones copied into it each frame. After that, zero recompiles.
- Weight. The first load went from 441 KB gzipped to about 162 KB once each scene became its own lazy chunk of about 3 KB. A scene is only built when the camera gets near it.
Running it costs almost nothing. The page is static, rebuilt once a day so the album ratings it shows stay current, and served from cache. Nothing on it talks to a database while you browse.
Where it was not
There were two problems, and fixing them became most of what I did on this project.
Facts
Every scene has a card. On 25 September the Travis Scott card turned out to say his Fortnite concert had 45 million players. The real figures are 27.7 million unique players and 45.8 million total entries, which is not the same claim. So every card got checked against sources. Of 74 cards, about 60 changed, and about 40 of those had a real factual error, not a wording problem. Elvis's Aloha from Hawaii went out to "about 40 countries" (it was 6). The call count after Sinéad O'Connor's SNL appearance was "hundreds" (about 4,400). Live Aid's opener was credited to Phil Collins. It was Status Quo.
None of those were absurd. Each one was the kind of number that would have sat on the page for years with nobody looking twice. The rule now is that a fact is either sourced in the research file or left out.
Looking at it
I added a rule checker on 24 September. Its first run found 421 problems across 74 scenes, and only 15 scenes passed clean. The next day I went through the scenes by eye and found eight kinds of mistake the checker had no rule for. A few of them:
- Daft Punk invisible inside their own pyramid, under a 9.9 m roof cap.
- Singers whose heads sat inside the microphone.
- Hendrix's guitar fire at Monterey drawn 30 m from where it should have been.
- A Led Zeppelin guitar that did not follow the body holding it.
Other corrections came one at a time: June Carter appearing next to Johnny Cash out of thin air, bricks from The Wall flying into the audience, orchestras with no violins, cellos or horns, a crowd walking straight through rows of seats.
Every one of those became a numbered rule in a file the builder reads before every run. There are 14 now. "Nobody pops in or out, characters walk in from the edge." "Instruments are real." "Check the camera view after raising anything tall." The file matters because the daily builder starts from nothing each morning. A correction I only gave in conversation was gone by the next run. A correction in the file is there every time.
So the split I ended up with is roughly this. The agent can measure a frame time and fix it. It could not tell me that a scene read wrong, or that a believable number was false, and both of those needed me to sit and look.
What I would tell someone starting the same thing
Here is who did what. Opus 5.5 did the engine, the 97 scenes, the performance work and the daily routine. I came up with the idea, looked at every scene, checked the facts, and wrote 14 rules. I do not have a clean number for what the build cost in tokens, so I am not going to claim it was cheap. What I can say is that I could not have made this at all, and it exists.
If you try something like this, I would put the time into the rules file rather than into prompts. A prompt fixed one scene for me. A rule fixed that scene and the ones the builder made after it, most of them overnight.
Floor is at riffiter.com/floor. Start with Live Aid and press "Stand in the crowd."