Event Schedule
The phone app teens used at a youth retreat to find their room, court or station — live from the organisers' Google Sheet.
What it is
A phone-first, read-only schedule viewer for the three days of a youth retreat. Teens pick a day and their team and see where to go right now, where to go next, their standings and the brackets; Saturday and Sunday pin their court or station on an aerial map of the venue.
Why I built it
The organisers already ran everything from a Google Sheet, so I didn't want to replace it — I wanted to put it in everyone's pocket. No logins: you pick a day and look things up, and the data is pulled live from the organisers' sheet, which stays the single source of truth.
How it works
Organisers keep typing scores and room changes into their Google Sheet. The server reads it and parses it into one JSON payload; every view (my team, rooms, brackets, standings) is derived from that payload on the phone.
At the venue Google's gviz query endpoint served stale data (missing court assignments, lagging scores). Switching to the sheet's live CSV export made updates near-real-time.
Phones poll every 3–4 seconds with the ETag they already have. The server keeps a 2–4 second single-flight cache, so every phone's poll collapses into roughly one sheet read, and unchanged data comes back as an empty 304.
On Friday a team's first game without a score is the one being played, so the big 'Playing now' card moves on the moment a score is typed into the sheet; knockout matchups fill in from the sheet's own formulas.
Court and station pins were placed on the venue's aerial photo from the organiser's labelled map. A cron sends a web push when a round starts or ends, and on Sunday a WhatsApp worker posts the same message to the group.