Traffic
This site counts its own visitors. At this traffic volume the numbers are not the interesting part — the method is, so here it is alongside the evidence.
last 30 days rendered 2026-08-25 14:44 UTC
- 252 views
- 202 visitors
- 216 bot views
- 2026-08-07 counting since
A visitor is one identifier on one day. Two days of the same person count as two, which is why there is no returning-visitor number below.
| day | views | visitors | distribution |
|---|---|---|---|
| 2026-07-27 | 0 | 0 | |
| 2026-07-28 | 0 | 0 | |
| 2026-07-29 | 0 | 0 | |
| 2026-07-30 | 0 | 0 | |
| 2026-07-31 | 0 | 0 | |
| 2026-08-01 | 0 | 0 | |
| 2026-08-02 | 0 | 0 | |
| 2026-08-03 | 0 | 0 | |
| 2026-08-04 | 0 | 0 | |
| 2026-08-05 | 0 | 0 | |
| 2026-08-06 | 0 | 0 | |
| 2026-08-07 | 27 | 16 | |
| 2026-08-08 | 15 | 10 | |
| 2026-08-09 | 8 | 7 | |
| 2026-08-10 | 6 | 6 | |
| 2026-08-11 | 25 | 19 | |
| 2026-08-12 | 9 | 7 | |
| 2026-08-13 | 13 | 8 | |
| 2026-08-14 | 22 | 19 | |
| 2026-08-15 | 6 | 6 | |
| 2026-08-16 | 10 | 9 | |
| 2026-08-17 | 23 | 23 | |
| 2026-08-18 | 13 | 10 | |
| 2026-08-19 | 13 | 11 | |
| 2026-08-20 | 13 | 13 | |
| 2026-08-21 | 5 | 5 | |
| 2026-08-22 | 24 | 13 | |
| 2026-08-23 | 9 | 9 | |
| 2026-08-24 | 7 | 7 | |
| 2026-08-25 | 4 | 4 |
| path | views | share | distribution |
|---|---|---|---|
| / | 207 | 82.1% | |
| /analytics | 25 | 9.9% | |
| /links | 20 | 7.9% |
| source | views | share | distribution |
|---|---|---|---|
| Direct / private | 235 | 93.3% | |
| t.co | 15 | 6.0% | |
| Other | 2 | 0.8% |
| country | views | share | distribution |
|---|---|---|---|
| US | 101 | 40.1% | |
| Other | 51 | 20.2% | |
| CA | 28 | 11.1% | |
| DE | 19 | 7.5% | |
| SE | 18 | 7.1% | |
| NL | 11 | 4.4% | |
| FR | 10 | 4.0% | |
| HK | 8 | 3.2% | |
| GB | 6 | 2.4% |
| device | views | share | distribution |
|---|---|---|---|
| desktop | 192 | 76.2% | |
| mobile | 59 | 23.4% | |
| Other | 1 | 0.4% |
how it works
- Nothing is stored on your device
- No cookies, no localStorage, and no analytics script. The count happens at the edge, before this page is served, so an ad blocker changes nothing about what is recorded — and there is nothing on your machine to consent to.
- The identifier expires at midnight
- A visitor is a SHA-256 of a random 32-byte daily salt plus host, IP address and user agent. The raw IP is never written down. The salt is generated once per UTC day and destroyed when the day rolls over, so yesterday’s identifiers cannot be recomputed by anyone — me included.
- Which means returning visitors are uncountable
- The same person on two days is two unrelated identifiers. There is no way to join them, so there is no returning-visitor number here. That is a consequence of the design, not an omission.
- Small numbers are collapsed before they leave the database
- Any bucket with fewer than five views is folded into “Other”, and that happens in SQL — a suppressed value never reaches this page in any form. At this traffic volume, an unsuppressed public dashboard would just be publishing individual browsing sessions.
- Referrers are checked against an allowlist
- A referrer is reduced to its registrable domain and reported only if that domain is somewhere already public. Everything else — including anything unrecognised — is reported as “Direct / private”, because raw referrers can carry links to private wikis, workspaces and hiring systems.
- One SvelteKit app, one Postgres, no vendor
- Vercel edge middleware writes one row per pageview through Neon’s HTTP driver. This page is regenerated at most once an hour, which is what keeps an unauthenticated public dashboard from being a free SQL endpoint.
what these numbers are not
- Time is never reported finer than one day, and there is no live feed.
- These dimensions cannot be cross-filtered, on purpose.
- Bot detection is best-effort pattern matching. Some crawlers are counted as people and some people are counted as crawlers.
- No identifier is retained past 30 days. That is the specific claim — the event log itself is kept, and referrer URLs are kept with it, visible only to me.