Can I ride right now? One screen that answers it for Franke Park.
Trail conditions for the Franke Park mountain bike loops live in a Facebook group. You find out the dirt is dry when somebody posts, and that post is out of date the next time it rains. I ride there, so I built this. It's free, nobody signs in, and it's live at frankedirt.netlify.app.
- To report
- Three tapsno account and no typing
- Status comes from
- Rider reports first, then a weather and soil estimate
- Weather
- Every 15 minutesrain, soil moisture and soil temperature
- Built with
- Plain HTML and JavaScript, Netlify Functions, Postgres, Open-Meteo
A post in a Facebook group is only right until it rains again.
Before
- You scroll the group looking for the last person who rode.
- The answer is as fresh as that post. It might be from this morning or from Tuesday.
- If it rained after the post, nothing tells you.
- One answer for the whole park.
Now
- One status for each of the five loops.
- Every status says where it came from and how old it is.
- A report filed before new rain stops counting on its own, at about a tenth of an inch.
- When nobody has reported, it estimates from the weather and says it's an estimate.
Riders first. Weather when nobody has reported.
Open it at the trailhead
There's nothing to download. It opens in the phone's browser, and it's built to load on one bar of signal. Riders report with the "I'm at the trailhead" button.
The idea is a sign at each trailhead with its own QR code, so a scan opens the report screen with that loop already picked. That part is only an idea so far. Nothing is definite, and no signs are posted.
Three taps, and no typing
Pick the loop, pick how it's riding, and flag anything in the way. That's the whole report. It takes about ten seconds.
There's no text box anywhere, on purpose. Nobody is watching this thing day to day, so there can't be anything in it that needs a moderator. Each phone gets one report per loop per hour.
Each loop gets its own answer
A report counts for 12 hours, and newer ones count more. One from inside the park counts one and a half times as much as one from a couch.
A report that doesn't match the weather waits. If one rider says hero dirt an hour after half an inch of rain, the board shows it as one rider's opinion. It takes a second phone agreeing to change the loop.
When nobody has reported, it estimates
Every 15 minutes it pulls the last week of rain, the topsoil moisture and the soil temperature for the park. From those it works out what the dirt is probably doing, and when that should change.
On the day of this screenshot it read: good to go, last rain was 0.29 inches two days ago, should stay dry and fast for the next two days.
What it is, and what it isn't.
It isn't official. I ride at Franke, but I'm not part of the group that looks after the trails. The trailhead signs are an idea only, and nothing is definite yet.
It never says a trail is closed. It describes the dirt. Whether to ride is the rider's call, and closures stay with the club and the city.
The estimate hasn't been through a season. It's a model, and I don't know yet how often it's right. Every report gets saved next to what the estimate said at that moment, so I can check it and tune it once there's enough riding to compare against.
It doesn't know who you are. No accounts. Phone IDs are stored scrambled, and your location is never saved. It only keeps whether you were inside the park.
Alerts work without an account too. Tap "Alert me when it dries out" and that phone gets a notification when the loop changes. On an iPhone it has to be added to the home screen first.
What do people keep calling you to ask?
This one answers "is it dry?" A page like it can take a check-in or a request from a phone at your counter or on a job site, with no app and no login. I'm happy to look at yours.
Book a free discovery call



