Monopoly Game โ a project by Ahsan Mahmood
A modern Monopoly rebuild for web + mobile โ local pass-and-play, solo vs AI bots, or online private rooms with real-time sync.
A board game with a test suite of more than 200 cases behind it sounds excessive until two players disagree.
Monopoly is easy to play and awkward to implement. The classic rule set is the stated scope here, and that scope includes all the parts people forget: auctions, mortgages, the supply of houses, the rents that depend on what else somebody owns.
Every one of those is a rule that can be almost right.
So the tests are not ceremony. More than 200 Vitest cases are what let three different ways of playing share one rule set without each of them quietly growing its own version of a rule.
Three modes, one engine.
Local pass-and-play for 2 to 6 people around a single device. Solo against bots at easy, medium or hard. Online multiplayer in private rooms, synced in real time through Firestore.
Private rooms rather than open matchmaking, which keeps the multiplayer surface to a group who already know each other and keeps the scope to something one person can stay responsible for.
One engine is the only reason there can be three.
Each mode is a different way of getting turns into the same rules, rather than three implementations that agree with each other right up until the evening they do not. A rule fixed in one place is fixed everywhere, and a rule that is wrong is wrong everywhere, which is easier to find.
The bots use it too.
Three difficulty settings sit over the same rules, so the difference between an easy opponent and a hard one is how it chooses rather than what it is permitted to do.
The economy is deliberately small.
Coins are earned in play and they buy cosmetic tokens and board themes. Nothing bought with them changes a roll or a rent, because a property game where money can be added from outside the game has quietly become a different game with the same board.
It runs in four languages.
Underneath is Vite and React with TypeScript, Zustand for state, Tailwind and Radix UI for the interface, Framer Motion for the pieces moving, and a Workbox service worker making it installable. Capacitor packages the same codebase for a native shell.
Now the limit, which belongs high on any honest page about this one.
It is complete and playable, and it is not deployed. There is no public web address and no store build, so nothing described above is something you can go and open this afternoon.
That is why there is no link here.
A portfolio's unit of evidence is a released thing, and by that measure this one has not arrived. What it is instead is a finished implementation with its rules under test, which is worth describing accurately rather than dressing up as something a reader can check.
What it cost is the last mile.
The engine, the modes, the economy, the languages and the tests are all done. What sits between that and a deployed address is unglamorous in a way that is easy to keep postponing: a domain, a build pipeline, store listings, the paperwork each of those asks for. None of it is hard. It is simply not the part anybody wants to spend a Sunday on.
Finished and unreleased is an honest state for a project to be in.
It is also the state a portfolio is most tempted to describe as something else, which is the reason this page says it twice.
What it does, and what that costs to build
- Local pass-and-play
- Solo vs AI bots
- Online private rooms
- Coin store
- Full classic ruleset
Built with
- Vite
- React 18
- TypeScript
- Tailwind CSS
- Framer Motion
- Radix UI
- Zustand
- React Router
- Firebase
- Capacitor
- PWA / Workbox
- Vitest
Worth knowing
- monopoly
- board-game
- multiplayer
- pwa
- react
- firebase
- capacitor
- game
Who built Monopoly Game?
Ahsan Mahmood built it, as one Vite and React codebase in TypeScript with Zustand holding the state and a Vitest suite of more than 200 cases behind the rules. There is no public link on this page, because the game is finished and has not been deployed anywhere a reader can reach. That is an unusual thing for a portfolio page to say and it is the accurate thing, and a portfolio whose unit of evidence is a released product should be the first to admit when something is not one yet.
Where can I play it?
Nowhere yet, and that is the honest answer rather than a soft one. There is no public web address for it and no native build in any store, so nothing on this page is something you can open today. What exists is a complete and playable implementation with its rules under test, sitting in a repository. Describing that accurately seemed better than describing it as available, since the second version is checkable in about four seconds and this whole site rests on being checkable.
What do the coins buy?
Cosmetic tokens and board themes, and nothing else. Coins are earned in play rather than bought with money, and nothing bought with them changes a dice roll, a rent, or how much cash a player starts with. That boundary is deliberate: a property game where money can be added from outside the game has stopped being the game and become something else wearing its board. The economy exists to give a long-running player something to collect, not to sell an advantage.
How do three modes stay consistent with each other?
One rules engine, and a test suite of more than 200 cases over it. Local pass-and-play for 2 to 6 players, solo against easy, medium or hard bots, and online rooms synced through Firestore are three ways of getting turns into the same rules rather than three implementations of them. That is the only arrangement where a rule fixed once is fixed everywhere. The classic rule set has enough small cases in it that three copies would disagree within a month, and the disagreement would surface as an argument between players.
Does Monopoly Game work on iPhone?
No, and it does not work on Android either yet, because nothing has been deployed. It is built as an installable web app and packaged with Capacitor, so the native path exists in the codebase without a released build at the end of it. There is no iOS release behind any of my work in any case, because there is no Apple Developer account here and nothing I build has shipped to the App Store. The web build is the one that is complete.
https://aoneahsan.com/projects/com.aoneahsan.monopoly