Infrastructure · We run it ourselves
A global proxy network that terminates traffic close to the visitor, plus Workers — a runtime that executes code at those same locations rather than at an origin.
Cloudflare is two products that get discussed as one: a runtime where code lives at the edge with no server to keep alive, and a proxy sitting in front of somebody else's origin deciding what reaches it. The first is a place to build and the decisions in it are irreversible in ways the documentation states plainly. The second is where a well-meant default quietly changes what a site is to the outside world, and this entry is as much about the second as the first.
01
Workers removes the question of what stays running. A multiplayer room for a browser game has no steady traffic and no schedule — it is empty for days and then four people join at once — and the alternative is a process billed by the hour to wait. The code is deployed with wrangler and the room exists when somebody opens it.
02
Durable Objects are the reason to use the platform rather than a convenience on top of it. A room needs one authority that holds the current state and serialises what happens to it; a stateless function cannot be that, and a shared database used as a mutex is a worse version of the same thing. One object per room, addressed by name, single-threaded, with storage attached — that is the shape of the problem rather than an accommodation to the platform.
03
The compatibility date is pinned rather than set to today. It is a behaviour switch for the runtime, so moving it changes what the deployed code does and belongs in a commit that says so — the opposite of the usual treatment, where it is scaffolding nobody reads again.
04
The storage backend of a Durable Object class is chosen once. A class declared in a migration cannot be moved between backends after it ships, so the first deploy carries a decision that no later migration undoes. That belongs in review before the first deploy, not in a retrospective.
05
As a proxy in front of an origin, Cloudflare and the origin each hold an opinion about TLS and about redirects, and when the two disagree the failure is a loop rather than an error. Our own apex answered a 308 to itself and did not open at all: the encryption mode was Flexible, so Cloudflare fetched the origin over plain HTTP, the origin replied that the request should be upgraded to HTTPS, and Cloudflare relayed that instruction back to the browser. The setting had stood 153 days. Nothing was down, nothing alerted, and Search Console reported only that it could not fetch the sitemap.
06
The vendor's own crawler instrument sees only what the proxy sees. AI Crawl Control watches the zone, on our zone that is the apex alone, and the apex answers every request with a redirect to the canonical host — 224 of 226 requests in a day were 3xx. The dashboard was therefore counting knocks on a door and never what was read, which is why the census on this site is middleware at the origin instead of a screenshot from a vendor panel.
07
Edge configuration is infrastructure that lives in a dashboard rather than in a repository. An SSL mode, a redirect rule and a bot setting are all production changes that no git history records and no build gate can fail on. The mitigation is discipline and not tooling — rules given names that state their intent, written down where the rest of the architecture is written down — and it is worth saying that this is weaker than every other layer we run.
An entry that cannot point at something you can open, run or read does not compile. That is a property of the type, not a promise in a paragraph.
Invariant
The edge configuration that hardens a site against scrapers is the same configuration that removes it from the answer layer. Bot Fight Mode, a managed challenge on a broad path, or a rate limit tuned for human browsing will challenge OAI-SearchBot, Claude-User and PerplexityBot alongside everything else, and none of them complains — they take the challenge page as the page and move on, so the loss appears months later as an absence of citations with nothing in any log that names the cause. On an engagement where visibility to assistants is the thing being bought, that is a genuine conflict between two products of the same vendor rather than a setting waiting to be tuned, and the resolution is to measure at the origin and accept a weaker edge posture than the dashboard recommends.