Evolutionary Tycoon
An isometric browser management game whose demand is real traffic, not a spawn timer.
The short version
The simulation core knows nothing about the renderer. Phaser only draws — which is what makes the economy testable headlessly and a bug reproducible from a seed.

Phases 0–4 of a 25-phase plan are complete and the build is deliberately paused there. The isometric renderer and the deterministic simulation core work; the art is placeholder, which the live build shows honestly.
How Evolutionary Tycoon works
A 2D isometric tycoon game: turn a roadside lemonade stand into a restaurant chain by converting the vehicles physically passing your plot into customers. The differentiator is that demand is an observable, influenceable traffic flow rather than a timer that emits customers.
The problem
In this genre demand arrives from a spawn timer, which the player cannot see, predict or influence. That makes the core loop opaque: you upgrade and hope. Making demand a physical flow of vehicles across the screen turns the same loop into something you can watch and reason about.
The architecture
One decision carries the project: the simulation is a dependency-free, deterministic TypeScript core with no knowledge of the renderer, and Phaser is a drawing layer fed by a bridge. Six separate RNG streams, an eighteen-slot system pipeline, a command log and an event bus sit behind it. No backend at all — it deploys as a static site.
The interesting decision
Separating simulation from rendering buys five things at once that would each be hard to retrofit: headless tests, economy balance verification in CI, pixel-exact visual regression, bug reports reproducible from a seed, and a "replay the day" feature that is free rather than engineered.
What it does now
Roughly 26,000 lines across 143 source files with 110 test files, a determinism suite, and a simulation benchmark. Phaser 4 was chosen over PixiJS and a custom WebGL2 renderer on a weighted comparison recorded in the repository.
Worth knowing
- The simulation core imports nothing from the renderer, so the economy can be verified without a browser.
- Six independent RNG streams, so adding a system cannot perturb another system’s sequence.
- A determinism suite: the same seed must produce the same world hash, which is what makes a bug report reproducible.
- The engine decision is written down as a weighted comparison of four candidates, not asserted.
- Paused at phase 4 of 25 on purpose, at a gate, rather than drifting — and the live build shows placeholder art rather than pretending otherwise.