case study · designer & engineer, solo · 2026 — present

Wahala City.The house changes the rules.

Wahala City logo

Personal project · set in Abuja

wahalacity.com ↗

Wahala City is a roguelike that runs in a phone browser, set on a real street map of Abuja. A hundred houses stand in ten districts round House 101; you take them one at a time by surviving a run of short games, while the house changes the rules on you as you go.

I designed and built all of it: 24 games, a city you can actually walk, a daily house everybody plays on the same seed, a developer-only district behind a six-question gate, an out-of-run currency that pays rent, and rooms where two people play whot, chess or a typing race over Supabase Realtime.

The part I care most about is that it's fair. Every run is dealt from a seed by a pure engine, and before a win counts the server replays the player's taps through the same reducer. A score you didn't play doesn't exist.

stack

  • Next.js 16
  • React 19
  • TypeScript
  • Supabase
  • Postgres
  • Realtime
  • MapLibre GL
  • PWA
  • Netlify
  • node:test

Every win is replayed

A deterministic, seeded engine with no clock and no React inside it. The server folds the player's logged inputs through the same reducer to verify a run; 435 tests hold the table and the replay to the same answer.

A city as the menu

MapLibre GL over OpenFreeMap tiles, restyled to print: semantic zoom from district plates to streets of houses, a progress line drawn with line-gradient, and houses that build up as the camera lands.

Twenty-four games, one contract

Each game is a small pure module — deal, step, payout — with its own clock: seconds for a glance, none for a stream, time sized to the line for typing. House rules compose over all of them without any game knowing.

the work

The Wahala City map of Abuja: ten district plates round House 101, a crown on the middle plate
The front door is the city: ten districts round House 101, opened in order.
An Eyeball board: two fields of dots and a twenty-second clock
Eyeball: a glance, then the fields go dark. Twenty seconds, no time to count.
The developer gate: six questions, deal
The developer's door: six questions, fifteen seconds each, all six right.
The city on a phone with a chips purse and a collect button
Phone first: the same city, rent waiting to be collected.
A house sheet: the run, its pay, the landlord at the door, the house rule and the deck
A house's terms at a glance: the rule it plays under and the six games it deals.
The dark quarter drawn as a circuit board, with a terminal-style sheet
The dark quarter, for developers: a circuit board on the map and a terminal for a sheet.