Privacy

Daily-salted visitor hash

SHA-256 of daily salt, site id, IP, and user agent. The IP never hits disk.

Why a hash

Cookieless analytics still needs a way to count unique visitors inside a day without storing an IP. ADR 0003.

Formula

formula
visitor_hash = SHA-256(daily_salt || site_id || ip || user_agent)

Implemented in apps/api/internal/hash. The salt is generated per site per UTC day and stored only for that calendar day. The IP is an argument to the hash function, then forgotten.

Rotation

00:00 UTC. A reader in California who visits at 4pm and again at 6pm the same local evening may cross the UTC boundary and count twice. That is disclosed in "What we cannot know."

Limits we accept

  • No cross-day journeys.
  • Shared NATs collapse to one hash per UA for that day.
  • UA changes (browser update mid-day) create a new hash.
  • We will not add cookies "just for returning visitors."

Something off? Open an issue · Edit on GitHub