This is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass I spend too much time on screens, so for the Touch Grass theme I wanted to build something where the screen is the shortest part of the experience.
Trail Bingo is a single Python script. You tell it where you’re going and how long you have:
python3 trail_bingo.py --place "forest trail near Butwal" --minutes 45
It writes a printable 3×3 nature bingo card. The challenges fit your place, the current season and your time: spot something green smaller than your thumbnail, listen for a bird you can’t see, find three shades of brown. The center square is always “stand still for one full minute”. The card ends with a reflection question to answer on the way home.
You print it, put your phone in your pocket, and go outside.
Video Demo: https://drive.google.com/file/d/1lEXove5MtEjXOkQ2nbnzbz4-F-Gqb97W/view?usp=sharing The challenges are written by a open-weight model, gemma4, running locally through Ollama. The script sends a request to localhost:11434, so there’s no API key, account or cloud.
The design is deliberate:
The AI does one job. It writes context-aware challenge ideas. Everything else is plain Python and HTML.
The prompt does the real work. It supplies place, season and duration, asks for a mix of seeing, hearing, touching and smelling, caps each item at 10 words, and tells the model to leave nature unharmed.
JSON mode keeps a small model reliable. Ollama’s format: json stops it from rambling around the answer.
There’s a fallback. If the model isn’t running or returns bad output, a built-in set of 12 challenges takes over, so the tool never leaves you stuck at a trailhead.
The output is plain HTML with print CSS, so it fits one page and works on any printer.
I built it by vibe coding with Claude, then read through and tested it myself.
Trail Bingo has to work in the one place cloud AI doesn’t: standing at a trailhead with no signal.
It runs offline. After a one-time model download, it needs no internet.
Your location stays yours. Where you walk and when never reaches a server I don’t control.
It costs nothing to run. Every card is free, with no rate limits or API bill.
I can swap and change things. Switching models is one flag (--model), and the prompt is plain text I can edit to make birding, kids’ or foliage versions. The same setup could use a multilingual model for Nepali cards, or be fine-tuned on a local field guide. A closed API would make each of those a pricing, privacy or policy question.