- 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
Live30 · IX · 2026
- 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
- 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.
- No consent banner, because there is nothing to consent to.
- A page view reached from another page of the same site continues a visit; anything else starts one.
- tracker.js weighs under 1 kB gzipped, follows single-page navigation, and never runs on localhost or in an automated browser.
- Adding ?analytics=off to a URL stops counting that browser.
How it works
three apps report, one Worker writes a row
History
Straight from the git log, abridged: 6 of 9 commits, newest first.
- Show Web Vitals as speed credits on the dashboard
- Collect Core Web Vitals as bucketed counts
- Accept page views from on-record
- Serve a public dashboard from the Worker
- Migrate and deploy the Worker from CI on every push to main
- 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.
- @adrienlcp/i18nTranslates, and knows at compile time what each message asks for.0.3.0
- @adrienlcp/reactThe context helpers every React app starts from.0.3.0
- @adrienlcp/react-ariaThe focus ring and class composition over react-aria-components.0.1.0
- @adrienlcp/stylesThe reset and shared styles every project starts from.0.5.0
- @adrienlcp/resultSays whether something worked, without throwing and without null.0.1.0
- @adrienlcp/safe-storageTakes the throw out of localStorage and returns a Result instead.0.1.0
- @adrienlcp/tsconfigThe compiler settings every project extends.0.1.0
- @adrienlcp/biome-configThe linter and formatter settings every project extends.0.1.0