Website analytics privacy
Public pages offer an explicit choice: self-hosted analytics stays off until you allow it. Browser Do Not Track and Global Privacy Control take precedence.
What is collected
For consenting visits to the homepage, blog listing and published articles, the private service receives an approved public page identifier, the referring site's hostname (not its full URL), and an optional random first-party browser identifier. A separate Cloudflare Analytics Engine event receives only the approved page identifier and that daily random identifier so the public Activity tab can show coarse visitor totals. No query strings, fragments, page text, form values, terminal commands, AI keys, account identity or private file names/content are collected. There is no session replay, device fingerprinting, cross-site identification or AI processing.
The random identifier expires within 24 hours and rotates at UTC day boundaries. It is stored only under a dedicated public-site analytics storage key, never derived from your device or IP. If browser storage fails, pageviews may be counted without an identifier. This is why unique counts are estimates of daily browsers, not people, and totals across days are not deduplicated monthly visitors.
Network and geography
The Azure-hosted collector necessarily receives your IP and User-Agent over the network. They may be used transiently for abuse limits, bot filtering and a local country lookup, but are not stored or hashed into tracking identifiers. Country is approximate: VPNs and proxies affect it, and unavailable or unsuitable lookups are shown as Unknown. No city/region is retained or external geolocation lookup used.
Storage and access
The owner's authenticated dashboard reads the detailed private aggregates. PostgreSQL stores daily page, referrer-domain and country counters, plus keyed pseudonyms needed for daily deduplication. It does not store raw events or raw browser identifiers. Deduplication rows and daily keys expire within 48 hours; aggregate counters expire after 30 days. Initially there are no backups: a server failure can lose the retained metrics.
Cloudflare Analytics Engine retains the separate page-and-daily-identifier events for up to three months. The public Worker endpoint exposes only daily total views and counts of daily browser identifiers, cached for five minutes. It does not expose identifiers, individual events, pages, referrers, countries, IP addresses or user agents. Counts across days are labelled browser-days because the identifier rotates daily and cannot establish a monthly person count.
Private dashboard and sign-in pages are never tracked. No file browsing, session replay or private memory collection is provided. Low-count country/referrer rows are suppressed in reports; underlying aggregate storage still contains those counts until retention deletes them.
Your choice and deletion
Use “Decline / withdraw” on a public page to stop future collection and remove this browser's analytics identifier. This does not remove already-aggregated counts or previously written Cloudflare events. The owner can purge the private analytics database and Cloudflare dataset where supported. For privacy or deletion requests, use the public contact details on the homepage; do not include credentials or private files.
Ad blockers, consent refusal, bots, changing browsers and missing identifiers affect accuracy. The site works without analytics or JavaScript. These technical safeguards are not a blanket claim of compliance with every jurisdiction's privacy law.