From Ashes.

You play Kayo, who escaped when a private army burned his village, and now works a scrapyard in Port Sable while searching for his lost sister. The game is built from scratch on three.js: a living town with a day and night cycle, weather, cars, animals and a fully voiced cast.
I designed it the way I design product: a core loop that teaches itself, progression that rewards curiosity, and the systems around it (accounts, cloud saves, a real shop, an admin dashboard) that make it something people can actually play and a team can actually run.
How it plays.
Core loop and economy
- Copper coils are scattered across the yard, and some sit on piles and roofs only a climber can reach. Collect them, carry them, then sell to Mama Efe at her table for shillings.
- Shillings fund everything: outfits, vehicle repairs at Tobi's workshop and a pocket that gets lighter if Kayo is knocked out.
- A rival, Dayo, races Kayo for the most copper. Whoever delivers more gets paid first, and beating him earns a secret bonus. He can be fought too.
- Side hustles feed the same economy: catch chickens by creeping up on them (sprinting scares them off), then roast, eat or sell them. Up to four birds show in Kayo's hands.
Missions and guidance
- Every chapter is a list of steps that read live game state. The first unfinished step becomes the current objective, so the story reacts to what the player has actually done.
- An objective card shows the chapter, the goal, a contextual hint and the distance to the target, and flashes when a new objective starts.
- Guidance is layered: a minimap and full map, waypoints, route arrows painted on the ground and on-screen markers. Each can be switched off.
- Prompts adapt to the input device. Keyboard players see key hints, touch players get a thumb stick and action buttons.
- A mission-complete banner shows what was earned. Checkpoints save progress, and getting caught by a patrol sends you back to the last one.
Body and progression
- Health and stamina bars with real consequences. Running, jumping and fighting drain stamina, and at zero Kayo is spent and breathing hard. Food heals, and a knockout costs shillings.
- A local gym, the Iron Yard, has a cement barbell and iron dumbbells. Each session costs stamina and the muscles need rest before the next one. Strength levels 1 to 5 make punches and the machete hit harder.
- Weapons are unlocked by the story, not bought: a machete for catching the thief, then a Dane gun in Chapter 3. A weapon wheel (Tab, the mouse wheel or 1 to 3) swaps between hands, machete and gun, and H holsters.
- Aiming is a skill. Right click to aim over the shoulder, hold Shift to steady your breath, and the damage you deal is shown on every hit.
Challenge systems
- Stealth at the Harbour Gate: guards patrol with torches whose light shows on the ground, crouching halves how far you are seen, and a stealth meter tracks suspicion. Running is loud and a caught counter tracks your mistakes.
- Fist fights with punch, block and dodge. Crowds gather around a brawl.
- Cars can be driven, hotwired or have their locks picked, and owners chase you down. A mechanic's workshop repairs dents and broken glass for a price.
- Chases are tuned so they stay fair: the thief tires after a few seconds, so he is catchable but never easy.
A world that reacts
- Townspeople have jobs, moods, rumours, routines and a three-step relationship meter with Kayo. Befriend someone and they start sharing rumours.
- Each stranger speaks in the accent of where they are from (Nigerian, Kenyan, Tanzanian and South African), keeps one voice through a whole conversation, and is voiced from a generated cast of 24 voices.
- Day and night run on a configurable clock from 10 to 80 minutes, with rain, thunder and wet skin. The radio, music and ambience change with the time.
- Dogs, cats and goats are single sculpted bodies with a lighter version used at a distance, and lizards and birds share the yard.
Meta game and live ops
- Accounts, saves and friends work offline in the browser or on Supabase, behind one shared API. Progress made as a guest moves to the account on first sign-in, and guests get a free-roam taste of the game with a prompt to sign up.
- A shop sells outfits, vehicles and shilling packs. Real-money purchases go through Stripe checkout, and prices are looked up on the server by item id so they cannot be changed from the browser.
- An admin dashboard shows who is playing right now, money coming in and bug reports sent from the pause menu, with separate dev and live databases and a demo mode.
- A built-in story tab holds the chapter outline, the cast and the status of every system, so the writing and the game live in one place.
Engineering and accessibility
- Performance is a feature: LODs for people and animals, a frame-rate cap, render-scale and shadow settings, an FPS and draw-call overlay, and a real loading bar. Asset work cut about 11 MB from the first load, for example a 6.7 MB character file shrank to 0.3 MB.
- Models are built in Blender, driven by an AI assistant over MCP, and exported as compressed GLB files.
- Accessibility is built in: ARIA meters for health and stamina, live regions for objectives and toasts, subtitles for all dialogue, keyboard and touch controls and a full controls reference in the pause menu.

Fist fights
A fist fight with an area boy: punches, blocks, damage numbers on every hit and a vignette when you are hurt.
Next project
Footy Teams