Skip to content

devlog

Five weeks, 531 commits — what building this looked like

2026-06-16

I started on the 9th of May with one claim to prove or kill: a scanned real place, photoreal, drivable at 30 FPS in a browser tab on a laptop with no graphics card. This is the log of getting there.

I gave myself one thing to prove or kill, and started on the 9th of May: a scanned real place, photoreal, drivable at 30 FPS in a browser tab — on a laptop with no discrete GPU. Everything after that only counted if the claim held. Five weeks later the repo is 531 commits across 778 files, and it held.

The first week was the bet at its narrowest: get a real capture streaming and rendering at frame rate. A three-worker pipeline keeps the canvas free — one worker fetching byte ranges, one decoding, one persisting to disk — while the main thread does nothing but draw. It rendered. It also played like a slideshow of itself: photoreal and completely dead. A game is heard, seen, and felt, and I'd shipped one of the three.

So the middle weeks went into making the photograph into a place. Collision against the captured geometry, so walls actually stop you. Vehicle physics on raycast wheels. Audio that answers every input across three channels at once, so a crash reaches your ears, your eyes and your hands in the same frame. NPCs that keep walking the square when the camera looks away. None of it touches the capture; all of it sits on top.

A lot of the five weeks went into things the demo never shows. Four days breaking one 3,782-line file into modules that each own a single job — dull work that paid for itself inside the week. Ninety-eight unit tests that run in five seconds and caught two bugs that had been in production all along. A streaming format, SHLS, that borrows the shape video solved a decade ago: a manifest of chunks, fetched in the order the camera asks for them.

And the bugs that actually taught me something. Chrome collapsing the whole scene into the top-left corner of the tab — an hour spent blaming a weak GPU before I found the single CSS call doing it. A collision box a millimetre too small because of how JavaScript rounds a number ending in five. Each one was small. Each one changed how I worked after it.

The demo also hides the half of the problem that isn't code: every arena has to be made. A raw video has to become a clean, drivable splat scene, and doing that by hand in a terminal doesn't scale past the first one. So I built the other half — Wascape Studio, a splat and video editor — and now two products run on the engine: the demo you drive, and the studio that feeds it.

531 commits isn't the achievement; it's just the exhaust. The achievement is that one person, in five weeks, took a rendering technique that was a research paper last year and shipped it as something you open from a link and drive — on the laptop you already have. That was the whole bet. It's on the table now.