Case Study, Web App
Trail Watch: Turning Every Hiker Into YTA’s Eyes on the Trail
Yavapai Trails Association maintains trail networks across Yavapai County, Arizona, entirely with volunteers. They needed a way for the hikers, bikers, and riders already out there to report problems as they find them, without an app store, a login, or a phone call.
We built Trail Watch: a free, installable web app that turns a trail report into a 30-second task, and gives YTA’s team a live map to work from.
View Trail WatchOpens the live app: trailwatch.yavapai-trails.org

Help us keep our trails in top shape. Tell us where. It takes about 30 seconds.
The Challenge
A Trail Problem Is Only a Problem Until Someone Reports It
YTA’s trail crews can’t be everywhere. A downed tree or washed-out section might sit unreported for weeks, simply because the person who found it had no easy way to tell anyone, especially somewhere with no cell signal.
The org needed something that worked for two very different audiences at once: casual trail users who’d never install a dedicated app, and volunteer coordinators who needed those reports organized, not buried in emails and texts.
What We Built
One App, Two Jobs
Report in 30 seconds
Open the link, the map centers on your GPS, drag the pin onto the problem, tap an issue type (needs brushing, tree down, washed out, sign issue, other), optionally add a note and photo, and send. No account, no download.
Works with no signal
Reports save to the phone and sync automatically once signal returns, which matters on trails with no cell coverage. A banner shows when reports are queued and why.
A live map for the team
A separate, login-protected admin app plots every report, with filters by type and status (new, acknowledged, forwarded, resolved), duplicate confirmation counts, and one-tap status changes.
See It In Action
Three Taps, Start to Finish
The app walks a reporter through one screen at a time, with big buttons and large type. Nothing sends until they tap Send Report.
- 1
Mark the spot
The map finds them automatically. They slide it with a finger so the pin sits on the problem.
Step 1 of 3, LocationMove the map so the pin sits on the problem spot.Drag the map to fine-tune the pin📍🟢 Green dots = already reported - 2
Say what’s wrong
Tap one of five big buttons. Add a sentence of detail if they’d like. It’s optional.
Step 2 of 3What’s wrong on the trail?🌿Needs brushing🌳Tree down🌊Washed out🪧Sign issueAdd a detail (optional)e.g. big oak across the trail near mile 2 - 3
Add a photo and send
A photo helps crews bring the right tools, but it’s optional too. Then they tap Send.
Step 3 of 3Add a photo (optional), then send.📷 Tap to add a photoTree down
Big oak across the trail near mile 2
📍 34.5401, -112.4688
📷 Photo attached
And Then?
What Happens After The Tap
The reporter gets an immediate confirmation on screen, so there is no waiting and no wondering whether it went through. Behind the scenes, the report lands on a live map that YTA volunteers and trail crews check, and an alert goes out right away.
If someone’s out of range, they see “Saved!” instead. The report waits safely on the phone and sends itself the next time there’s service. Nothing else for them to do.
Thank you for helping keep our trails in top shape. The Yavapai Trails Association will take it from here.
Under the Hood
Built to Run on Infrastructure That Costs an All-Volunteer Org Almost Nothing
YTA runs on donations and volunteer time, so cost and maintenance mattered as much as the user experience. Trail Watch runs on:
- Cloudflare Pages + Workers: static hosting with a small Worker for the report-submission API, deployed automatically on every push to GitHub.
- Supabase (Postgres + PostGIS + Storage): the database, geographic queries (duplicate detection within 100m, county-boundary validation), and photo storage, all on Supabase’s free tier with a daily keep-alive ping so the project never sleeps.
- An installable PWA, no app store: a manifest and service worker let both the reporter and admin apps install to a phone’s home screen and open offline, without ever touching the App Store or Play Store review process.
- Cloudflare Turnstile: invisible bot protection on every report submission, with direct anonymous writes to the database revoked entirely. The only way in is through the app’s own API.
- Multi-tenant from day one: every report carries an org_id. A second trail organization could reuse the same app with nothing more than their own config file, no code changes.
Design Approach
Designed for the People Who’ll Actually Use It
The hardest part of a public reporting tool isn’t the map. It’s making sure someone standing on a trail with two bars of signal and a phone one hand free actually finishes the report. Every design decision traced back to that person.
- No sign-up, no password, no account to manage or forget.
- Big tap targets, one decision per screen, nothing to type unless they want to.
- A photo is optional, not required. Friction kills reports.
- Reports outside Yavapai County get a friendly message instead of silently failing.
Where It Stands
Live and In Use
Trail Watch is live at trailwatch.yavapai-trails.org, with a separate login-protected admin app for YTA’s volunteer team. It’s built as a reusable foundation: the same app, on the same infrastructure, is ready to support other trail and running organizations with nothing more than a new config file.
- StatusLive pilot, launched 2026
- ClientYavapai Trails Association
- StackCloudflare + Supabase
Common Questions
