A location-based treasure hunt platform for conferences, built with Rails 8.1. Originally created for RubyConf Austria 2026, where attendees explored Vienna solving GPS-verified clues, and now open source so any conference organizer can run their own hunt.
Live instance: hunt.rubyconf.at — the original RubyConf Austria deployment, kept online as a reference.
Players walk the city with their phones: each clue unlocks when they get close to the real location. Teams, hints on cooldowns, live leaderboards, a real-world treasure endgame — all as an installable progressive web app that keeps working on shaky venue WiFi.
You don't need to be a Rails developer to run this. The short version:
-
Clone and configure. Edit
config/conference.yml— event name, city, dates, theme color, logo. That's the whole rebrand. -
Create your hunts. Deploy, log in as admin, and build hunts and clues in the admin UI — or write them as seed files.
-
Learn from a real example.
examples/rubyconf-austria/contains the two actual hunts that ran in Vienna (35 stops across the city, hand-validated coordinates and radii, hints tuned over weeks of playtesting). Read it to see what a good hunt looks like, or load it to try the app:bin/rails runner examples/rubyconf-austria/seeds.rb
-
Deploy. Pick your platform:
- Railway —
railway.tomlincluded; create a project from this repo, add a PostgreSQL plugin, done. - Kamal —
config/deploy.ymlincluded for any VPS with Docker.
Player traffic at a conference is a few hundred phones — a small box is plenty.
- Railway —
Writing good clues is the hard part, and it's not a code problem. See db/data/hunts_draft.md and db/data/vienna_locations.md for the working notes behind the Vienna hunts, including the hint policy (never name the place in a hint) and how radii were tuned per landmark.
- GPS treasure hunts — sequential clue solving with proximity-based verification
- Team play — form teams, share progress, claim treasure together
- Hint system — reveal hints with cooldown timers
- Temperature feedback — cold / closer / warm / hot proximity indicators
- Live leaderboard — per-hunt rankings
- Treasure endgame — solve all clues to reveal a real-world treasure location
- Admin UI — manage hunts, clues, locations, and attendees without touching code
- Installable PWA — home-screen app with offline support via service worker
- Backend: Ruby 3.4 / Rails 8.1 / PostgreSQL
- Frontend: Hotwire (Turbo + Stimulus) / Tailwind CSS
- Infra: Docker + Kamal or Railway, Solid Queue/Cache/Cable
- CI: GitHub Actions
bin/setup # install deps, create db, seed
bin/rails runner examples/rubyconf-austria/seeds.rb # load the example hunts
bin/dev # run the app (Procfile.dev)
bin/rails test # test suiteDefault admin login after seeding: admin@treasurehunt.io / admin123456 (override with ADMIN_PASSWORD, change immediately in production).
Credentials: a placeholder config/credentials.yml.enc ships with a local config/master.key (gitignored). Regenerate before production with EDITOR="nano" bin/rails credentials:edit.
Issues and pull requests welcome. If you ran a hunt at your conference, tell us about it — and consider contributing your hunt as another example under examples/.
MIT. Originally built by Muhamed Isabegovic for RubyConf Austria 2026.