This is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass
What I Built
This year, search and rescue teams kept pulling people off mountains after an app sounded sure and was wrong.
- Mount Shasta, California: three hikers told the sheriff they relied on Gemini for the route and what to pack. The sheriff said it advised them to bring far less food and water than they needed. They summited at 7 p.m., seven hours past the noon turnaround, and spent the night lost in Mud Creek Canyon.
- The Tatra Mountains, Poland: two hikers asked ChatGPT for a shortcut. The rescue service flew them off a north face.
- British Columbia: Google Maps told three teenagers the Howe Sound Crest Trail would take 5 hours and 13 minutes. It takes 8 to 14. One of them was airlifted out.
So I built TrailTruth, a phone app that works the other way round. The map answers, and the AI only gets to talk about what the map already proved.
The whole park downloads to your phone: official trails, water, elevation, roads and landmarks from the USGS and the National Park Service. It works with no signal. Ask "where am I?", "how do I get out?", "is there water near me?" or "when does it get dark?" and it answers from that data only. Ask whether a trail is too hard for your kids and it says the map has no difficulty ratings, then gives you the trail's length and climb. Ask about snow, closures or whether a spring is flowing today and it says it doesn't know instead of guessing.
It covers 261 downloadable areas in 41 states and 2 territories: national parks, state parks, national forests (big ones split into sections that fit on a phone), wilderness areas, seashores and parkways.
And it gets you outside when you're not in a park too. Free Walk works anywhere, even from your front door. Tap start and the GPS draws your walk on a USGS topo map, with a marker at every mile, a goal you set in miles or minutes, pins you drop along the way, streaks, and landmarks for your lifetime miles. (Keep the screen on: phones pause GPS for web apps when locked.) Every walk you save becomes part of My map, your own layer that fills in as you go.
Demo
Asking whether a trail is too hard for the kids — the app refuses to rate difficulty, then gives the facts it does have.
The emergency screen: 911 first, then coordinates in three formats, offline.
Planning a route on the map, with climb and daylight counted in.
Paddle routes on the water.
The trail companion: Gemma 3 1B, checked instead of trusted
TrailTruth's trail companion is Google's open-weight Gemma 3 1B, running 4-bit on the phone itself in the browser (WebGPU through WebLLM). It adds a line or two in its own voice, and the map facts sit right under it.
Small models make things up, so every name, number and direction it says is checked against the map before you see it. When I tested the stock model, it said "there is no water near you" with a spring half a mile away, gave a creek a direction of flow the map never states, and warned about cliffs that weren't there. Each of those became a check. When the companion says something it can't back up, it's told exactly which words were wrong and gets two tries to fix them. Anything still unsupported is cut, and the reply says a line was left out.
Staying quiet doesn't count as a pass. If the map holds the answer and the companion dodges it, that's scored as a failure, so the model can't buy safety by saying nothing.
Training it
Stock Gemma 3 1B made something up in most of its answers. So I fine-tuned it (LoRA, on one rented GPU) on answers written by code from the map data, never by another AI, and every training answer has to pass the same checker. Four rounds so far. Each round, I read where it still went wrong and either fixed the training data or added a check.
Testing it blind against Claude
To see how good it really is, I froze fresh test sets from 14 parks the model never trained on, then ran the same questions through the same app, with the same map facts and the same checks, for stock Gemma, my fine-tuned Gemma, and Claude Haiku, Sonnet and Opus. 80 answers per model were graded blind (model names hidden, shuffled) against a written rubric by two graders: a Claude grader and OpenAI's Codex.
Did it make something up? (number of answers, out of the same 80 questions per model, n=80)
| Claude grader | Codex grader | |
|---|---|---|
| fine-tuned Gemma 3 1B, round 3 (in the app now) | 3 | 0 |
| fine-tuned Gemma 3 1B, round 4 (after checks built from these same 80 answers) | 2 | 2 |
| Claude Haiku | 1 | 5 |
| Claude Sonnet | 3 | 3 |
| Claude Opus | 0 | 4 |
| stock Gemma 3 1B | 47 | 51 |
On 80 questions, gaps of a few answers like these (0 to 5) are within noise, so the claim is parity with Claude, not that it beats Claude. The gap that is real is against stock Gemma.
The 80 hand-graded answers are a sample from a bigger run: 490 answers per model (98 questions, each asked in 5 voices, across the same 14 parks), all scored by the app's own checker. On that run the gap is far outside noise: the checker flagged 13 to 17% of Claude's first drafts and 5% of round 3's (stock Gemma: 47%). My model was trained to pass that checker, so read it as playing on home ground, not as proof it beats Claude.
A 1-billion-parameter model built to run on a phone with no signal (both rows are the 4-bit phone build) made things up about as rarely as Claude, under both graders. Stock Gemma made something up in well over half its answers.
Where Claude is still ahead is how much it packs into its one line. Graded on the line alone, Claude was useful in 69 to 72 of 80 and my models in 54 to 58 (Codex: 78 to 80, and 63 to 65). In the app the line never stands alone: the full map answer sits right under it, so the hiker always gets the facts.
Round 4 needed one more round of honesty. Grading it showed its mistakes came from three habits it learned from my own training data: it dropped "this stream may be dry", it said "no trail reaches X" when the map shows X from a different trailhead, and it gave a walking time without saying the trail stops short of the place. Before I caught them it made something up in 10 of 80 answers. I added a check for each (now live, for every model; Claude's answers barely noticed, 3 of 240 changed). Those checks were learned from these same 80 answers, so round 4's 2 and 2 are not a clean test: round 3 is the number to judge. When my model gets caught it rarely manages a good rewrite, so the bad sentence is cut and its line gets thinner. That is the gap round 5 is training on.
How I graded: a Claude model grading Claude is a conflict, so Codex graded every answer too. The two agreed on "made something up or not" 94% of the time. The Claude grader was kinder to the Claude models than Codex was (Haiku 1 vs 5, Sonnet 3 vs 3, Opus 0 vs 4) and no kinder to mine (round 3: 3 vs 0, round 4: 2 vs 2). So the parity held even under the grader that leaned toward Claude.
If someone asks for help in an emergency, the model is skipped completely. They get 911 (for the US areas the app covers), their coordinates in three formats including the US National Grid rescuers use, and the nearest place a rescuer can reach, instantly and offline.
Code
https://github.com/equinoxaifinance-rgb/trailtruth
The repo holds the write-up, screenshots and the sources for every rescue story. The app's code and the trained model aren't published.
How I Built It
- Data: USGS National Map trails and roads, 3DEP elevation, National Hydrography water, GNIS names, PAD-US boundaries, Park Service and state trail data, and OpenStreetMap paths, built into one compressed pack per area.
- Engine: plain JavaScript on the phone. It does routing, "where am I", water, daylight, the trip planner and the walk tracker, and every answer carries its sources.
- Checker: reads the final text and blocks any distance, name, direction or claim the data didn't produce.
- Signal: with reception it adds National Weather Service and Park Service alerts word for word. When reception dies mid-walk nothing breaks: downloads resume where they stopped and the app keeps answering from the phone.
- Tests: before every release, more than 5,500 tests run across all 261 areas, each checking many cases (itemized in CHECKS.md). They include calls for help asked many different ways at many spots in each park (911 first for the US areas the app covers, never dodged), routes compared against the true shortest path, planted lies the checker has to catch, and questions the data can't answer.
Why Does Open Innovation Matter?
Everything that makes TrailTruth trustworthy is open. The maps are public-domain government data and OpenStreetMap. The model is open-weight, so it can live on the phone and keep working where there's no tower, which is exactly where hikers get lost. A closed model in the cloud can't answer you on a ridge with no bars. And because the weights are open, I could measure where Gemma went wrong and train it out, instead of hoping a vendor would.
Prize Categories
Best Use of Gemma
I built this with a lot of help from an AI coding assistant (Claude), and this post was drafted with AI help and edited by me.
Not your only navigation: carry a paper map and compass, tell someone your plan, and check the park's alerts before you go.




Top comments (0)