The Ottawa game
A team game played on foot across downtown Ottawa. Teams complete challenges at landmarks for points, spend them to take over the city’s zones and draw cards that curse each other. It runs in any phone’s browser, with no accounts or server.
- Year
- 2025
- My role
- Designed the game and built both versions of the app
- Tools
- JavaScript, Leaflet, Astro, Python, Streamlit and MongoDB
- Data
- OpenStreetMap
The game
Two teams, orange and pink, race around downtown Ottawa on foot. Each of the 23 challenges, at landmarks from the National Gallery to the ByWard Market, earns 100 to 300 points. Teams spend their points by depositing them in the zone they’re standing in, and whichever team has deposited more in a zone controls it. For 100 points, a team can draw a card: a curse that holds the other team up, an advantage, or risky trivia to bet points on. When time runs out, the team controlling more of the 9 zones wins.
How I built it
- I first built it in Python with Streamlit, for a game played by about 60 people in eight groups. A shared MongoDB database kept every phone in step, and each phone’s location told the app which zone its group was in.
- The public version runs entirely in the browser, with no server or accounts. Each team keeps score on one phone, and after every move it sends the other team a link that carries the game. Each team owns its half of the game and numbers its own moves, so updates can arrive in any order, or twice, without conflicts.
- Phones find their zone from the browser’s location, allowing for GPS error near the edges. If location is off, players choose their zone on their honour.
- The rules know nothing about Ottawa: a city is just its zones, challenges and cards, so other cities can be added.
- Nothing is stored except on the players’ phones and in the links they choose to send.