Skip to content
// SELECTED WORK
01 / OWNED PRODUCT · 2024–

Satsu

Web analytics that shows every interaction and every live visitor — without cookies, a consent banner, or the noise.

// ~1M EVENTS/MO

Satsu site analytics: visitors, pageviews and bounce rate over 30 days, a live-visitor panel, device breakdown, top pages, and channel attribution including AI traffic.

// 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 (the rest is under NDA). In 2026 I rebuilt the whole thing as a platform — seven services plus the tracker around one event pipeline — and relaunched it publicly at satsu.pro.

// WHAT I BUILT

  1. 01

    A tracker that ships raw signals only — pageviews, custom events, SPA navigation, outbound clicks, downloads, scroll depth — in 1,953 bytes of dependency-free JavaScript, as served in production.

  2. 02

    A Go event pipeline — ingest → NATS JetStream → processor → ClickHouse — that filters bots and enriches geo and device in-stream; ingest stays up and keeps buffering while everything behind it redeploys.

  3. 03

    A first-class AI traffic channel — ChatGPT, Perplexity, Claude & Co. — alongside goals with conversion rates, live visitors, and country, device and browser breakdowns.

  4. 04

    Organization → workspace → site tenancy with teams and invites, an org-scoped read-only public API, and Stripe billing (Merchant of Record) with soft limits: alerts and upgrade nudges, never dropped data.

  5. 05

    One self-hosted monorepo: CI builds every image, deploys a full verify environment on each push, and gates production on main — Docker Swarm on Hetzner.

// 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 — is derived at query time: a better classifier reaches back across all history without reprocessing a single row.

// IN THE PRODUCT

Satsu workspace dashboard aggregating every site in an organization — cross-site visitors, live counts, and per-site sparklines.
Satsu landing page hero showing live stats for satsu.pro itself — the product tracks its own site.

// OUTCOME

// IMPACT

Live at satsu.pro since the July 2026 relaunch, with free registration and paid plans. Deployed by a third-party developer into two Southeast Asian government projects (under NDA); handles roughly 620k–1M tracked events per month.

// STACK

Go services (ingest, processor, query, public API) + TypeScript services (core-api, billing), Next.js dashboard and landing, ClickHouse + PostgreSQL + NATS JetStream + Redis, Stripe Merchant of Record. Self-hosted on Hetzner, Docker Swarm.