Developer Tools / Analytics

Pulse

A privacy-first, self-hosted web analytics platform. One script tag, no cookies, real-time dashboard, and full ownership of your data.

Solo DeveloperOpen Source2024
📊

Overview

Pulse is a lightweight web analytics tool you host yourself. It tracks page views, referrers, devices, and geography without cookies or personal data collection. The tracking script is under 1KB. The dashboard shows real-time visitor data and historical trends.

The Problem

Google Analytics is powerful but collects far more data than most sites need, requires cookie consent banners, and sends your visitors' data to Google. Privacy-focused alternatives like Plausible and Fathom are SaaS products with monthly fees. Developers who want full data ownership and zero recurring costs need a self-hosted option that's actually easy to deploy and maintain.

Approach

Sub-1KB tracking script

The client-side script is 847 bytes gzipped. It collects page URL, referrer, screen size, browser, OS, and country (derived from IP on the server, then discarded). No cookies, no localStorage, no fingerprinting. A single POST request per page view. The script loads async and never blocks rendering.

ClickHouse for analytics storage

Page view events are stored in ClickHouse, a column-oriented database optimized for analytical queries. Aggregations over millions of rows (unique visitors per day, top pages, referrer breakdown) complete in milliseconds. ClickHouse's compression keeps storage costs minimal even at high event volumes.

Real-time dashboard with server components

The dashboard uses Next.js server components to query ClickHouse directly. No API layer, no client-side data fetching for the main views. Time range filters and drill-downs trigger server-side re-renders. The result is a fast, interactive dashboard with zero client-side JavaScript for the analytics views.

Challenges

Accurate unique visitor counting without cookies

Without cookies or fingerprinting, counting unique visitors is tricky. Pulse uses a daily hash of IP + User-Agent + a rotating salt. The hash changes every 24 hours, so visitors can't be tracked across days. This gives accurate daily unique counts while preserving privacy.

Self-hosted deployment simplicity

The target audience is developers who want to run this on a $5 VPS. Packaged the entire stack (Next.js app + ClickHouse) as a single Docker Compose file. One command to start, automatic backups to S3-compatible storage, and a health check endpoint for monitoring.

Results

Pulse tracks 15+ websites with a combined 500K monthly page views, all running on a single $10 VPS.

847B

Tracking script size (gzipped)

500K+

Monthly page views tracked

<20ms

Dashboard query response time

Tech Stack

Next.jsServer components for the dashboard, API routes for the tracking endpoint
TypeScriptType-safe ClickHouse queries and event schema validation
ClickHouseColumn-oriented analytics database for fast aggregations at scale
DockerSingle-command deployment with Docker Compose
Tailwind CSSDashboard UI with responsive charts and data tables