Features · Analyse

Real-time dashboard — who is on the site right now

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.

Live in the header, always visible

Distinct visitors in the last five minutes, polled, with its own evidence like everything else.

Empty buckets are filled with zero

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.

No chart library, no external request

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.

Entry, exit, sources, campaigns, devices, geography

The full standard set — top pages, entry and exit pages, referrers, UTM campaigns, browsers, operating systems, screen sizes, languages, countries.

The evidence

Metric live.visitors

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.

What this does not do

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.

Documentation

More in analyse

← All features