Dhan Sampatti

THE BUILD BOOK

One board.
Three places to play.

A local game with a shared rules engine, portable saves and a warm interface. Explore how a turn moves through the game and how releases reach players.

The rules are shared. The devices are local.

Shared rules and validation feed the Expo game, Android local storage, web local storage and the Windows bundled game.
01

Pure game state

Board data, types, rules and save validation live in lib/game. One reducer decides whether actions are valid. Player property-ID lists are the authoritative ownership model.

02

Local platform adapters

Android uses AsyncStorage, while web and Windows use separate localStorage origins. JSON import/export moves a settled game between them. No backend or account is required.

03

One warm interface

Expo Router provides setup, game, privacy, downloads and settings screens. A shared light/dark palette drives native controls and the board. The first-turn tour advances through real player actions.

Mermaid source
flowchart LR
  Rules["Board · types · reducer · validation"] --> Expo["Expo GUI"]
  Expo --> Android["Android · AsyncStorage"]
  Expo --> Web["Web · localStorage"]
  Expo --> Windows["Windows · bundled web"]
  Android & Web & Windows --> JSON["Portable JSON saves"]

Download the SVG diagram

Follow one landing decision.

This is a synthetic example, separate from your saved game. Asha rolls 2 + 2 and lands on Goa.

waiting

Asha is ready to roll

Balance ₹15,000. No properties. Start position.

Step 1 of 5

Landing-only purchases

Buying is allowed only during the current player’s unclaimed landing decision. Inspection never enables a purchase, and duplicate ownership is rejected.

Always a way forward

Pass is available even at ₹0. Rent and taxes are capped at available cash. Completed landings expose End turn so the device can pass to the next player.

Simple release rules

Start grants ₹2,000 when passed or landed on. Taxes are ₹300, ₹500 and ₹700. Fortune, utilities, transit and corners have no extra effect. Advanced rules and competitive win conditions remain outside this version.

See capped rent in action

For ₹500 rent, transfer ₹300 and leave ₹0.

Mermaid state diagram
stateDiagram-v2
  waiting --> moving: roll
  moving --> decision: unclaimed property
  moving --> completed: rent / tax / neutral
  decision --> completed: buy or pass
  completed --> waiting: end turn

Keep a game. Move a game.

Game save v1

dhan-sampatti.save.v1 stores settled game states. Animation is never serialized. Validation checks names, balances, positions, dice, phases, unique ownership and bounded logs; only supported fields are restored.

Settings v1

dhan-sampatti.settings.v1 stores the theme and tour preference separately. Export settings does not export or replace your game. Invalid files leave the existing settings intact.

Storage failure

Unavailable storage displays a readable notice and play remains available. Export a file to keep a copy. Native sharing can use local files or installed Google Drive / OneDrive providers chosen by the player.

Different website addresses have different saves

The Vercel address and custom domain remain accessible. Export from the old address, then import on the new one. Android and Windows also have their own storage. Imported games are validated and replacement requires confirmation.

Build evidence before publication.

  1. Run lint, type checks, rule/security tests and both web builds.
  2. Verify native and preview gameplay, setup, save/resume, import/export, themes and keyboard controls.
  3. Keep source private. Public release assets belong in the separate downloads repository.
  4. Build signed Android APK/AAB with EAS. Create the Play app and configure its own credentials before internal submission.
  5. Build the Windows installer. Store APPX needs the exact reserved Partner Center identity and certification against the final package.
  6. Use signed commits, merge the verified change, check production HTTPS/metadata, and delete redundant merged branches.

Security boundaries

Desktop content is confined to bundled files, including real-path checks against symlink and junction escapes. Its renderer is sandboxed with Node integration disabled and permissions denied. Untrusted save text is validated and rendered as text.

Free operation

The game works locally with bundled resources and no database, authentication, email, payment or notification service. Manual release workflows use provider free allowances; account setup and store review remain owner steps.

Public downloads & release notes · Privacy