tracé

What tracé tracks: the public telemetry note

tracé's entire premise is that a route never leaves your browser. That promise is only worth anything if the rest of what the app does is disclosed just as plainly. Below is every analytics event tracé sends — all six of them, by exact name and property — and an explanation of why that's the complete list, not a curated one.

The six events, in full

tracé uses Vercel Web Analytics as its analytics processor. It sends nothing else, and nothing beyond the six named, count-only events below — each fires with the event name and, where noted, one property drawn from a fixed, closed set of values.

EventPropertyWhy it exists
session_start kind: "new" | "returning" Counts one visit, bucketed by whether this browser has been seen before. Feeds the returning-visitor share, which Vercel Web Analytics doesn't report natively, and is the denominator for the two rate metrics below.
route_loaded source: "file" | "demo" | "share" | "komoot" Counts one successfully analyzed route, tagged with how it arrived. Feeds routes per session — a second route in one session is the strongest available signal that the first one was useful.
share_created scope: "single" | "all" Counts a share link being copied, separating one route's link from the copy-all button so a single click on "copy all" can't inflate the rate. Feeds the viral loop metric.
share_opened none Counts a share link being successfully opened by a recipient — the other half of the viral loop metric, and the only measurement of whether shared links actually get followed.
layer_enabled layer: "poi" | "surface" | "wind" Counts a visitor opting into one of the three layers that reach a third-party service. Feeds a session-depth metric, and doubles as an early-warning signal for the Overpass relay's capacity ceiling.
elevation_refetched none Counts a manual elevation refetch. It's the clearest evidence a visitor arrived with a file the app couldn't fully analyze, and chose to persist anyway.

That's the complete list — six events, no others. If a seventh ever ships, this page and llms.txt change in the same commit as the code, per the rule recorded directly in src/analytics/events.ts.

What is never sent — and why that isn't just a promise

No route data, no coordinates, no filenames, no distances, no route ids, no timings, and no identifier of any kind is ever sent by these six events. That isn't a policy tracé is merely asking you to trust: every one of the functions above takes only a closed union of literal string values as its parameter — "file" | "demo" | "share" | "komoot", for example, never a plain string. A filename, a coordinate pair, a distance figure, or anything else read out of your GPX file simply does not fit that type. Passing one would not compile. The app's central promise is enforced here by the type checker, not by reviewer discipline or good intentions — which is the strongest thing this page can say, and also the limit of what it's claiming: it describes these six functions, not every line of code that will ever exist in this repository.

The "seen before" flag

session_start's new/returning split is backed by a single first-party localStorage key, weitblick-seen (it keeps the app's original name, like every other persisted key — see docs/reference/gotchas.md). That flag stays in your browser. It is never transmitted anywhere; only the derived "new" or "returning" bucket reaches Vercel. A browser that blocks storage — Safari private mode, most notably — simply can't read or write the flag, so it's counted as "new" on every visit. That biases the returning-visitor number downward, which is the safe direction: it can manufacture under-counting, never false retention.

What actually does leave the browser, opted in

Four features are not analytics and are not covered by the closed-union guarantee above, because their entire job is to fetch something the browser doesn't have. Every one of them is something you switch on or press — none of it is background traffic. All four are disclosed here with the same plainness as the six events, because implying tracé makes no network requests at all would be its own kind of lie:

Separately, every route you open is cached locally in your browser's IndexedDB as gzipped GPX text — nothing else is stored, nothing is derived-and-kept, and no server is involved. That cache is what lets a tab reopen on your next visit, and it's clearable at any time from Settings.

Sources

Every claim on this page is drawn directly from the implementing code: src/analytics/events.ts (the six events, their properties, and the closed-union invariant), and public/llms.txt (the same privacy disclosure in the app's machine-readable summary). This page and both of those are kept in agreement by convention, not by generation — if you find a mismatch, the code is authoritative and this page is wrong.

Analyze your own route — nothing about it is ever sent anywhere.

Open tracé