Privacy

Effective October 24, 2026

Using the map without an account

Free Hunting Map works without an account. Your saved map data stays in your browser’s IndexedDB storage on your device. Cached map tiles and other offline assets also stay on the device. Core map editing and saved data work offline.

Community trails

Trail finder shares detected line geometry anonymously by default, even when signed out. Public community data includes model version, confidence, scan day, a scan-area outline rounded outward to 0.01 degrees and confirmation counts. It contains no account, email, device, IP or session identifiers. Upload requests omit cookies. Offline contributions wait in a separate IndexedDB queue; turn off “Share scan results” in Layers preferences to discard pending contributions and stop sharing future scans. Contributions already delivered are public and independent of your account, so deleting an account does not remove them. Abuse protection uses short-lived, salted IP-hash counters separately from community data.

Raw scan training logs are retained permanently without account, device, IP or session identity. They include raw detected lines and confidence, coarse scan area, model, detection threshold, lidar project IDs and scan day. Removing display lines does not remove training logs. Trail votes use a random anonymous device token stored in IndexedDB and never synced or linked to an account. The server stores only its SHA-256 hash, the current vote and trail type, and a permanent timestamped history of vote and label changes for training. Votes can be changed or cleared; earlier events remain in the training history. Offline votes wait locally and retry later. Vote abuse protection uses separate short-lived device-hash and salted IP-hash counters. Training exports are restricted to administrators.

Community hikes

Recorded hikes are shared only when you choose “Share to community” in the recording editor, including when signed out. “Trim ends” is on by default at 200 meters per end by travel distance (adjustable from 100 to 500 meters while on). Turning it off shares the full track, including its original endpoints. In both modes we simplify the selected line and remove point timestamps and elevations before upload. Public data includes the selected geometry and distance, recording month, and an optional public name and type you choose. The private recording name is never prefilled. End trimming does not guarantee anonymity, including for loops or routes returning near their starting location. Hike sharing is independent of scan-sharing preferences.

Share and unshare requests wait offline and retry. A separate private ownership record holds a random share ID and withdrawal secret; it syncs with your account if used, but is excluded from GPX, GeoJSON and QR item exports. Anonymous community tables store only the secret’s SHA-256 hash, without account, track, email, session or IP identity; uploads omit cookies. Keep your local data or synced credentials to retain withdrawal access. Unsharing, or deleting the recording locally, queues removal from public tiles and future training exports, and erases stored hike geometry. Previously downloaded public or training copies cannot be recalled; cached/offline tiles may remain until refreshed. Account deletion alone does not withdraw anonymous hikes.

Shared hikes are positive GPS training labels in administrator-only exports. Three distinct device reports hide a hike while retaining it for moderation and training; administrator overrides take precedence. Reports reuse the local, unsynced voting token. The server stores only its hash, one report per hike/device and a permanent report log. Short-lived salted IP-hash and device-hash counters limit abuse. Administrator display deletion retains geometry/history for moderation but excludes the hike from public tiles and training export. Withdrawal removes geometry from future exports, while replay-prevention tombstones and report history remain.

Optional Google sign-in and sync

If you sign in with Google, we store your Google account ID, email (when verified and supplied), name and profile picture URL, a SHA-256 hash of a session token, and the map data you create: markers, tracks, saved trail candidates, private hike-sharing credentials and synced map preferences. These are stored in Cloudflare D1 to sync across your devices. Map position, cached weather, downloaded tiles and device settings are not synced.

Your browser holds an HttpOnly, Secure, SameSite=Lax session cookie that expires after 45 days. We store only the hash of its token on the server. Signing out removes that session but keeps your account’s synced data and the data on your device. Google receives sign-in requests; your browser may also request your profile picture from Google.

Hosting and third parties

Cloudflare hosts the app and sync database and processes standard request logs and observability data. We use short-lived rate-limit counters, including a hashed IP address for sign-in attempts and an account ID for sync limits, to prevent abuse. Rate windows last one minute; stale counter rows are cleaned up on subsequent sign-ins.

Depending on the layers and features you use, your browser requests map tiles, land information, elevation or weather directly from USGS (The National Map, 3DEP and PAD-US), OpenFreeMap (OpenStreetMap/OpenMapTiles data), US Fish and Wildlife Service wetlands services, Wisconsin Statewide Parcels through Esri ArcGIS, Wisconsin DNR, Amazon Web Services hosting USGS lidar, and Open-Meteo weather. These providers receive your IP address and the requested map area or forecast location, as with any web request. Google provides optional sign-in. Each provider handles its requests under its own policies. Sun and moon calculations run locally.

Usage analytics

We count anonymous app opens using a random ID that rotates every UTC day, installed-app versus browser status, new/returning and first-open-in-week/month flags, and country derived server-side from Cloudflare IP metadata. We do not store the IP address; abuse protection uses a salted hash. Feature counts include an allowlisted feature name and optional success/failure outcome, with daily ID, date, installed status, app version and first-use-in-week/month flags. Analytics includes no account identity, location, map content, names or search text, and uses no cookies.

Analytics state is stored locally, including one pending offline open and up to 100 feature events for seven days. Counts are stored in Cloudflare D1 for approximately 400 days and optionally Cloudflare Analytics Engine under its retention policy. Cloudflare Web Analytics also provides a cookieless page-view beacon on the production site; its measurements are separate from our anonymous app-open counts.

We honor Do Not Track and Global Privacy Control by disabling analytics and clearing its local state. Turn off “Usage analytics” in Layers settings to stop both anonymous counts and the Web Analytics beacon. We have no ads and do not sell personal data or share it for advertising.

Deleting your data

Choose “Delete account” in the app’s Layers panel to remove all server data for your account immediately, including synced map data, account details, sessions and account rate-limit counters. Local data remains on your devices; clear browser storage to remove it. Signing in again can create an account and upload the local data again. Copies you export or share are outside the account database. Cloudflare’s standard operational logs are separate from account data and follow its retention practices.

Contact

metzdevan@gmail.com