Privacy policy
In short: Loam keeps what you give it (your account, uploads you choose to make, saved routes, flags and zones), shows other people only trail-level heat that three or more riders share (plus the creator's own rides on trails), runs no ads or analytics, and lets you export or delete your data.
Who runs Loam
Loam is run by Justin Pfister in New Hampshire, USA. Contact: jjrpfister at gmail dot com. It runs on a home server; the web app itself is served by Google Firebase Hosting.
What Loam collects
- Your account. You sign in with Google or an email link, through Google Firebase Authentication. Loam stores your Firebase user ID, your email address and your display name. Your Google profile photo is shown in your browser and is not stored on Loam's server.
- Activities you upload (GPX or FIT files). Loam reads the file in memory, cuts off the first and last 0.2 mile and anything inside your privacy zones, and matches what is left to trails. It stores the activity's date, sport, distance, duration, file type, and which trail segments it passed over and when. It does not store the original file or the GPS points. If you uncheck the contribution box when uploading, the activity is recorded in your account but does not add to heat.
- Saved routes you choose to save, including the route line, so they include where the route starts.
- Trail flags and check-ins you submit, and trail submissions you propose. Other people can see the flag, check-in or submission, but Loam does not show who made it.
- Privacy zones you create (a point and a radius, for example around your home), and your contribution consent setting.
- Connected services. If you connect Garmin Connect, your Garmin password is sent to Garmin to log in and is not stored; the session token Loam keeps is encrypted. Other connected-service records (such as a CubeTrek link) are stored with your account.
- Server logs. The server's standard request log records the time, the web address requested (which can include a search text or the start point of a route request), the response code and the network address of the connection. It is kept in the server's system journal, which the operating system rotates automatically. Loam does not analyse it.
How heat works, and what it shows about you
Heat is the layer on the map that shows which trails have been ridden or run recently.
- It is aggregated per trail segment over the past 12 months, with newer rides counting more.
- Every ride loses its first and last 0.2 mile, and anything inside your privacy zones, before it is used.
- Three-rider minimum: a trail's heat is shown to others, and used to shape their routes, only when at least 3 different people have ridden it. Below that, only you see your own contribution.
- The creator's own rides are included. To get the map started, Loam also shows heat from the creator's own imported rides on trails (paths, tracks, bridleways and cycleways), never on roads or sidewalks, even though that is one rider. Everyone else's heat still needs 3 riders.
- Heat shows how much a trail is used, never who rode it. A route suggested from the creator's rides starts from your own start point, not the original one.
Reporting a bad route
The "Report bad route" button files a public issue on GitHub. It includes your comment (word for word), the settings you used and the route line with the first and last 0.5 mile removed. It does not include your start, end or midpoint coordinates, and it carries a short code derived from your account instead of your name or email. Loam keeps the full report, including the complete route, privately on its server. Anything on GitHub is public and may be copied by others.
Who else handles data
Loam has no ads and no analytics, and does not sell or share your data for marketing. To work, it uses these services:
- Google Firebase (Authentication and Hosting) serves the web app and signs you in. Google receives your IP address and standard request information, and your email address when you sign in.
- Google Fonts supplies the typeface; your browser requests it from Google, which receives your IP address.
- CARTO supplies the map tiles. Your browser requests tiles directly from CARTO, which receives your IP address and the area you are looking at.
- Photon by komoot (OpenStreetMap search). When you search for a place, Loam's server sends your search text to Photon. Your IP address is not sent.
- US National Weather Service (api.weather.gov). For a forecast, Loam's server sends the start point of your route to it.
- Overpass API (OpenTrailMap data). Loam's server sends the map area you are viewing to get trail details.
- GitHub receives bad-route reports, as above.
- Loam's server is a computer in the creator's home, reached over the internet through Tailscale Funnel. Tailscale carries the connection.
- Garmin Connect, if you connect it, as above.
Browser storage
Loam sets no tracking cookies. Your browser stores your Firebase sign-in state, a small cached copy of your profile, the email address you typed while signing in by email link, your last few routes for offline viewing, and the app's own files (a service worker cache). You can clear them in your browser settings.
Your choices
- Export: in the You tab, "Export my data" downloads everything Loam holds about you as a JSON file (
/api/privacy/export). - Delete: in the You tab, "Delete account" permanently deletes your activities, trail visit records, saved routes, flags, check-ins, privacy zones, consent, connected services and the private copies of your bad-route reports (
/api/privacy/account). Heat is then recalculated without you, so your contribution disappears from the map. Trail submissions that were not verified are deleted; a verified one stays on the map without your name. Public GitHub issues you filed stay on GitHub. Deleting here does not delete your Google account, and the sign-in record at Firebase Authentication stays until you ask jjrpfister at gmail dot com to remove it. - Backups: a nightly database backup is kept on the server for 7 days, so deleted data can remain in those backups for up to 7 days. A one-off backup made before a risky change is deleted once the change is verified.
Age
Loam is for people 13 and older.
Changes
If this policy changes, the new version is posted here with a new effective date. The source code is public, so changes to what Loam does can be checked against it.
Contact
jjrpfister at gmail dot com