Caspian Atom: The Aktau Protocol
A Soviet-era nuclear city-builder where one reactor sustains 150,000 souls in the desert. Built with Babylon.js, TypeScript, and AI tools.
A browser-based isometric city-builder set in Soviet-era Aktau, Kazakhstan. You manage a nuclear-powered desalination city in the desert, balancing water extraction, nuclear power, and district heating.
One wrong move and it's meltdown, drought, or frozen citizens.
The real story
The BN-350 fast breeder reactor operated in Aktau from 1972 to 1999. It wasn't just generating power-it was desalinating Caspian seawater, producing 120,000 cubic meters of fresh water daily for 150,000 people in the middle of a desert.
I grew up there. This game is my way of telling that story.
Read the full story: Building a Game About My Hometown Without Writing Code
Tech stack
| Layer | Technology |
|---|---|
| Runtime | Bun |
| Build | Vite + TypeScript |
| Rendering | Babylon.js (WebGPU/WebGL) |
| Audio | ZzFX (procedural SFX) + Suno AI (background music) |
| State | Custom event-driven GameState singleton |
| Assets | Kenney asset packs (Suburban, Industrial, Roads) |
Core systems
Resource flow
Six interconnected resources drive the simulation:
- Seawater - Extracted from Caspian Sea by pumps
- Fresh Water - Desalinated from seawater, consumed by housing
- Heat - Generated by reactor, consumed by desalination and housing (2× in winter)
- Electricity - Powers everything
- Population - Grows when happy, flees when not
- Happiness - Affected by water, heat, and housing connections
Capacity system
Each producer building has limited capacity. A single distiller can only supply 2 microrayons. Water tanks extend the network by relaying capacity.
1 distiller = 2 microrayons
1 distiller + 1 tank = 4 microrayons
1 distiller + 2 tanks = 6 microrayons
Buildings connect automatically based on distance, nearest first. Once capacity is exhausted, additional buildings remain disconnected.
Reactor temperature
The reactor gains +1°C every tick. Each connected distiller provides -0.8°C cooling.
- Warning at 80°C (visual + audio alert)
- Meltdown at 100°C (game over)
The tension: you need distillers for water, but they also keep you from exploding.
Seasonal heat multipliers
| Season | Heat consumption |
|---|---|
| Spring | ×1.0 |
| Summer | ×0.5 |
| Autumn | ×1.2 |
| Winter | ×2.0 |
Winters are deadly. Plan ahead or freeze.
Building placement preview
When placing buildings:
- Green ghost - Valid placement AND connected (producer has capacity)
- Gray ghost - Valid placement but NOT connected
- Red highlight - Invalid (wrong tile type, occupied)
Dashed preview pipes show exactly what will connect.
Fail states
| Condition | Result |
|---|---|
| Reactor ≥ 100°C | ☢️ Nuclear meltdown |
| Fresh water < 0 | 🏜️ City drought |
| Heat < 0 | ❄️ City frozen |
| Population = 0 | 💀 Extinction |
| Happiness = 0 | ✊ Citizens revolt |
Each ending has a narrative description pulling from real Soviet history.
Visual features
- Isometric 3D with film grain and heat haze post-processing
- Organic diorama terrain with vertex-colored geometry
- Animated water plane using Babylon's WaterMaterial
- Procedural decorations (trees, fences, roads)
- Roaming camels and tumbleweeds that avoid buildings
- Pulsing pipe glow animations
- Building placement dust burst effects
How it was built
This entire game was built using AI-assisted development:
- Claude Code and Cursor as primary tools
- Opus 4.5 model for code generation
- Zero manual code writing
I described features in natural language. The AI wrote TypeScript, Babylon.js scene code, shaders, and game logic. I reviewed, tested, and iterated.
Four days from initial commit to playable game.
Screenshots
Status: Work in Progress
The game is playable but actively evolving. Planned additions:
- Random events (sandstorms, accidents)
- Building upgrades
- Achievement system
- Weather effects
Feedback welcome: me@eone.work