Making-of
Most of this site was written by AI coding agents. All of it was directed, reviewed, and repeatedly pruned by a human. This is a case study in what that collaboration actually looks like, including the parts where the AI was confidently wrong.
Avatar Window is a real product: a conversational 3D avatar, a procedural San Francisco that tracks live weather, recommendation engines that learn your taste. It’s also an experiment in method: nearly every feature was built by describing intent to an AI agent, letting it write the code, and then doing the genuinely hard part, deciding what to keep.
The lesson of the whole project fits in one sentence: AI makes generating software cheap, which makes judgment the expensive part. Everything below is about where that judgment gets applied.
~326k
lines of TypeScript
4,210
test cases, 397 suites
~12,500+
lines of dead code deleted
77
custom React hooks
The third number is the one I’m proudest of. Deleting AI-generated code you shipped last month is the tax on generating it cheaply. Pay it gladly.
Counted from the source tree on November 8, 2026
The agents write components, refactor services, chase type errors, and draft copy. What they never own:
What the product is, what ships next, what “good” looks like. An agent will happily build four recommendation engines; deciding the site needs exactly one is a human call.
Nothing merges because the AI says it works. It merges when the type-checker, the linter at zero warnings, 4,210 test cases, and a human reading the diff all agree.
The working ritual: describe the intent and constraints up front (the repo carries a long standing briefing document the agents read first), slice work into reviewable pieces (the YouTube integration landed as three deliberate slices: account linking, nightly sync, taste mapping), and review everything as if a very fast, very confident junior engineer wrote it. Because one did.
The failure mode of AI-generated software is rarely broken code. It’s plausible code: things that look finished and aren’t true. A sample of what review passes on this very site caught, kept here as a public exhibit:
None of these were caught by the AI that wrote them, and all of them were caught by adversarial review, sometimes by a second AI agent explicitly briefed to be a hostile reviewer, always with a human deciding what the findings meant. That’s discernment as a practice, not a vibe.
Type-check, lint with warnings-as-failures, full test suite, and a production build on every change. The machine holds the line so review attention goes to meaning, not mechanics.
Recurring adversarial sweeps over whole subsystems (search, recommendations, auth, the public site) hunting for dead features, dishonest UI states, and quiet drift between docs and code.
A standing rule the agents are briefed on: the UI never claims what the system doesn’t do. Provider outages get honest error states; empty features get removed, not hidden.
Dead code is a standing bug. Multiple purges, 5,000 lines here and 7,500 there, are recorded in the history like features, because they are.
The film at the top of this page was shot and edited by an AI agent, Hermes, directed in conversation over one weekend in November 2026. Nothing was screen-recorded by hand. The agent drove a real browser on a real GPU, captured the window scene frame by frame so the gulls and ferries move at true speed, typed the question, and kept the exact audio the site played, so the lips stay in sync. The rain, the foghorn and the score are synthesised in code.




It took eight cuts. The agent’s first instincts were plausible and wrong in the same way the code’s were:
It time-stretched a second voice track, phrase by phrase, to land on the avatar’s lips. The sync was within a frame and it sounded wrong. The fix was to keep only the audio the site itself played.
Brass hits, a heartbeat pulse, a silence before a dramatic last line. On an avatar describing the weather it read as parody. The final score has no percussion at all.
The first time-lapses were stepped one screenshot at a time, so the real time between frames varied and the gulls sped up and slowed down. Recapturing under virtual time fixed it.
An unvoiced greeting appeared and vanished before the conversation. Viewers tried to read it. It is now never on screen.
What the direction kept: one real question, answered live; a cut on the keystroke; the AI’s thinking time covered by a shot of the bridge while his voice comes in early; a hold until the last word lands. The agent did the typing. The edit is the judgment.
Because this is what working fluently with AI actually is. Not prompting tricks. It is a division of labor: knowing what to hand the machine, describing it well enough to get something useful back, distrusting the output in precisely the right places, and owning whatever ships under your name.
The site you’re using is the demo. The method is the product. Even the avatar’s chat stack is deliberately model-agnostic. The provider is a config switch, because the point was never any one model. It was learning to work with all of them, on purpose.