Systems, games, and a wee bit of Scotland.
I make playable things, and the engines underneath them. Mostly Rust and TypeScript. I keep a soft spot for the parts other folk skip: the deterministic core, the hand-written hash, the sprite drawn in code.
![]() |
![]() |
|
ha·ggis Hub The lobby. Chap a door and you're in a game. ha + ggis = haggis. Rust + WebAssembly core · hand-rolled Canvas2D renderer · strict TypeScript host ▶ Play it live |
Wild Haggis Survivors A Highland-at-dusk bullet heaven. Your haggis has famously uneven legs, so every step drifts a few degrees clockwise. Phaser 4 + TypeScript · every sprite drawn in code · English & Scots · deterministic replays ▶ Play it live |
Just Five More Minutes: a 2004-flavoured bedroom game. A daft wee MMO runs on the bedroom CRT while your mum asks you, three separate times, to tidy your room. Three.js, generated entirely at runtime. ▶ Play it live
flowchart LR
subgraph live["Live at ha.ggis.xyz"]
hub["ha·ggis Hub — the lobby"] -->|door| whs["Wild Haggis Survivors"]
hub -->|door| jfmm["Just Five More Minutes"]
end
subgraph shop["The workshop — private, for now"]
ag["AccentGuessr"]
is["IdleScape"]
pfd["plex-for-discord"]
kw["Kittiwake"]
end
robot["the robot"] -.->|tends| live
robot -.->|tends| shop
Project-Euler-Clanker: 138 maths problems wearing far too much architecture, after an AI got hold of them. (Outside the diagram.)
Private while they grow, so no links. Nothing here should 404 on you.
| Project | What it is |
|---|---|
| The robot | It scouts my repos for red CI and rough edges, writes a fix, verifies it, and ships it. A second model reviews anything that smells off. |
| AccentGuessr | GeoGuessr for voices. Hear a stranger speak, race to pin the accent on the map. Rust→WASM client, a hand-rolled WebGPU globe, zero npm packages. |
| IdleScape | Old School RuneScape, but idle — in an actual 3D world instead of a spreadsheet. Go tick engine, React + WebGL client. |
| plex-for-discord | Watch Plex together inside Discord, properly in sync. A four-crate Rust workspace with its own Discord Gateway client. |
| Kittiwake | A small, honest site for the family's off-grid hut on the Isle of Mull. Astro + Tailwind, and nothing it doesn't need. |





