Here’s a little weekend project I’ve been hacking on: Trade Tycoon, a Monopoly-style game that I built for fun.
It started with a lazy weekend and a plan to play Monopoly with some school friends. Easy enough, except we’re now spread across multiple cities. We figured we’d find an online version, get everyone into the same game, and spend a couple of hours playing.
We tried browser-based games. We tried apps from the Play Store and the App Store. None of the options we tried worked well for our group.
Some had strange disconnection glitches. Others had interfaces that made a familiar game unnecessarily difficult to play. Cross-platform support was another problem: some of us wanted to join from a browser, while others were on their phones. Very few options worked well across those devices. And several games wanted us to purchase the app or pay inside it before we could even get started.
All we wanted was to play a board game together.
So I decided to hack together my own version.
Scratching my own itch
This wasn’t a startup idea or a plan to reinvent board games. I just couldn’t find a version that worked well for our group, and building one sounded like fun.
I had a fairly short wish list. It should be easy for friends in different cities to join a game. It should work on the devices people already use, without making everyone install the same app. It shouldn’t require everyone to buy something before playing. And it should make the game itself enjoyable rather than forcing players to spend time working around the interface.
The rules didn’t need reinvention. Buying property, collecting rent, bargaining with friends, and watching a promising game turn on an unlucky roll are already entertaining. The aim was to make that experience easier to share online.
There was a second reason I wanted to build it, though, and that one was more technical.
An excuse to try Expo Web
I also wanted to see how well Expo and Expo Web would work for a game that runs across web and mobile. A property trading game seemed like a good test: there’s a board, dice, tokens, trading screens, and a lot of small interactions that need to feel right on both a phone and a desktop.
It gave me a chance to experiment with shared code and different screen layouts while building something I’d actually want to play. That was a lot more interesting than another demo app.
What I ended up building
Trade Tycoon is a Monopoly-style property trading game. Players roll dice, buy properties, charge rent, trade with one another, build houses and hotels, and try to avoid bankruptcy.
There’s an offline pass-and-play mode, where people share one device, and browser-based online multiplayer with rooms that friends can create and join. The project targets web, iOS, and Android through Expo, although that doesn’t mean every multiplayer capability has the same support on every native platform yet.
I didn’t want the feature list to become the point of the project. It mattered more that players could understand whose turn it was, what they could do next, and what had happened since their last turn.
The small details turned out to be important. A trade should only succeed when both sides have the assets they offered. An auction shouldn’t accept an invalid bid. A player shouldn’t be able to choose their own dice roll in an online game. Those are rules everyone assumes a board game will enforce, and everyone notices when it doesn’t.
A little engineering along the way
I kept the game rules in a shared TypeScript package so offline and online play follow the same rules. For multiplayer, the server handles turns and updates the other players, with support for reconnecting to a session. There are still things to polish, especially across devices, but that’s part of what makes a side project worth building.
Check it out
Most of the software I build has a client or business requirement behind it. This one started because I wanted to play a game with old friends. I got to try Expo Web along the way, and there’s still plenty I want to improve.
Trade Tycoon is open source on GitHub, with instructions if you want to run it yourself. Give it a look, and let me know what you think—especially if you find a quirky rule or an awkward bit of the interface.
Hopefully the next lazy weekend game with my friends involves less time looking for an app and more time actually playing.