A tiny browser game for the ice hockey trip to Czech Republic. Everyone opens the same link on their phone and it works like a shared "Kadan Olympics" scoreboard: log points for mölkky, minigolf, swimming races, beer pong, shootout contests, karaoke — whatever the group gets up to — and watch a live leaderboard crown the trip champion.
No installs, no accounts. Just a link.
- Leaderboard — live-updating group ranking with medal counts (🥇🥈🥉)
- Log a result — pick an activity, pick who took part, assign places (1st = 10pts, 2nd = 7pts, 3rd = 5pts, 4th = 3pts, took part = 1pt), or enter custom points for anything weirder
- Feed — full history of everything logged, with delete/undo for mistakes
- Players & Activities — add/remove people and activities on the fly
- Works fully offline on a single device too (see "Local mode" below) if wifi at the bar is bad
- You - Beer - Now
Just open index.html in a browser, or serve the folder:
python3 -m http.server 8000Without a Firebase config it runs in local mode: state is saved only in that browser's storage, so it's perfect for testing but won't sync between people's phones.
This uses Firebase Realtime Database, which has a generous free tier and needs no server of your own.
- Go to the Firebase console, create
a new project (any name, e.g.
czech-trip-2026). Google Analytics is not needed — you can decline it. - In the project, go to Build → Realtime Database → Create Database.
Pick a region close to Czech Republic (e.g.
europe-west1). Start in test mode — that's fine for a private group app with a link only your friends know. - Go to Project settings → General → Your apps, click the
</>(web) icon, register an app (no hosting needed), and copy thefirebaseConfigobject it gives you. - Paste those values into
assets/firebase-config.js, replacing theREPLACE_MEplaceholders. - (Optional but recommended) In Realtime Database → Rules, set an
expiry-free-but-scoped rule so it's not wide open to the entire internet
forever, e.g.:
This is the default "test mode" rule — fine for a short trip. Firebase test-mode rules auto-expire after 30 days, so nothing lingers open afterwards. (The
{ "rules": { ".read": true, ".write": true } }apiKeyetc. infirebase-config.jsis meant to be public for client apps like this — access control comes from these rules, not from hiding the config.) - Commit and push
assets/firebase-config.jswith your real values.
Easiest option: GitHub Pages. This is a repo-owner-only setting, so it has to be done by hand in the GitHub UI — no CLI/API shortcut for it here:
- Push this repo to GitHub (already done if you're reading this from the repo).
- Go to Settings → Pages on the repo.
- Under Build and deployment → Source, pick Deploy from a branch,
then choose the branch this app lives on (e.g.
claude/ice-hockey-trip-game-52px4i, ormainonce it's merged there) and folder/ (root). Save. - GitHub gives you a URL like
https://<you>.github.io/magickadan/— send that to the group chat.
Pick a place for each player in a logged result:
| Place | Points |
|---|---|
| 🥇 1st | 10 |
| 🥈 2nd | 7 |
| 🥉 3rd | 5 |
| 4th | 3 |
| Took part | 1 |
| Custom | anything you type — for jokes, dares, best goal celebration, etc. |
Preloaded activities: Mölkky, Minigolf, Swimming race, Shootout contest, Beer pong, Flip cup, Darts, Pub quiz, Karaoke — add more from the Activities tab any time (e.g. "Hockey game MVP", "First round bought").
Plain HTML/CSS/JS, no build step, no framework. Firebase is loaded via CDN
<script> tags in compat mode so there's nothing to npm install. State
falls back to localStorage automatically if Firebase isn't configured or
fails to connect, so the app never hard-fails without wifi.