Projects

Parkway

Side project — Design and engineering

In progress · 2026

rayhankhilji/parkway


Playing a property-trading board game with people who are not in the room usually means an online version buried in ads and sign-up walls. Parkway is the one that just opens: a link, a six-character room code, up to five players, no accounts.

The hard part is not the rules, it is the interactions between them. Three doubles on a turn that would otherwise have sent you to jail. A card moving a player onto a mortgaged railroad. A hotel purchase that frees the last four houses somebody else was waiting on. Bankruptcy cascading into a creditor who is themselves in debt.

So the whole thing is arranged to make those exhaustively testable. Every rule lives in one zero-dependency TypeScript package shaped as a reducer — state and an action in, new state and events out. It imports no framework, touches no Node built-in, and never calls Date.now() or Math.random(). Time and randomness arrive as data, which means a full game runs inside a unit test in milliseconds.

The server is the only authority; clients post actions and render what they are told, down to the dice. Randomness comes off a seed held in game state and advanced by a pure function, so folding the action log over the initial state reproduces any match exactly — and the seed is stripped from every outbound payload, because a client holding it could predict every roll to come.

The board itself is data. The engine hardcodes no square, it reads a pack declaring squares, rent tables, groups, build costs and both card decks, which means rules can be tested against a twelve-square synthetic board and an alternate board is a config change.

Back to Projects