v0.1.0 · alpha · self-hosted

Website analytics for operators who host their own pipeline.

Page views, clicks, scrolls, sessions, and custom events. GeoIP maps, UTM attribution, device and browser breakdowns, period-over-period comparisons, and PDF reports. Collected through a single POST endpoint you control. No third-party script, no hidden trackers, no data leaving your infrastructure.

# collector push site$POST /collect/ event=page_view url=/pricing referrer=bing.com geo=US · CA ua=firefox · linux site$
properties
3
events logged
121258
operators
1
collecting since
Jun 6, 2022
collection
One-line site tag

Drop a tiny async script in your <head>. It posts session_start, page_view, click, scroll, and page_leave to one endpoint. Custom events queue from any frontend code.

attribution
UTM + referrer tracking

Slice traffic by source, medium, and campaign. Top referrers, pages, and custom events rank in the dashboard with period-over-period deltas baked in.

geo + device
Maps, browsers, platforms

A Natural Earth world map with click-through admin-1 drill-down. Doughnut breakdowns for device, browser, platform, and screen size. GeoIP runs locally, IPs never leave your host.

reports
Dashboard + PDF export

Flip any date range to PDF or markdown with one click, rendered in-process via embedded Typst (no chromium subprocess). Custom cards pin bespoke metrics. A public toggle shares without a login.

schema
Typed schema, JSON extras

Hot fields (url, referrer, geo, UA, UTMs) live in typed columns for fast queries. Custom keys land in an extra JSON column, queryable via SQLite JSON1 (json_extract). Bot traffic routes to a separate table at write time so human dashboards never have to filter it.

stack
Built in Rust, ultralight

One statically linked Rust binary plus SQLite, shipped as a tiny Alpine Docker image behind your own reverse proxy. Your domain, your retention policy. No vendor, no pixel, no lock-in.