Skip to content

Projects

What I've built.

Eight products I've taken from the first idea through to live, making the decisions about how each one should work and testing every section myself. They're all running, so feel free to try them.

Selected work

A live 3D map of London drawn as holograms, built on Ordnance Survey and open data

Vantage City OS over Southwark and the City of London: glowing cyan 3D buildings along the Thames, a route line across the river, floating panels for Tube line status and a routing comparison scored on air quality, and side panels showing the borough and ward from Ordnance Survey boundaries, land cover, air quality and weather.
Free
every data source is free or open, Ordnance Survey's OpenData included
1 mm
how closely the grid reference maths matches OS's own worked example
0
sound recordings: the soundscape is synthesised live
  • MapLibre GL
  • three.js
  • WebGL shaders
  • Web Workers
  • Web Audio
  • Ordnance Survey APIs
  • Vercel

How it was built →

Custom camera detectors, trained in the browser from a few example photos

Lookout's live detection view with two webcams side by side, each drawing boxes around what it recognises, and a tracking panel grouped by camera listing a person at 90% and a TV at 57% on the first and a person at 88% on the second.
3
cameras watching one detector, each voting on what it sees
~170KB
a trained detector packed into a share link, within 1% of its original scores
85MB → 10MB
download for the live demo after moving to MediaPipe
  • Next.js
  • TypeScript
  • TensorFlow.js
  • MediaPipe
  • Claude Haiku 4.5
  • Supabase
  • Vercel

How it was built →

A flight recorder for AI agents, with real recorded runs you can play back and branch

Glass Box replaying a recorded agent run: a planner and four agent nodes linked on a dark canvas, a timestamped flight log and detail panel down the right, and along the bottom a scrubbable timeline with play controls, a branch selector reading “Approved, the brief was filed”, and a badge marking it as a recorded flight, not live.
3
real recorded runs, twelve agents between them
$0.57
total cost to record all three
$0
cost to serve it, however many people visit
  • Next.js
  • TypeScript
  • React Three Fiber
  • Anthropic API
  • Vercel

How it was built →

AI design tool that turns a short brief into brand directions, a design system and a downloadable website

Loose Brief's Directions stage for the demo brand Ebbfield: an identity canvas drawing lines from four traits in the brief (Scientific, Hopeful, Grounded, Clear) to the colour, type, voice, imagery, motion and component choices of Direction A, Littoral Intelligence.
3
brand directions from one short brief
8
downloads, from a static website to a Tailwind theme
~1 min
to turn your own brief into three directions
  • Next.js
  • TypeScript
  • Claude Sonnet 5
  • Design tokens
  • Zod
  • Vercel

How it was built →

AI-driven competitor tracking SaaS built with Next.js, Supabase, Stripe and Vercel Cron

The Rival Radar landing page: 'Know the moment your competitors move', beside a panel listing three detected changes tagged Major and Notable.
25×
cost difference between two API endpoints, found in a header
RLS
row-level security on every tenant table
Daily
scheduled scrape via Vercel Cron
  • Next.js
  • TypeScript
  • Supabase
  • Stripe
  • Vercel Cron
  • Anthropic Claude

How it was built →

Live conversational avatar platform with multi-provider AI agents and real-time voice and video

The Interactive Avatar platform: a real-time 3D avatar in a rendered conservatory scene, an options panel controlling moods, emojis, gestures, poses and camera, and a live chat transcript beside it.
3 providers
OpenAI, Gemini and Groq with automatic fallback
ARKit visemes
audio-driven lipsync on a Three.js talking head
RAG
chunking, embeddings and retrieval built end to end
SDK + API
embed library, facial tracking, published docs
  • Three.js
  • OpenAI
  • Gemini
  • Groq
  • WebRTC
  • WebSocket
  • Deepgram
  • Cartesia
  • MediaPipe

How it was built →

Real-time multiplayer 3D flight game in the browser, with a world generated entirely in code

A light-glider trailing a glowing wake over procedurally generated terrain in Shard Islands, with floating energy cores and a domed beacon on the horizon.
0.003cm
client/server drift over 280m of flight
6× faster
frame time after profiling, 4.3ms → 0.70ms
17 KB/s
wire cost, full 24-player room
20Hz
authoritative server tick
  • Next.js
  • Three.js
  • React Three Fiber
  • WebGL
  • Colyseus
  • Fly.io

How it was built →

E-commerce site for a small business selling digital cross-stitch patterns

The Chart Chic storefront: a serif hero reading 'Patterns that make your hoop feel like home', a watercolour illustration of a woman embroidering, and pattern category pills.
RLS bypass
found and fixed in a Postgres view pre-launch
Signed URLs
download gating tied to fulfilled orders
Verified
reviews restricted to actual purchasers
  • Next.js
  • Supabase
  • Stripe Checkout
  • Vercel

How it was built →

On this site

Fit Check

Paste a job ad, or a link to one, and three AI agents check it against everything on this site, coordinated by an orchestrator you can watch working. It tells you where I don't fit as well as where I do.

Plugin catalogue

47 commercial JavaScript plugins for the Bubble platform, which I've built and kept up to date over the years. Keeping them running for paying customers has taught me more than anything else.

Most installed

  • VideoJS Advanced + MUX (All Media)1.1K installs
  • Google Maps Geometry/Drawing + W3W368 installs
  • Font to SVG311 installs
  • What3Words (search)180 installs
  • Infinite Scroll174 installs
  • Service Worker171 installs
  • Translate Page164 installs
  • HTML Element138 installs
  • Performance Timing (service worker)138 installs
  • LiveKit (Real-Time Video/Audio)60 installs
  • AI Agent43 installs
  • Scraper API40 installs

Install counts from Bubble's marketplace, September 2026.

AI and real-time plugins

Each of these was released to paying developers first. The AI Agent plugin is the main plugin behind Interactive Avatar.

What the AI plugins do →

See all 47 on Bubble →