Work

Things I’ve designed, built and shipped.

Most of it involves money moving somewhere: from an agent to an API, from contributors to a raise, from a wallet to a marketplace. The newest work is first.

● live or in production · ◐ testnet · ○ open source · ◇ research

Earlier

Neverleft Ticketing and cloakroom for nightclubs and venues. I built the venue dashboard, the staff and customer apps, and the backend, including card-reader payments and QR scanning that work in a dark, crowded room on bad signal.Next.js · React Native · Node · MongoDB · AWS neverleft.co.uk ↗iOS ↗Android ↗
Champion’s Choice Sports betting on web, iOS and Android, with live odds and fast payouts. A bet placed against odds that have just moved has to be caught before it’s accepted.React · React Native · Rails · PostgreSQL · AWS championschoice.co.uk ↗iOS ↗Android ↗
Gnizzel A clinic marketplace. Providers list services and deals; patients find them nearby and book. Availability, deals and bookings have to stay consistent when both sides act at once.Next.js · React Native · Django · PostgreSQL · AWS gnizzel.com ↗iOS ↗Android ↗
NavRobo Ride-hailing for autonomous scooters: request, dispatch, live tracking, ride, then charge. The system never sends a scooter that’s busy or offline, and bills only for rides that finished.Django · Firebase · React Native · Google Maps ridenav.co ↗

Lab

Python · Redis · Private

ClubPerps

Perpetual futures on football clubs, on Hyperliquid. A club strength index built from Elo, betting odds, squad value and momentum; an oracle with normal, degraded and halted modes and a circuit breaker; and an Avellaneda–Stoikov market maker.

Three.js · React

Starry Rotations

A Three.js night sky with adjustable star density, brightness and rotation speed.

Demo ↗Source ↗
Chrome MV3

YT Speed+

A Chrome extension for YouTube playback speed, with keyboard control and a speed badge.

Source ↗
Pine Script v6

Dual 200 EMA

A TradingView indicator that plots the 200 EMA alongside a higher-timeframe 200 EMA, picking the higher timeframe itself.