← Back
Ruby-Austria

Ruby-Austria/treasure_hunt

Location-based treasure hunt platform for conferences — Rails 8.1 PWA, GPS clues, teams, hints, live leaderboards. Built for RubyConf Austria 2026, open-sourced for any organizer.

View on GitHub ↗https://hunt.rubyconf.at ↗
Stars
3
Forks
0
Watchers
3
Open issues
0
Contributors
1
Language
Ruby
License
MIT License
Default branch
main
Created Oct 1, 2026Updated Oct 1, 2026

Star growth

Today—
This week—
This month—

Star history will appear here once this repo has been tracked for a couple of days.

README

Treasure Hunt

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.

For conference organizers

You don't need to be a Rails developer to run this. The short version:

  1. Clone and configure. Edit config/conference.yml — event name, city, dates, theme color, logo. That's the whole rebrand.

  2. Create your hunts. Deploy, log in as admin, and build hunts and clues in the admin UI — or write them as seed files.

  3. 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
  4. Deploy. Pick your platform:

    • Railway — railway.toml included; create a project from this repo, add a PostgreSQL plugin, done.
    • Kamal — config/deploy.yml included for any VPS with Docker.

    Player traffic at a conference is a few hundred phones — a small box is plenty.

Design guidance

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.

Features

  • 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

Tech stack

  • 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

Development

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 suite

Default 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.

Contributing

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/.

License

MIT. Originally built by Muhamed Isabegovic for RubyConf Austria 2026.