Register
Entered
2026-09-30
First commit
2026-09-30

Analytics

App · analytics · public dashboard

Cookie-free analytics that cannot tell two visitors apart.

Hono on Cloudflare Workers, D1 and Core Web Vitals, with a public dashboard. A row holds a path, a referrer host, a country, a locale, a theme and a device class, and there is no consent banner because there is nothing to consent to.

  • TypeScript
  • Hono
  • Cloudflare Workers
  • D1
  • React
  • Vitest
Open live (opens in a new tab)Source (opens in a new tab)
Live30 · IX · 2026
Drawing: the public dashboard with page views, Core Web Vitals and the few columns a row holds, beside a slip listing what is never storedPAGE VIEWSPublic dashboardCORE WEB VITALSLCPINPCLSPATHREFERRERCOUNTRYTHEMEDEVICE/en/projectsgithub.comFRdarkmobile/fr—BElightdesktopNEVER STOREDcookieIPuser agentfingerprinthashTRACKER.JSunder 1 kB gzippedFED BY THIS SITE, TAVERLA AND ON-RECORDno consent banner: nothing to consent to
Drawn for this register, not a screenshot
Entered
2026-09-30Live
First commit
2026-09-30Collect page views and serve site stats on Workers and D1
Commits
9on main, read 2026-10-02
Coverage
20%lines run by the tests run outside the Worker, read 2026-10-02
House packages
8 of 11installed from npm

What shipped

  1. No cookie, no IP, no user agent, no fingerprint and no hash stored: a row holds a path, a referrer host, a country, a locale, a theme and a device class.
  2. No consent banner, because there is nothing to consent to.
  3. A page view reached from another page of the same site continues a visit; anything else starts one.
  4. tracker.js weighs under 1 kB gzipped, follows single-page navigation, and never runs on localhost or in an automated browser.
  5. Adding ?analytics=off to a URL stops counting that browser.

How it works

three apps report, one Worker writes a row

Diagram: this site, Taverla and on-record each run tracker.js, which sends page views to one Hono Worker on Cloudflare; it writes a row of six fields to D1 and never stores a cookie, an IP, a user agent, a fingerprint or a hash; the public dashboard reads D1This sitetracker.jsTaverlatracker.json-recordtracker.jsOne WorkerHono · CloudflareD1 · one rowpathreferrer hostcountrylocalethemedevice classDashboardpublic · ReactNever storedcookie · IP · user agentfingerprint · hash

History

Straight from the git log, abridged: 6 of 9 commits, newest first.

  1. Show Web Vitals as speed credits on the dashboard
  2. Collect Core Web Vitals as bucketed counts
  3. Accept page views from on-record
  4. Serve a public dashboard from the Worker
  5. Migrate and deploy the Worker from CI on every push to main
  6. Collect page views and serve site stats on Workers and D1First commit

Installs

8 of the 11 house packages, from npm, down to the compiler and linter settings.

Your team, 2026

I am looking for my next job. Write to me, or take the CV: a designed one, and a plain one for applicant tracking systems.