Exp 003playableStarted 4 September 2026 · fifteen milestones in
SUPER & ARCHER
A make-believe afternoon.
- 5 days to playable
- 15 milestones
- three.js
- Blender, headless
- Claude Code
- two seats over Supabase

Ethan Lance, art by Alyx Lance
Opens in your browser. Nothing to install, and it's free.

We tried this ten years ago#
About ten years ago Alyx and I started building a game out of these characters. We didn't get far.
The art was never what stopped us. Alyx is an artist and she already had sketchbooks and paintings full of this world. What stopped us was everything in between. Engines, pipelines, rigging, shaders, a stack of things I would have had to learn before I could put one of her drawings on a screen and walk around inside it. I'm a product engineer. I could see how far away it was, and it was daunting enough that we put it down.
This is a world I wasn't able to bring to life until now.

The stories came first#
Super and Archer are imaginary stories about my daughters. Years of them.
Alyx drew the girls and she drew the place they live. There's a finished piece of the two of them in ink and coloured pencil, a holiday card lettered Have a Super Holiday, The Lance Family, pages of hair, faces in profile. None of it was made for a game. It was just there, the way things are when somebody in your house draws every day.

threejs.org, and a hill#
I found threejs.org and started reading. Then I opened Claude Code and asked for a hill.
What came back was a hill. Then grass that moved in wind, and an ocean, and a sun crossing the sky on a real clock. Milestone 1 shipped on the 4th of September in six increments, and by the end of it there was a Marin hillside I could walk around.
I want to be accurate about what happened there, because it isn't that I learned three.js the way I would have had to ten years ago. I read its documentation, decided what I wanted, and reviewed what came back. The distance between wanting a hill with grass on it and having one is what collapsed.

Then Blender, for the characters#
Code placeholders got the girls onto the hill and then stopped being enough. Real characters meant Blender, which is its own mountain, so we didn't click around in it. Python scripts drive Blender headlessly and write the models out, which means changing a face is changing code and I can rebuild every character with one command.
That mattered more than it sounds. I could go back to Alyx's drawings, measure something, change a number, and see it on all five characters a minute later. The faces have been rebuilt five or six times. Nobody hand-sculpts a head five or six times.

Her drawings are the specification#
Not a mood board. A specification, with numbers in it.
An eye in Alyx's finished drawing is one solid mark. No white, no iris inside a lid, no lid line, no lashes, no highlight. Measured against the width of the face at the eye line, the mark is 10% wide and the pair sit 55% apart, centre to centre. What the game had at that point was 23% and 62%, with seven separate parts inside each eye. It was an anime eye wearing Alyx's proportions.
Nothing she draws is mirrored either. One side of a fringe sits higher than the other, one eye sits a little off its twin, and that asymmetry is most of what makes a drawn face read as drawn. Every face in the game carries a fixed per-side offset that never averages out. Her profiles gave me the width of a skull at every height up the face, traced rather than sculpted, which is why the heads are wider than they are tall.

How a solid dot blinks#
This was the hard part, and it's where the tools were no help at all.
A solid mark has none of the machinery a drawn eye normally blinks with. There's no lid to lower, no white to cover, no lash line to fold. Fading it out reads as the character leaving the room. Scaling it down reads as the eye shrinking, because the width goes with the height and a real lid never narrows an eye. Covering it with a skin-coloured lid is what cel animation does, but with no drawn lid edge the cut is invisible and the mark just gets eaten from the top.
What works is a top edge and a bottom edge that move independently while the width holds. The top drops fast and takes most of the travel, the bottom comes up about a third as far, and the whole mark settles a little as it closes the way a lid carries an eye down with it. It bottoms out at a stroke of ink rather than at nothing, because a stroke of ink is what Alyx would draw for a shut eye. At no frame in the game is there anything on those faces she wouldn't have drawn.

What the tools did, and what they didn't#
Fifteen milestones between the 4th of September and the 8th. Ten years ago we couldn't finish one.
But none of this was designed by a tool. The eye measurements came from measuring a photograph of Alyx's drawing. The blink took three wrong answers before the right one, and the only reason I knew they were wrong was that I looked at them and they were wrong. Every good call on this project is somebody in my family having taste, and me checking the result against it.
What changed is the cost of being wrong. The faces have been rebuilt five or six times and not one of those rebuilds cost me a weekend.
Two sisters, two colleges#
Ink is Archer and Mab is Super. They're both at college now, at different schools, which is why the game has two seats and runs over Supabase.
Super gets a jump you can hold past the top until the cape opens into a glide, and a sword that makes mailboxes wobble. Archer gets a bow that shoots where the camera looks and four kinds of arrow, one of which is a firecracker and one of which ropes her onto a roof. Betsy the golden retriever sleeps under the lawn tree until somebody walks into the yard, and she'll fetch an arrow back to your feet.
The terrain is written once as a set of constants and read twice, by JavaScript for physics and by GLSL for the picture, so the ground you walk on and the ground you see can't drift apart. There's no engine under any of it.
Opens in your browser. Nothing to install, and it's free.
You can work in the same order. Build one yourself →