Skip to main content

Lab Notebook · Side Projects

An isometric city builder in React — finished, playable, and small on purpose

In June 2025 we built a complete isometric city-builder game in React: building placement, and five interacting resource systems — money, population, happiness, power, and water. A finished, playable side project, kept in the record precisely because it's small and done, next to the archive's more ambitious, unfinished entries.

JR
Jon RossFounder, vocabotics — 15 years building safety-critical systemsLab report · dated 1 June 2025
Verified by a human. Drafted with AI, verified by a human. Jon Ross, 1 Jun 2025
Living document. Reviewed 1 Jun 2025
Entry date
1 June 2025
Category
Tooling
Access
🔓 Public
Shipped & measuredProven

A real, playable city builder, in React — proof that a UI framework built for forms and dashboards can hold a real-time game loop too.

5
resource systems: money, population, happiness, power, water
Zustand
state library chosen for fast, frequent game-state updates
React 18
isometric rendering + real-time state, in a UI framework

Honest evaluation

Proven

A finished, playable, real-time game with five interacting systems shipped in React — the framework-can-hold-a-game-loop claim is proven on this build.

The evidence — full reasoning behind the verdict

Verdict: proven. The narrow architectural question this project asked — can React hold up under a real-time, frequently-updating game loop without turning into a performance mess — got a direct, working answer: yes, on this build.

The mechanism is specific, not just a vibe: Zustand's subscription-based state model avoided the re-render overhead a heavier state library or naive prop-drilling would have introduced under five interacting, fast-changing resource systems. That's a concrete state-management finding, not just "it ran fine."

What this doesn't prove: that the same approach holds at commercial scale, with a real content pipeline and far more entities on screen at once. The honest scope is a single pleasant build, not a stress test — a genuinely tougher next test would be scaling the same architecture to an order of magnitude more buildings and measuring where the frame rate actually starts to drop.

Not every entry in this archive is a research push or a client delivery. Some are just a good weekend problem, finished properly — this is one of those, kept on the record because it's real, complete, and playable.

What it was

A browser-based isometric city-builder game: place buildings, manage a small economy, and watch five resource systems — money, population, happiness, power, and water — respond to each other in real time, in the classic SimCity-adjacent mould.

What we built

Shipped & measured

A complete, working game in React 18 and TypeScript, built with Vite and state-managed with Zustand. Building placement drives an isometric grid; each placement updates the five resource systems, which in turn affect each other (power shortages dent happiness, population growth strains water, and so on) — a small but genuinely interacting simulation loop, not a static scoreboard.

The real test wasn't the game design, it was the plumbing: could React — a framework built primarily for forms, dashboards, and content-driven UI — hold up under a real-time, frequently-updating game loop without turning into a performance mess?

What we learned — including the honest negative(s)

It held up well, and the specific finding worth recording is about the state layer, not the rendering: Zustand was a strong fit for state that changes fast and often. Its minimal-boilerplate, subscription-based model avoided the re-render overhead that a heavier state library (or naive prop-drilling) would have introduced under a real-time simulation loop.

The honest edge is scope, plainly stated: this is a toy and a learning project, not a commercial game. There's no content pipeline, no balancing pass beyond "it feels fun to play," and no attempt to stress-test the isometric renderer or the resource simulation beyond a single pleasant build. It was never meant to compete with a real city-builder — it was meant to answer one narrow architectural question, and it did.

Where it went / status

Finished, working, and archived as-is — no further iteration planned. Its value sits next to the more ambitious, unfinished entries elsewhere in the record: proof that a small, honestly-scoped project, taken to completion, is its own kind of result, not a lesser one.

What is still open — kept visible

The honest edges, next to the wins. This is what turns 🔬 into 🟢 — honestly.

  • A toy/learning project, not a commercial game — no monetisation, no content pipeline, no players beyond the build itself.
  • Isometric rendering and game-state performance were tuned for a pleasant single build, not stress-tested at scale.

Sources

  1. vocabotics project audit — SimCity Clone (isometric city builder, React 18 + Zustand), Jun 2025vocabotics internal project history · as of June 2025

    We use cookies.