The Tracely blog

Building privacy-first analytics in the open. Short product notes twice a week, and the occasional deep dive into how things work under the hood.

Subscribe via Atom feed →

6 min read Deep dive

Moving the read path to ClickHouse

The in-progress migration of Tracely's dashboard reads from SQL rollup tables to a ClickHouse warehouse, and the query-writing rules it forced on me.

7 min read Deep dive

Edge ingest: terminating analytics traffic at the CDN

I'm building a Cloudflare Worker tier that accepts tracker payloads at the edge, validates them against Workers KV, and forwards them to Tracely through a queue.

3 min read

Self-hosting Tracely: Docker, Octane, and load testing

One command brings up the full stack — Octane on FrankenPHP, a dedicated queue worker, Postgres, and Redis — and a second command tries to knock it over.

3 min read

APIs and integrations: analytics that plays well with others

Tracely's Bearer-token read API, the Management API for automation, and external data sources like GA4 that sit beside your first-party data.

3 min read

Teams, SSO, and passkeys

The collaboration and enterprise layer in Tracely — team roles, invitations, SAML and OIDC sign-in, SCIM provisioning, and WebAuthn passkeys.

3 min read

Multi-touch attribution on aggregates

Tracely's Campaigns dashboard now computes first-click, last-click, linear, position-based, and time-decay attribution from campaign touches within sessions.

3 min read

Visitor journeys and retention, aggregate-first

How Tracely shows page-to-page movement and return rates without individual-level tracking, and where the visitor profile fits into that.

6 min read Deep dive

Measuring real-user performance

How Tracely's performance dashboard works, from the Web Vitals the tracker collects to path-level hourly rollups and third-party timing aggregation.

3 min read

Accessibility signals: dark mode and reduced motion as aggregates

Tracely now reports dark mode and reduced motion preferences as aggregate shares, plus a new hourly rollup for keyboard and pointer activity that shipped today.

3 min read

Email reports, annotations, and remembering why

Scheduled email digests, dated notes on your traffic, and a weekly team health line — the parts of analytics that fight forgetting.

3 min read

Your data leaves with you

Site export and import bundles, the account data export, a nightly warehouse push, and why no-lock-in is a design constraint rather than a slogan.

3 min read

Coverage tooling: knowing what you're not measuring

Four small tools in Tracely for catching the gaps — expected URL coverage, edge config lint, an embed security scorecard, and a CI event contract.

3 min read

Sharing dashboards without handing out logins

Three ways to show Tracely data to people who don't have accounts — public dashboards, expiring magic links, and an embeddable trust badge.

6 min read Deep dive

Detecting anomalies without crying wolf

How Tracely's anomaly engine works under the hood — weekday-aware baselines, ratio spikes, root-cause attribution, and the alerting layer that decides when to actually tell you.

3 min read

Heatmaps without session replay

How Tracely does click heatmaps as pure aggregates — a 40 by 40 grid of counts, bounded retention, and a server-side page snapshot for the backdrop.

3 min read

Content groups and catching decay

Grouping pages into content groups for rollup reporting, and decay alerts that flag pages whose traffic is sliding against their own recent baseline.

3 min read

Campaign tracking and UTM hygiene

The Campaigns dashboard groups traffic by UTM parameters and includes a hygiene report that flags inconsistent tagging before it quietly ruins your reports.

6 min read Deep dive

Rollups, or how the dashboards stay fast

The aggregation architecture under Tracely's dashboards — raw fact tables, hourly and daily rollups, and the commands that can rebuild every aggregate from raw data.

3 min read

Goals, funnels, and experiments

How conversion tracking works in Tracely — goals on named events, multi-step funnels over sessions, and experiment readouts, all computed from aggregates.

3 min read

Keyboard-first dashboards

A command palette, two-key go-to sequences, and print styles that make save-as-PDF work — small interface investments that compound daily.

4 min read

Privacy is a product decision, not a settings page

Why Tracely's privacy posture lives in what the product refuses to build — cookieless by design, explicit non-goals, and masking for sparse cohorts.

4 min read

Live view, TV mode, and the wall board

How Tracely answers "what's happening right now" — a live dashboard with a tunable window, a chrome-free TV mode, and a rotating kiosk for office screens.

7 min read Deep dive

Inside the ingest pipeline

A deep dive into how Tracely turns beacon POSTs into stored pageviews — rate limiters, queued jobs, the batch endpoint, and one deliberate foot-gun.

3 min read

One snippet, served first-party

How the Tracely tracker is delivered — a per-site script served from your analytics origin, posting to same-origin endpoints, with optional SRI pinning.

2 min read

Introducing Tracely

Privacy-first, first-party web analytics you can drop into any site with one snippet — cookieless, aggregate-first, and built to sit beside your existing stack.

Get new posts by email

Short product notes twice a week plus the occasional deep dive. No tracking pixels in the emails, and you can unsubscribe anytime.

Your address is used only to send new posts. No open tracking.