Satsu
Cookieless analytics, AI-traffic attribution, site audits and uptime — one private place, no consent banner.

- 18
- 2.9 KB
- 5
- 0
// THE PROBLEM
I wanted analytics for my own projects and hated the options: cookie banners, GDPR overhead, dashboards buried in noise. So I built Satsu. The first version ran on a single Express server; an independent developer deployed its script inside two Indonesian government projects (under NDA). In 2026 I rebuilt it as a platform and relaunched publicly at satsu.pro. In the weeks since, analytics grew into a site-health suite: 18 services around one event pipeline.
// WHAT I BUILT
A tracker that ships raw signals only — pageviews, custom events, SPA navigation, outbound clicks, downloads, scroll depth, real-user Core Web Vitals — in 2,880 bytes of dependency-free JavaScript, measured on the production build.
A Go event pipeline — ingest → NATS JetStream → processor → ClickHouse — that filters bots and enriches geo and device in-stream; ingest stays up and buffers while everything behind it redeploys.
An AI-traffic suite: per-assistant attribution across 18 AI hosts (ChatGPT, Perplexity, Claude, Gemini …), the share of sessions with an AI touch, referrer-stripped external clicks recovered from Sec-Fetch-Site, AI landing-page breakdowns and AI-crawler sightings.
Five audit pillars — SEO, WCAG 2.1 AA, security headers, GDPR, Lighthouse performance — run by headless-Chromium workers, plus uptime and TLS-expiry monitoring, anomaly alerts, public monitor share links and a status page.
Org → workspace → site tenancy, an org-scoped read-only API, and Stripe billing (Merchant of Record) with trials, vouchers and soft limits that never drop data — in one self-hosted monorepo with a verify environment per push, SHA-pinned Swarm deploys and nightly restore-tested backups.
// THE INTERESTING PART
Satsu identifies a visitor without ever setting a cookie. The processor derives a daily session id as sha256(siteId | masked IP | user agent | date | salt), truncated to 16 hex chars — the date is inside the hash, so the id rotates at midnight UTC and the same person tomorrow is a new, unlinkable session. And because ClickHouse stores only raw enriched events, everything above them — sessions, bounce, channels, goals, AI attribution — is derived at query time: a better classifier reaches back across all history without reprocessing a single row.
// IN THE PRODUCT




// OUTCOME
Live at satsu.pro since the July 2026 relaunch, with free registration and paid plans; AI-traffic attribution, five audit pillars and uptime monitoring shipped on top. Deployed by a third-party developer into two Southeast Asian government projects (under NDA); handles roughly 620k–1M tracked events a month.