stephen.
All projects
web·Oct 2026 – Present·Solo Developer and Designer

Rumble Road

Rumble Road is a browser game built in public, one update at a time. It is plain TypeScript and Three.js with no game engine: the roads, the buildings, the lights and the weather are generated in code, on top of a few CC0 models. The simulation runs along the road (distance forward and across) on a fixed 60 Hz clock, so it can also run with no graphics at about 160 times real time for balancing and tests. It has four roads with their own look (country, dusk, a lit city at night, desert), a Storm mode with aimed lightning, weapons, traffic with trucks, prize money and a Garage, a ghost of your best run that you can share with a short link, and support for touch, keyboard and gamepad. It installs like an app and plays offline. The website around it has scroll-driven motion built with GSAP and Lenis.

Bikes racing down Country Run, a green road with hills
1 / 4

Drag or use arrow keys

Stack

  • TypeScript
  • Three.js
  • Vite
  • GSAP
  • Vercel Functions
  • Upstash Redis

Highlights

  • Gameplay runs along the road, never in world coordinates, and simulation and drawing are separate, so the whole game can be stepped and tested without rendering. A headless runner plays hundreds of races to tune the difficulty
  • Four roads with generated scenery: terrain, tree chunks and buildings are built and culled per road, with country, town and city zones that change the traffic and the look
  • Storm mode: rain, a wet road and lightning that is marked on the road first, with some strikes aimed at where you are heading, scaled by difficulty and checked with a script
  • Share your best run as a link: the path is compressed to about 2,000 characters (a third of the first version) and stored behind an 8 character link by a small serverless function
  • Rival AI that rides like a person: reaction times, lane dodging, noticing hazards with a probability, and a catch-up curve tuned with the headless runner
  • Touch, keyboard and gamepad controls with rumble, and an installable offline build with a service worker