Skip to content
Creatively Grown Digital Marketing - Growth Marketing for Health & Wellness Businesses

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

9:41▮▮▮ ▮
Yavapai Trails Association
Spot something on the trail?

Help us keep our trails in top shape. Tell us where. It takes about 30 seconds.

Report an Issue →
No sign-in needed. Works even with no signal.
The screen a hiker sees when they open Trail Watch

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

    Mark the spot

    The map finds them automatically. They slide it with a finger so the pin sits on the problem.

    9:41▮▮▮ ▮
    Yavapai Trails Association: Report an Issue
    Step 1 of 3, Location
    Move the map so the pin sits on the problem spot.
    Drag the map to fine-tune the pin
    📍
    🟢 Green dots = already reported
    Next ▸
  2. 2

    Say what’s wrong

    Tap one of five big buttons. Add a sentence of detail if they’d like. It’s optional.

    9:41▮▮▮ ▮
    Yavapai Trails Association: Report an Issue
    Step 2 of 3
    What’s wrong on the trail?
    🌿Needs brushing
    🌳Tree down
    🌊Washed out
    🪧Sign issue
    Add a detail (optional)
    e.g. big oak across the trail near mile 2
    ◂ Back
    Next ▸
  3. 3

    Add a photo and send

    A photo helps crews bring the right tools, but it’s optional too. Then they tap Send.

    9:41▮▮▮ ▮
    Yavapai Trails Association: Report an Issue
    Step 3 of 3
    Add a photo (optional), then send.
    📷 Tap to add a photo
    Tree down
    Big oak across the trail near mile 2
    📍 34.5401, -112.4688
    📷 Photo attached
    ◂ Back
    Send Report

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.

9:41▮▮▮ ▮
🎉
Report received!

Thank you for helping keep our trails in top shape. The Yavapai Trails Association will take it from here.

Report another issue
Confirmation appears the moment it sends

What Happens On YTA’s Side

  1. Already flagged? It just asks.

    Previously reported issues show as faint dots on the map. Reporting the same problem nearby prompts “is this the same one?” and adds a confirmation instead of creating a duplicate.

  2. An alert goes out immediately

    The report lands on the admin map and triggers an email to YTA’s team with the issue, note, photo, and a map link. No one has to go looking for it.

  3. The team works it from one map

    Volunteers acknowledge, forward, or resolve each report from the same admin map; old resolved reports auto-archive after six months so the map stays current.

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

Good to Know

Why build this instead of using an off-the-shelf form?
A generic form doesn’t work offline, can’t check whether a pin falls inside the service area, and can’t detect that five people just reported the same fallen tree. Trail Watch does all three, and still costs next to nothing to run.
Why no native app?
An all-volunteer nonprofit can’t maintain two app store listings and push updates through review. A PWA installs the same way, updates instantly on every deploy, and reaches anyone with a browser.
Could this work for another organization?
Yes. It’s built multi-tenant from the ground up. A new trail club, running club, or land trust could go live with their own branding and issue types by editing one config file.

Ready When You Are

Have a Problem Only an App Can Solve?

We build the same kind of thing for organizations that need something reliable, affordable, and actually used.

Get In Touch