Side project · Generative toy · Canvas
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.
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.
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.
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.
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.
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.
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.
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 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.