A 70.5 second portfolio film, narrated by this site's own command bar and swum through by its fish. The hero oval collapses into the search bar, each section is a question typed over the last one, and the answers are the work. Its thesis is the thread through everything I make: freehand expression meets structured data.
How it was made
The film is the real site, rendered one frame at a time on a virtual clock. The edit is a plain-text script, the music is a plain-text score of synths built from numbers, and the melody started as one I sang. I directed and edited it in a browser editor built for it as we went, with Claude Code writing the engine, the editor and the tests from my notes.
21days from the first cut to the release candidates, with work on 16 of them
62commits to the reel, about 19,600 lines written and 4,500 removed
207saves of the script in the editor
985saves of the score: every knob, clip and note moved
22test suites guarding the film, the editor and the music
Same Moment, Five Versions
Each still is rendered from the code as it stood on that day, at the same point in the scene. Pick a moment, then a version.
How It Grew
Sep 26cut 1 · 70.0 sbffc5a9
Cut 1: one outline, many windows
The first reel ran 70 seconds on a 96 BPM grid. A single outline unfolded out of each chapter's nav shape into a window onto the work, then folded into the next shape. One tank of the site's own fish engine swam underneath, and the loop drawn in the first second became the fish that swims the whole reel.
0:03 · draw a loop: a fish0:20 · the window onto the work
Sep 26cut 2 · 60.0 sf04cc68
Cut 2: the command bar narrates
The same night, cut 2 handed the narration to the site's own search bar. The hero oval collapses into the bar, and each section is a question typed over the last one. Its thesis became the spine of everything after: freehand expression meets structured data. The drawn fish carries a live data chip, read off the engine.
Title · the hero oval, before it becomes the barwhat has he shipped? · the first answer layout
Sep 2760.0 s046a6c0
The edit becomes a text file
The cut moved out of JSON into a plain-text script: one line per line on screen, scenes and beats in seconds, so a change of length ripples through. The preview became something tools could drive, and the first timeline appeared under it.
The first timeline · scenes, items and beats as ticks
Sep 2860.0 sf31832c
A score, and two more frames
Music arrived as a score of synths built from numbers: oscillators, filters and envelopes written as text and mixed offline into the film. There are no samples, so there is nothing to license. The same script learned to play in a square frame and a vertical one.
Square · 1080 × 1080, in the final cutVertical · 1080 × 1920, on Sep 29
Sep 2963.5 s77271e2
John starts editing
The preview, timeline and synth rack were packed into one page hosted on claude.ai that saves to its own store. My first session reordered the cut, rewrote the answer as "A capital-D Designer" and grew the film to 63.5 seconds. Every key became a button, scenes became cards, and a media picker opened every picture and clip in the repository.
who is john? · the first rewriteScenes as cards · works, moments and exits per scene
Oct 263.5 se1b776e
Fish take direction, music becomes clips
Script lines started directing the fish: where to swim, what to look at, how to idle. In the timeline the music grew its own bars, with parts, pads and clips to drag, stretch and fade. Scenes became interchangeable, with transition cues and a shot list to reorder them.
"think ableton mixed with easy pad"my note on the music timeline
"the transitions take a long time give me some flexibility"my note that became the transition cues
Music on its own bars · drums, bass, chords, arp, lead and fx as clips
Oct 561.75 → 67.75 s869d265
One song, the portrait, a sung melody
The arrangement was stripped to one coherent song. My portrait joined the answer, the frames grew 20%, and the school learned to swim under the copy instead of through it. Then I sang a melody. It was pitch-tracked, its key drift was taken out, and it was composed into the score as a take I could edit. A design-services scene joined after the coaching offer.
"the score skips and jumps and changes concepts ... strip the song itself down and keep it coherent throughout"my note on the music
who is john? · the thesis beside the portrait
Oct 667.75 → 71.75 s73854c4
A piano roll, the real finalists, six quotes
The voice got a piano roll on the reel's own clock, so I could move, stretch and re-voice the melody note by note. The OpenProse beats switched to the actual finalist work, and two more endorsements brought the quotes to six.
"i need to be able to edit the notes/timing of this stuff like ableton to dial it in"my note that became the piano roll
The first piano roll · what was sung, faint under the notes
Oct 1270.75 s3c8ca2f
Safe areas and frosted glass
Title-safe and action-safe guides came to the preview, with every line that crossed them outlined in red and a way to nudge a scene per frame. Every panel over the water became one frosted glass, so the fish read through it. The answer's figures became words: AI, Web and XR with their subdomains. The next day the client wall was balanced by measuring each logo's ink.
"i never want to clip the fish visual under the content"my note on the tank
Before · Oct 5, solid panelsAfter · Oct 12, frosted glass
Oct 1670.5 s2cb06d4
On the beat, then release
Every question's Enter and every cut was put on the beat, and the melody was rephrased into calls and answers. The lead got a warmer voice. The OpenProse beats now show the exploration converging into the core style, and the first question types twice as fast to give the content room. The score was saved for the 985th time, and the release candidates were rendered at 60 frames a second.
"normalize to the beat and find the clear patterns and clean up drift and awkward transitions between motifs"my note on the music
what has he shipped? · the final cutTeams · the wall balanced by its ink
The Editor
Everything below is one hosted page. Every change is one line of the script or the score, plays in place at once, and goes on one Undo.
ETimeline
Scenes as cards with their works, moments and exits, a lane per fish, and the music on its own bars underneath.
2×Words on the stage
Paused, double-click any line in the frame and type. It is written back into the script in the script's own words.
SShot list
Drag a shot to reorder the reel. Each shot has its own arrival, exit, curve and typing speed, or takes every shot's.
FFish
Direct the fish at the playhead: a spot to swim to, a thing to look at, an idle. Lines hold to their scene unless told to carry on.
NNotes
The sung melody as a piano roll on the reel's bars and chords. Move, stretch, box, quantize, and hear each note as it moves.
MSynth rack
Every sound built from numbers, drawn as knobs and meters. Each knob is one line of the score.
↗Media picker
Any picture or clip slot opens the whole library as thumbnails, searchable, clips playing on hover.
XExport
Ask Claude to render the saved edit. The films come back into the panel to play and download.
The walkthrough
77 seconds through every control set, recorded from the hosted editor.
Three Plain-Text Sources
The script
330 lines. A scene per block, a line per line on screen, beats in seconds. A checker names every mistake by line, and the cue sheet is printed from it.
The score
518 lines at 120 BPM in A minor. Synths and drums as numbers, parts with pads, clips on bars, and the sung take as one line per note.
The render
The rig is the site's own page. The renderer owns its clock, ticks the fish engine at 60 Hz, seeks every clip and films each frame. The music is mixed offline to about -14 LUFS.