Repository navigation
0.4.0 — globe, real-time, sessions, journeys, goals and opt-in replay
Analytics that shows its work. Every number, list and chart added in this release opens the SQL that produced it — and the AI digest still drops any sentence whose number is not in that evidence.
What's new
- Globe, 3D and 2D. Sessions placed at their city on a timeline you can scrub and play, coordinate cells, and choropleths by country and by state or province. City, region and 0.1° coordinates come from your proxy's headers (Cloudflare's visitor-location transform, Vercel, CloudFront). The geometry is served from your own origin: no map provider, no token, no IP lookup.
- Real-time. A live count on every page and a Realtime view with views per minute and the latest events labelled person, crawler or agent. Server-sent events with a polling fallback.
- Sessions, users and events. A session timeline per visit, user profiles for people you
identify()(the raw id is hashed before it is stored), event property breakdowns, and errors grouped by message, file and line. - Journeys and goals. Path queries for a Sankey, goals on page wildcards, custom events or event properties, and ordered funnels.
- Explore queries. Filters take is / is not / contains / starts with / regex on 24 dimensions and any event property, compiled into the SQL on the server.
- Performance. p50 through p99 for five Web Vitals.
- Session replay, opt-in. Off by default, loaded only on pages that carry
data-replay, and every text node and input value masked unless you unmask an element on purpose. Password, card and one-time-code fields are never captured, DNT and GPC stop recording, and the server masks again on ingest. The player runs in a script-less sandboxed iframe. It is a hand-written recorder at 3.6 KB gzipped in a separater.js, with its own 5 KB CI budget, so pages without it keep the 2.7 KB tracker.
Caveats
- Cities need your proxy to send them. Without those headers the globe names the missing header instead of drawing an empty map, and country-only sessions are never pinned to a country's centre.
- Journeys, goals and user profiles join days together only for people you identify. An anonymous visitor's id rotates daily by design.
- The tracker grew by about 200 bytes gzipped (file downloads, hash routing, user traits). The 3 KB gate still holds.
- The self-hosted dashboard (
vitrus start) renders every metric and plays replays; the sessions, users, journeys, goals and globe pages are in the hosted dashboard today. Their queries are in this core.
Full changelog: https://vitrus.dev/changelog