Lab

Things I build because I want them to exist. Most started as a problem in my own life.

Stick-shift simulator

A driving simulator that shows you why you stalled.

Driving games let you stall without telling you why. This one is a glass box: clutch slip, torque and turbo lag are visible and replayable. It’s modelled on my own 2019 Golf and driven with the wheel and pedals I already own. Stalling and shudder come out of the physics, not scripted rules, and how the real car behaves is the test suite. Full write-up lives on its own page.

  • C# / .NET 10
  • physics at 1,000 steps a second
  • raylib
  • SDL3 force feedback

Read the build story

Slip: private chat

End-to-end encrypted chat, calls and screen sharing, straight from browser to browser.

I wanted a conversation tool where privacy isn’t a setting, it’s the architecture. Slip needs no account and stores nothing. You share a code as a QR, a link or a block of text, both of you read eight safety numbers aloud to confirm nobody is in the middle, and the two browsers talk directly, end-to-end encrypted. Close the tab and it’s gone.

Over that connection it carries text, calls, screen sharing and video messages, with disappearing messages, passkey-locked saved chats, and an optional relay for networks that block direct connections. It’s built with plain HTML, CSS and JavaScript, installs to a phone’s home screen and works offline. Try it live

  • WebRTC
  • End-to-end encryption
  • Vanilla JS
  • Azure

A game-based coding course

A game-based programming course with an AI tutor, built for teenagers.

Existing platforms were hard to tailor, so I built one: game-based lessons, an AI tutor to answer questions along the way, and a final project in Roblox. The course is complete. Its first learners didn’t finish it, which taught me more than if they had. I’m now working through it myself as a learner to find where it loses people and what to tune.

  • Web
  • LLM tutor
  • Game-based learning
  • Roblox

Local AI lab

What open models can really do on one desktop GPU.

An RTX 3090 at home, used as a daily test bench. I try local models on real tasks: retrieval over my own documents, coding, writing code documentation, and connecting models to my own developer tools. Some ideas work brilliantly, some fail in instructive ways, and that’s the point. Notes from it feed the Writing section.

  • Ollama
  • Qwen3
  • RAGFlow
  • MCP
  • RTX 3090

Restart-24

A 24-hour reset that gives your brain one real win a day.

Based on a simple idea from behavioural science: progress stalls not from lack of effort but from a lack of visible wins. Restart-24 turns that into a daily loop. The evening before, it gets you to name tomorrow’s first deliverable and clear the way to start. In the morning it holds you to one most important task, worked in short focus rounds with a written commitment for each. When you’re stuck it suggests a smaller version of the same task rather than a different one. At night, a five-question review keeps what worked and drops what didn’t.

Credit: the method isn’t mine. It comes from a widely shared talk on a 24-hour reset routine, which in turn draws on research into habits and motivation. Restart-24 is my attempt to turn it into a tool.

  • Behaviour design
  • Productivity

Bin watcher

A camera and a language model that spot rubbish dumped where it shouldn't be.

A Raspberry Pi camera watched a spot where rubbish kept being dumped, with a vision model deciding what it saw and alerting me on Telegram. It worked as a proof of concept, and it never went live: pointing a camera at a public place raises privacy questions a weekend project shouldn’t answer alone. The most useful lesson was that one.

  • Raspberry Pi
  • Vision LLM
  • Telegram
  • Privacy

Dvorak Chinese keyboard

A Chinese input keyboard for iOS for people who type Dvorak.

I type in Dvorak, and no Chinese input method on iOS supported it. So I built one for myself.

  • iOS
  • Input methods
  • Pinyin

↑ ↓ to move · Enter to open · Esc to close · J / K: next / previous section