Features · Analyse
A live visitor count over the last five minutes, a hand-drawn SVG time series with no charting library, and every breakdown one click from the query behind it.
Distinct visitors in the last five minutes, polled, with its own evidence like everything else.
A day with no traffic is drawn as zero rather than skipped. Skipping it produces a flat line that implies uninterrupted traffic — a false claim made with a chart.
The whole dashboard is one file with inline SVG. Nothing is fetched from a CDN, which is also why no third party learns which sites you look at.
The full standard set — top pages, entry and exit pages, referrers, UTM campaigns, browsers, operating systems, screen sizes, languages, countries.
The evidence
SELECT COUNT(DISTINCT visitor_id) AS value FROM events WHERE site_id = ? AND ts >= ? AND bot_kind = '' -- params: ["acme-3f9c21", now - 5 * 60 * 1000]
Five minutes is the industry convention; the window is in the parameters, not hidden in code.
Country comes only from a proxy header — Cloudflare, Vercel, Fly, CloudFront or Netlify. We do not bundle a GeoIP database, because a 60+ MB file with a monthly update cycle would break the one-command install. Without a proxy in front, the country table stays empty and says so rather than guessing. There are also no city-level maps, for the same reason.