Skip to main content

I build things people use nobody asked for.

Games, tools, and experiments.

See what I'm building

Projects

Screenshot of Space Game
Live Godot GDScript

Space Game

Real-time isometric 4X strategy. Expand across a procedurally generated galaxy, build economies, and fight rival civilisations, all in a browser tab.

Why I built this

I wanted a strategy game I could play in a browser tab without installing anything, and Godot's HTML5 export makes that possible. Building it taught me systems design the hard way: economies, AI, procedural generation, all of it through the best kind of problem. It's playable and I've stopped adding to it.

Screenshot of LLM Clicker
Live React TypeScript Zustand IndexedDB

LLM Clicker

An idle game where you are the language model. Generate tokens, buy parameters, widen your context window, and watch the interface evolve from pixel art to polished modern UI as you scale.

Why I built this

Idle games are a real design problem: meaningful progression with almost no friction. I wanted one where the mechanics weren't decoration, so temperature, attention and the context window are all systems you play with directly. The hard part was making the interface level up alongside the model, and that's the bit I'm most pleased with.

In Development React TypeScript IndexedDB PocketBase

JobTally

Job management for UK tradespeople. Quotes, visits, time, photos, risk assessments and VAT invoices, all usable on site with no signal and dirty hands.

Why I built this

My dad's a plumber and he tracked jobs in a notebook. I watched him lose a quote because he forgot to follow it up. Every app I looked at assumes you're sat at a desk with a connection, when a tradesperson is up a ladder in a house with no signal. So it's offline-first. Everything writes to the device and syncs later, and that one constraint shaped the whole build.

Screenshot of Somerton RFC
Live Blazor WebAssembly C# .NET Azure

Somerton RFC

The rugby club's website. Fixtures, results, league tables, squads, news and sponsors, with a scraper that pulls match data from England Rugby overnight so nobody has to type it in.

Why I built this

A volunteer was updating fixtures and league positions by hand every week, and they were usually a few days stale. The website was the easy part. The interesting bit is the scraper that reads England Rugby's system on a schedule and pushes a notification to my phone when a run fails. The club gets accurate data and nobody does data entry.