Site notice

Privacy and cookies

An account of what this site measures, what its server writes down, and where a consent decision is kept. It fits on one page because there is not much of it.

Google Tag Manager loads on every page here. The container carries Google Analytics 4. It holds nothing that advertises, retargets, records sessions or embeds a third-party widget, and if that ever changes this page changes with it.

Google's tags are gated on the consent state set out below, and that state begins as denied for every first-time visitor. The banner at the foot of the page is the only thing that changes it.

Before any tag loads, the page declares its Consent Mode state across four signals — analytics_storage, ad_storage, ad_user_data and ad_personalization. Each one starts denied. Accepting grants the analytics signal only. The three advertising signals stay denied in every state, because this site serves no advertising and builds no audiences. All four are declared because Google's tags read all four, and an implementation that omits two of them is an incomplete one. There is no per-category switch on the banner because there is only one category of tag to switch.

While the signals are denied, the Google tag is still loaded and still sends a request, with nothing read from or written to the browser and no identifier that survives the page. The request states that consent was refused. Accepting permits the analytics cookie, which is the thing that lets two page views be recognised as one visit. Two further parameters are set on every page: ad click identifiers are stripped from Google requests while advertising storage is refused, and where such an identifier arrives in a URL it is carried across internal links and not stored.

Requests arrive through Cloudflare, which terminates the TLS connection and passes them to a small server I run and administer myself. Cloudflare therefore sees the visiting address, since it is the party being connected to, and what it does with that is governed by Cloudflare's own terms.

On the origin, nginx writes an access log line per request holding the address the request came from, the path, a timestamp, the response code, the browser's user agent string and the referring page. Because the real-address restoration is deliberately not configured on this host, the address in that line is a Cloudflare proxy, not the visitor. The files rotate once a day and are kept for fourteen days before deletion. They are read when something breaks, they are never exported, and they are never joined to anything from Analytics.

A decision taken on the banner is written into the browser's own localStorage under the key bl_consent, holding the decision, the moment it was taken and a schema number. It stays in the browser. No copy is sent anywhere, and there is no account or identifier here to attach one to. Clearing site data in the browser deletes it, after which the banner returns.

The schema number exists so that a later, materially different version of this notice can ask again where an old decision no longer covers it.

There is no login, no form, no newsletter, no comment thread and nothing for sale. No page asks for a name or an email address; the way to get in touch is a plain mailto link that opens the visitor's own mail client. Nothing collected here is sold, shared for advertising, or passed to any party other than Google in its role as the analytics provider.

Anything about this notice, or any request concerning data, goes to [email protected]. The honest answer to most such requests is that this site holds nothing attached to a named person, but the question is a fair one and will get a reply.

Last updated 27 July 2026.