v1 Completed

Passive

A modern, original financial-freedom board game for the browser with WebRTC multiplayer and a deterministic game engine.

Project Passive
Status v1 Completed
Published July 2026
Key Tags JavaScript, WebRTC, PeerJS

Play Passive

Build income that outlives the paycheck. Play solo against AI opponents or with friends over a shared link. No installs, no build step, no backend.

Overview

Passive Title Screen

Title screen of Passive

PASSIVE is a browser board game I built around a financial freedom premise: players buy assets, manage expenses, and work toward covering their monthly costs with passive income. The interesting build challenge was making the same rules work for solo play, AI opponents, and a shared multiplayer session.

I separated the game engine from the interface and network layer, then used seeded randomness and headless bot playthroughs to test rules and replay behavior. Each turn represents a month, with income, expenses, and player decisions changing the game state.

The game uses scenarios and a debrief to invite players to explore ideas such as cash flow, reserves, debt, and giving. It is a learning game rather than a measure of financial outcomes.

Two Ways to Play

Passive Board

The 3D ring board tracking money, momentum, and leverage in real time.

  • Solo — face 1–4 AI opponents with distinct personalities (Conservative keeps reserves and stays creditworthy; Aggressive leverages hard and chases ROI; Balanced sits between).
  • Multiplayer — host a room, share the 5-letter code or link, and play peer-to-peer over WebRTC (via PeerJS). The host coordinates turns and game state, which helps limit conflicting actions. The mode also includes chat, trades, an optional turn timer, and AI takeover after a disconnect.

What Makes it Different

Passive Setup Screen

Game setup with scenarios, professions, and customizable house rules.

  • Market cycles that make sense — recessions crash stock cards and property offers; booms inflate them. Buying the dip is a real strategy.
  • Momentum — donating, paying off debt, and buying cash-flowing assets charge a meter; a full meter grants a surge (double income, a deal discount, or instant cash).
  • Skills — 12 permanent perks earned through achievements (own 3 rentals → Landlord: +10% rental income).
  • Play As Yourself — enter your real salary, expenses, and debts and play your own life.
  • Scenarios — curated challenge starts: Deep in Student Debt, Just Laid Off, Windfall, No Clue, Crash Opening, and The Late Start.
  • Coach Mode & Debrief — short lessons at teachable moments, and a post-game breakdown of what you did right and wrong, drawn from your actual stats.

System Architecture

The engine is a module without DOM or network dependencies. It takes game state and an action, updates the state, and appends a readable log entry. A seeded RNG supports reproducible playthroughs; the host coordinates the multiplayer session.

Technical Highlights

  • ✓ Pure Game Engine: Runs identically in the browser and in headless Node.
  • ✓ True P2P WebRTC: Host-authoritative session via PeerJS.
  • ✓ Deterministic RNG: Supports reproducible game sequences and tests.
  • ✓ Synthesized Audio: Full WebAudio sound effects (no audio files).
  • ✓ Headless Testing: Automated bot playthroughs to check financial invariants.

Zero-Dependency Frontend The whole game is built using static files. It runs completely in the browser, hosted on Cloudflare Pages. There is no build step or bundler needed.

Development & Testing

A robust headless testing script (smoke-test.js) allows playing full bot games under every house-rule configuration to check data integrity, deterministic replay, scenario rules, trades, and financial invariants. This testing framework was crucial for balancing the game’s economy.

← All Projects Markus Berlit