Grooming Tracker app
The TrailHUB Tracker mobile app records a grooming pass by GPS and automatically posts Groomed surface conditions for the trails you covered.
TrailHUB Tracker is a companion mobile app for trail managers and grooming operators. Start it when you head out on the groomer, stop it when you are done, and TrailHUB works out which trails you covered and posts a Groomed surface-conditions update for each of them.
#Status: early beta
- Built with Flutter for iOS and Android.
- Not yet in the App Store or Google Play. It is distributed directly to participating trail systems (TestFlight or a development build). Contact us if you would like to try it.
- Expect rough edges; see Known limitations before relying on it.
#What it does
- You sign in with your TrailHUB manager account (email and password; the same login you use at trailhub.org).
- You choose a trail system from the ones you own or are a trustee on. Your default trail system is preselected.
- You tap Start Tracking. The app records your position with the device's highest-accuracy GPS mode, a new point every 5 m or so, and shows the current GPS accuracy in metres.
- Pause when you stop for a while; Resume to carry on; Stop & Save when the pass is finished.
- The track is saved on the phone as a GeoJSON line and uploaded to TrailHUB as soon as the phone is online. If you are out of coverage, it waits in an Unsynced Tracks list and uploads automatically when connectivity returns (or when you tap the sync button).
- On the server, TrailHUB compares the track with the trail system's trails. Every trail with more than 10% of its length inside a 10 m band around your track gets a Groomed surface-conditions update that expires after 24 hours. Subscribers are not notified.
- The public map, trail lists and embeds update within seconds, exactly as if you had posted the conditions from the web app.
For the detailed steps see Recording a track; for the matching rules see How coverage is calculated.
#Who can use it
Anyone whose TrailHUB account is the owner of a trail system or is listed among its users (trustees). The server double-checks this when a track arrives; tracks from accounts without permission on the chosen system are discarded.
The app does not create accounts or trail systems. Set those up in the web app first.
#What it does not do
- It does not show a map or your track while recording. The screen shows the selected trail system, the tracking status (notTracking / tracking / paused), GPS accuracy and the Unsynced Tracks list.
- It does not let you choose which condition is posted. Every analysed track posts
groomedonly. If you also wanttrack-set,skateGroomedorclassicGroomed, edit the update in the web app (Updates menu) or post another via the Management API. - It does not report distance, speed or time.
- It cannot post notices, snow reports or change trail status.
#Known limitations
These are factual descriptions of the current build, not a roadmap.
- Background tracking is limited. On iOS the app declares the
locationbackground mode and asks for "Always" location permission, so recording can continue with the screen locked, but this has not been exhaustively tested and iOS may still suspend the app on long passes. On Android, the manifest does not yet declare any location permission (ACCESS_FINE_LOCATION,ACCESS_BACKGROUND_LOCATION) or a foreground service, so Android builds cannot be expected to record reliably, especially in the background. Keep the phone awake with the app in the foreground for now. - Resume discards the earlier segment. Internally, Resume starts a new line and clears the points recorded before the pause. Only the points recorded after the most recent Resume are saved. Until this is fixed, treat Pause → Stop & Save as the normal way to end a pass and avoid Resume if you need the whole pass credited.
- Recording continues while paused. Pause stops the accuracy readout but the GPS stream keeps appending points. Combined with the point above, "Pause" currently behaves more like "get ready to Stop & Save".
- Unsynced list may not survive an app restart. A track that could not upload is kept as a file on the phone, but the index of unsynced tracks is only rewritten when you remove a track. If the app is closed before the upload succeeds, the track may not reappear in the list after relaunch.
- No forgot-password flow. The button is present but not wired up; reset your password at trailhub.org.
- Only single-segment tracks are analysed. Each saved track is one
LineString. - The 10% threshold is fixed and applies per trail; short connectors are easy to credit, very long trails need a substantial pass. See How coverage is calculated.
- Trails stored as
MultiLineStringin TrailHUB are skipped by the server-side analysis; onlyLineStringtrail features are compared. - Error handling is verbose and some messages are technical.
#Privacy
Tracks are stored under your user ID in TrailHUB's cloud storage along with a small metadata record (createdOn, createdBy, trailSystemId, downloadUrl) and, after analysis, the list of covered trails with their coverage percentage. They are visible to TrailHUB administrators and are used only to post surface conditions. Location is recorded only between Start Tracking and Stop & Save.
#Pages in this section
- Recording a track — step-by-step use of the app.
- How coverage is calculated — the 10 m buffer, the 10% rule, and what gets written.
#In this section
- Recording a track
Step-by-step: sign in, pick a trail system, record a grooming pass and make sure it uploads.
- How coverage is calculated
The server-side rules that turn an uploaded GPS track into Groomed surface-condition updates: the 10 m buffer, the 10% threshold, and what is written.