Side project · Generative toy · Canvas

A portfolio that's quietly alive.

The faint grid breathing behind this whole site is Conway's Game of Life, four rules, no designer, endless behaviour. This is why I put it there, and the small decisions that turned a maths curiosity into something worth clicking.

Role
Design & build
Type
Generative toy
Stack
Canvas · typed arrays
Rule
B3/S23
Year
2024

Most portfolios sit perfectly still. That always felt like a missed opportunity.

A portfolio is supposed to argue that you can make things that move and respond. Then it loads as a stack of frozen screenshots. I wanted the page itself to be a small proof, alive, reactive, made by hand, without turning into a gimmick that fights the work for attention.

Conway's Game of Life was the obvious candidate. Four rules on a grid of cells, and out of them comes motion that looks almost intentional, gliders that walk, shapes that pulse, structures that build and collapse. It's the cleanest demonstration I know that simple systems produce complex behaviour. That's also, more or less, my pitch as a designer. So I built our own version and set it loose behind everything.

Try itclick anywhere on the field to seed a colony
Click to seed life
The same engine that runs behind the site, dialled up so you can actually see it. A lone glider always patrols the field; every click drops an Acorn, a seven-cell seed that erupts for thousands of generations.

There is no clever algorithm here. There are four lines.

Every cell looks at its eight neighbours and obeys the same tiny law, frame after frame. Everything you see emerges from that, nothing is scripted, nothing is drawn by me. This is the whole program:

In shorthand: B3/S23. Born on three, survives on two or three. The hard part was never the simulation, it was the design judgement wrapped around it.

The first version was far too interesting. So I turned it almost all the way down.

My initial pass ran the field at full contrast across the page. It looked great for about four seconds, then it ate every headline on the screen. A background that demands to be read isn't a background.

So I pushed the opacity down near the floor, capped the grid resolution, and slowed the clock to roughly eight frames a second. The result reads as texture, not animation, you notice it drifting only when your eyes rest. To keep that calibration in the user's hands rather than mine, I exposed a single opacity slider in the site's controls and persist the choice across visits.

Line held
If the background ever wins a fight with the content, the background loses.

Ambient means present, not loud. The slider exists so anyone who disagrees with my level can set their own, and so I'm never tempted to crank it back up.

Clicking a single cell is a terrible reward. It blinks once and dies.

Interaction only matters if it pays off. A lone cell has too few neighbours and vanishes on the next tick, anticlimactic. I needed a seed that turns one click into a visible event.

The answer is a known pattern called the Acorn: just seven cells, but a methuselah, it stays chaotic and keeps spreading for over five thousand generations before settling. So every click on the page drops an Acorn at the cursor, and the screen quietly erupts outward from where you touched. One click, thousands of generations of consequence. That ratio is the entire delight.

Exhibit Aa click, mid-bloom
An Acorn seed spreading into a sprawling colony of cells
One Acorn, ~70 generations after the click, already sprawling.
Exhibit Ba living field
A dense field of cells several generations into the simulation
The field a few generations in, gliders, blinkers and debris all at once.

Before I committed to Conway, I spent a week obsessed with a single ant.

Conway wasn't the first automaton I tried behind the site. I built this earlier, Langton's Ant, and almost shipped it instead. The setup is even more absurd than Conway's: there is no field of rules, just one ant on a grid of coloured squares, following two instructions. On a white square, turn right; on a black square, turn left. Flip the square's colour, step forward, repeat.

For about ten thousand steps it produces pure noise, a symmetric little smudge that looks like it's going nowhere. Then, with no warning and for no reason anyone has ever proven from the rules, the ant suddenly builds a "highway": a repeating diagonal track it lays down forever. Order, arriving late, out of chaos. I found that genuinely thrilling.

I pushed the version below further than the classic, more than two colours (each colour gets its own turn rule), and two ants on one shared grid so their paths interfere. It's mesmerising. But it's also a main character: too sharp, too narrative, too obviously a toy to sit quietly behind text. So Conway got the background, and this became the thing I'm still proudest of tinkering with.

Lab capturethe experiment, preserved as-built
langtons-ant · multi-color · dual-ant chaos
step 0
The actual experiment, ported intact. Hit RUN and wait, the noise resolves into a highway. Toggle colours to add turn rules; each new colour bends the ant differently and the grid never settles the same way twice.

An ambient effect that stutters the scroll is worse than no effect at all.

This thing runs behind every section of a real portfolio, on phones included. It has exactly one budget: invisible. So the grid lives in a flat typed array rather than objects, the whole viewport is a single fixed canvas instead of thousands of DOM nodes, the device-pixel ratio is capped, and the simulation ticks on its own slow clock, decoupled from the 60fps paint so it costs almost nothing. Calm by design, cheap by necessity.

The maths took an afternoon. The restraint took the rest of the week.

The simulation was never the work. Conway's rules are four lines anyone can copy. Everything that makes this feel considered, how loud, how fast, what a click earns, how it hints at its own interactivity, is design judgement, made one decision at a time. The same instinct I bring to a product: the hard part is rarely making it function, it's deciding how it should behave.

It's also just honest. A portfolio claiming I build things that move and respond, that itself moves and responds to your cursor. The medium finally agreeing with the message.