Year
2025
My role
Designed the game and built both versions of the app
Tools
JavaScript, Leaflet, Astro, Python, Streamlit and MongoDB
Data
OpenStreetMap

Play the Ottawa game

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.