Deterministic distance-based functions place pothole fields and compute the line around nearby hazards.
TypeScript · pure track functionsChaos Riders
Read the road. Find the line. Hold your nerve.

A visual target for the world: a working taxi, market density, warm dust, and a readable route through the street. This is concept art; a captured browser prototype appears below.
Chaos Riders brings the markets, taxis, weather, and roads of Cameroon into a driving world. My work connects creative direction and product engineering: a launch experience that establishes the world, and a playable browser prototype that puts its central idea under your thumb. The larger game remains in development.
The consequential problem
The place needed to shape the driving, down to the next small correction.
A market street asks different things of a driver than a clean circuit. The road is uneven, openings narrow, and the best route changes as hazards approach. Those conditions offered the core interaction: look ahead, choose a line, and keep the machine settled.
The experience also had to make sense in a browser and on a phone. A large imagined world could establish ambition, but a short playable run had to explain what the player would actually do.
- Give the setting a mechanical consequence.
- Make the first run understandable with touch or a keyboard.
- Keep the visual target and the playable build clearly identified.
What I saw
The guidance on the road has to agree with the road itself.
The racing line becomes useful when it responds to the same potholes that can unsettle the car. In the prototype, hazards are generated first, then the line bends around them. Its purpose is legible in motion: it gives the player a path to read, a reason to steer, and a reference for judging the quality of a run.
The decision that changed the system
Build a short loop of anticipation, correction, and earned momentum.
The browser demo begins with a twenty-second clock. Steering selects the route; braking creates room to react; a timed steady action helps control the machine through a hazard field. Clean driving earns flow feedback and a speed boost. Camera response, road motion, and the HUD make the consequences visible.
That compact loop gave the project a concrete center while the regional world, vehicles, and broader game continued to develop.
The line reveals a route through the approaching pothole field.
Steer toward the route and brake when the next correction needs more room.
Time the steady action as the field challenges the car's stability.
Clean sectors trigger flow; impacts and line quality remain visible in the run feedback.
System anatomy / rationale / surfaces
Track math, vehicle response, and presentation share one playable situation.
The launch prototype has its own focused runtime. It pairs deterministic track functions with a Three.js scene and a React interface, while keeping the larger game's engine exploration separate.
Pressure did not decorate the architecture. It determined it.
The visible path and the collision system could describe different versions of the road.
Generate deterministic pothole fields, then use smooth repulsion and road bounds to shape the line around them.
Rendering and collision can query the same track functions at any distance. The route has a mechanical basis.
Steering, braking, timed stability, collision response, and flow operate on the current run state.
Touch · keyboard · frame loopThe rendered road, hazard positions, vehicle, camera, and HUD express the same driving state.
Three.js · React Three FiberThe launch page introduces the world, then loads the playable demo at its explicit play interaction.
React lazy · Suspense · ViteWhat the player sees refers to the same situation the collision loop evaluates.
A small input vocabulary supports anticipation and increasingly deliberate control.
Visitors can understand the setting before committing to the driving interaction.
The system becomes tangible through the places people encounter and use it.
World introduction
Regional imagery connects markets, highlands, rain, and coast to distinct driving conditions.
Playable run
A bounded browser scene puts line reading, steering, braking, and stability under direct control.
Run feedback
The clock, speed, line quality, impacts, and flow make performance inspectable during and after a run.
Vehicle garage
The launch experience introduces the machines and their personalities; model development continues alongside the prototype.
Three.js · React Three Fiber · TypeScript
React · Framer Motion · touch + keyboard
Vite · lazy-loaded demo · WebP imagery
The tools behind the decisions.
Select a tool to see the role it plays in this system.
- Rendering / Playable prototype
Three.js
Road geometry, vehicles, lighting, and hazards share a real-time scene that responds to the player's driving.
Authentic proof

An existing development capture of the playable scene. The road, taxi, racing line, countdown, speed, and line-quality readout are rendered together. This documents the prototype rather than a released full game.

The Bamenda world concept shifts the driving proposition toward highland climbs and control. Regional artwork establishes the intended range; it does not imply that every location is already playable.
What changed in my operating model
A world starts to feel real when a small action changes what happens next.
The strongest connection between the art and the prototype is the demand the road makes on the player. A turn, a patch of broken ground, and the decision to brake can carry as much identity as a large establishing image. The work continues at that boundary: bringing the visual direction closer to the playable response without losing clarity.
The current evidence is a launch experience, a playable browser prototype, and an evolving game and asset pipeline. The broader game and its regional modes remain in development.
- Let the environment determine the interaction.
- Use motion and feedback to explain consequence.
- Show the visual ambition and the running build with equal precision.