Monopoly 3D

For my final group capstone before internships, I worked with four other students to recreate Monopoly as a full 3D multiplayer web game. The idea was ambitious, and several professors advised us not to go for a 3D setup because of the limited time and technical overhead. We decided to take the risk anyway, and it paid off. I took on a wide range of responsibilities across both the frontend and backend. I created the full 3D game board using Three.js, built key interfaces like the piece selection screen and player profile page, developed the full turn logic system, and handled deployment when it mattered most. I also set up our initial Docker configuration so the entire stack could be run quickly and consistently across every team member's machine. This article focuses on the systems I personally built, how I approached each problem, and what I learned by owning those parts under pressure.
Small demo (no audio):
3D Board Design and Logic
I had no prior experience with Three.js. I learned it as I went, using documentation and quick tests to figure out how to work in 3D space.
To start, I placed a high-resolution image of a Monopoly board onto a flat plane. That gave me something visual, but it was not interactive. So I created individual 3D tiles to represent every property and space.
How I approached it:
I placed the four corner tiles first: Go, Jail, Free Parking, and Go to Jail. These were my fixed reference points
I measured the remaining space between the corners and divided it evenly into nine segments for each side
I used a helper function to place and size each tile automatically
Every tile received a unique index that matched its position in the Monopoly path. This simplified movement and logic handling
By using fixed anchors and math-based spacing, I avoided hardcoding coordinates. The layout was clean and accurate, and I could modify it quickly if needed.
Piece Selection and Player Interfaces
At the start of each game, players needed to select their game piece. I built a 3D selection interface where players could scroll through options and confirm their choice. Once selected, a piece became unavailable to others.
I also built the player profile page, which showed each player’s money, properties, and status. It was styled using Chakra UI and updated in real time using data from the backend.
Turn Management System
I developed the complete turn system from scratch using Spring Boot. Every player had a one-minute countdown to complete their turn. If they ran out of time, the system would skip them and pass control to the next player.
Key features I implemented:
Countdown timers tracked using a ConcurrentHashMap
Automatic switching between players
Auction mode with frozen timers
Scheduled backend service that ran checks every second
Real-time sync between frontend and backend for remaining time display
Turn order based on a defined player sequence
This logic ensured that games moved forward and prevented players from stalling the session.
Docker and Collaboration
At the very beginning of the project, I created a full Docker Compose setup that containerized the backend, frontend, and database. This made it easy for every team member to spin up the entire stack with a single command. It saved time, prevented machine-specific bugs, and kept our environments consistent.
Google Cloud Deployment
Deployment was supposed to be handled by a student from the DevOps specialization, but he was not able to get the app running. With only two days left before the final presentation, I stepped in and deployed the game myself.
I used a Linux VM on Google Cloud, configured reverse proxies, exposed the backend API, and made sure the game was fully online. This allowed our professors to join and play the game with us during the final demo, which made a big difference in how the project was received.
Challenges and Takeaways
This project pushed me to learn quickly and deliver under real pressure. I had to move between front-end logic, 3D modeling, backend services, Docker configs, and cloud deployment. What helped me most was breaking every challenge into smaller steps and always thinking about how each part would connect to the rest.
Things I learned:
How to model and position 3D elements using code
How to sync React with Three.js for UI and game state
How to structure backend logic for real-time games
How to keep a team aligned by removing technical blockers early
How to take responsibility when things go wrong and make sure the project is delivered
Result
We finished the project with a fully working 3D Monopoly game, live on the web and ready to play. The professors joined our session during the final demo and played several turns, which was only possible because of the last-minute deployment I handled.
The systems I built, from the 3D board to the turn engine and the Docker environment, helped turn a risky idea into a playable game that worked from start to finish.