This is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass
What I Built
StrideHunter is a free, open, install-free scavenger hunt PWA. An organizer (parent, teacher, team lead β or just you, for yourself) describes a place, picks walk/run, effort level, and quiz count, and gets a complete outdoor quest: point-tiered missions (50/150/300), POI quiz stops with typo-tolerant answers, a 500-pt golden finale, countdown with speed bonus. Players scan one QR code β no account, no app install β and go outside to play it.
It's for three cravings I kept seeing:
- desk workers who sit all week and need a reason to move,
- hosts who want to take a crew outside without planning for hours, and
- teen squads who'll go anywhere if it's a game.
The phone becomes a compass, not a couch: missions only resolve out there β photos at viewpoints, quiz answers in front of statues, GPS check-ins at bonus stops.
Features
- Choose your effort: Chill / Normal / Beast, plus walk / run modes and time-of-day adaptation
- AI quest generation (BYOK OpenRouter or local Ollama): point tiers 50/150/300/500, golden mission, POI quiz stops with lenient typo-tolerant answers
- Outdoor-proof play: GPS βyouβre closeβ hints with honor fallback, countdown + speed bonus, offline PWA after first load
- Honest sharing: the link carries the whole quest (capped, trimmed, QR-friendly); draft β edit gate β publish flow
- Privacy-first: no accounts, no analytics; hunt data lives in the link, API keys stay in your browser (session-only unless you opt in)
Demo
| Generate | Dark theme, mobile |
|---|---|
![]() |
![]() |
Live demo: StrideHunter app is deployed via GitHub Pages.
Try the zero-setup demo hunt first β no key needed - just scroll to the bottom and click "Try demo instead" button.
Code
GitHub repo: π§ StrideHunter
index.html tabs (Generate / Share / Play) + settings drawer
css/style.css theme vars, dark mode, 44px touch targets
js/app.js everything (~1200 lines, plain scripts, zero build)
js/prompts.js prompt templates (effort/quiz/weather/fallback branches)
sw.js offline PWA (dev default OFF)
The core trick is the share link β the entire quest lives in the URL hash, so there's no backend to run.
And the AI output is never trusted blindly: JSON is extracted from plain model text, validated, organizer-approved in a preview gate β plus an unverified flag (gated in code, so models can't self-apply it) marks anything the AI guessed while map data was down.
How I Built It
- Open-weight models, BYOK style: generation runs on open models ( google/gemma-4-31b-it, or free Nemotron) through OpenRouter with your own free key β or fully local via Ollama. Deliberately no structured-outputs requirement: the app parses JSON out of plain text, so any instruction-following model works, free or paid.
- Zero-build vanilla JS on free static hosting (GitHub Pages): no framework, no bundler, no server. If it can't be served from a static folder, it doesn't ship.
- Open data instead of a POI vendor: OpenStreetMap (Overpass/Nominatim) + Open-Meteo, with endpoint fallbacks, caching, and request politeness baked in after real-world 504s taught us respect.
- Open libraries, vendored: QR encoder, confetti β pinned locally, working offline.
- Open process: prompt templates live in the repo, no telemetry, tracking, etc.
Why Does Open Innovation Matter?
Honestly? This project exists because everything was open.
- No budget meant no POI vendor β OSM's free data plus three public mirrors (with fallbacks I only needed because they were transparent about their limits) replaced a contract.
- No AI budget meant BYOK open-weights instead of a platform lock-in β and designing for βany model that emits JSONβ made the app more robust than a single-model integration would be.
- No backend budget meant inventing the self-contained share link, which turned into the best feature: private-by-architecture (your hunt never touches my server, because there isn't one), offline-capable, and forkable by anyone β clone the repo, serve the folder, run the demo with zero keys.
Openness wasn't the theme of this build. It was the building material.


Top comments (0)