How this site runs

Colophon

This site is its own proof of work: the architecture I describe elsewhere is the architecture serving you this page. Everything below is either live — measured on a real request — or a committed artifact you can trace back to source. The costs are the actual monthly bill, and the performance numbers come from audits with gates in CI. Where something can't be measured, it isn't shown.

Architecture

One Worker, everything at the edge

Browser you, right now
Cloudflare Edge static assets · brotli · HTTP/3
cache miss / API
Worker SSR + /api/*
KV rate limits · cache
Workers AI via AI Gateway
AI Search retrieval
Email Routing contact form + Copilot

// prerendered pages never touch the Worker

// AI bindings only on /api/copilot

Deploys
GitLab CI verify · lighthouse · dry-run
gates pass
wrangler deploy on push to main
Worker new version live

// merge requests get a preview URL instead

Live from this request

Run a trace

This calls the same /api/status endpoint the footer strip uses: which Cloudflare colo served you, a real KV round-trip, your protocol and TLS version, and the exact build commit. Measured when you click — not typed into the source.

edge: kv: proto: tls: build:

Cost receipts

What it costs to run

~$6 per month, all-in
item cost note
Cloudflare Workers Paid $5.00 SSR + APIs + static assets, 300+ edge locations
Domain (dillonbrowne.com) ~$0.90 annual registration, amortized
Workers KV $0.00 rate limiting + caching, within plan allowance
Workers AI + AI Gateway $0.00 inference within the plan allowance at current traffic; rate limits cap the worst case near $250/mo
Email Routing $0.00 contact form + Copilot visitor email; 3,000/mo included, then $0.35/1,000
CI/CD (self-hosted GitLab) $0.00 runs on existing homelab infrastructure

// costs sourced from the public cost breakdown, updated 2026-08

Performance receipts

Gated in CI, measured at last audit

100/100 Accessibility, homepage
0.002 CLS, homepage
  • Lighthouse ≥ 0.90 gate on every merge request — accessibility, best-practices and SEO block the merge; the performance score is posted to the MR.
  • CLS budget of ≤ 0.05 on every page.
  • Measured on 2026-08-12 at commit 95af1b7, not asserted. Regenerate with `pnpm lhci:all && pnpm lhci:snapshot`.
What this site measures

Thirty lines of Worker code, and no vendor

There is no analytics product on this site. A sendBeacon call posts an event name, a validated route template, a bucketed referrer class and a viewport size class to /api/beacon, which writes one row to Workers Analytics Engine. That is the whole system.

Your IP address is never read — not "not stored", not read. There is no cookie, no local storage, and no device identifier, so nothing is written to or retrieved from your machine and no consent banner is required. No row carries an identifier of any kind, which means rows cannot be joined into a session or a visitor: that is a property of the schema, not a promise about how I behave. Rows expire after three months. Do Not Track and Global Privacy Control are honoured, and automated clients are excluded.

Collected
  • event name, from a closed list
  • route template — /blog/:slug, never a raw URL
  • referrer class — google, direct, …
  • viewport size class, country, edge colo
  • the build commit, so a change can be traced to a deploy
Never collected
  • IP address — never read on this path
  • cookies, local storage, device identifiers
  • user agent, screen dimensions, any fingerprint
  • query strings, search terms, Copilot message contents
  • anything that could link two rows together

Two forms on this site collect personal information on purpose, and nothing else on it does. The contact form takes a name, an email, your message, and optionally a company and a phone number; that is kept for 30 days and emailed to me. The form on /hire that raises the assistant's budget asks for a name, an email and a company, kept for 90 days and emailed to me. Those lists are exhaustive — in particular neither one keeps the IP address it arrived from. It is read to rate-limit the request and to check the captcha, and it is not written down. Neither form is ever added to a mailing list, never sold, and never reaches the analytics dataset above — the only thing that dataset records is that somebody submitted a form. The cookie you get back from the second one carries a random id and a signature, never your address. Each submission leaves exactly two copies: the stored row, which expires on its own, and the notification email in my mailbox, which does not — so erasing you means deleting both, not just the row. Write to hire.me@dillonbrowne.com and I will delete both.

One more exception, stated plainly because this page is only worth anything if it is checkable. If you ask the Copilot to email you something, the address you type is used to send that one message and nothing else: this site never writes it to a database in the clear, never adds it to a mailing list, and never lets it reach the analytics dataset above. What this site stores is a salted, non-reversible hash — for a day, so the same address cannot be mailed repeatedly, and permanently if you unsubscribe, so that instruction is never forgotten. Two copies do exist outside that, and pretending otherwise would make the rest of this page worth less: a copy of the message, including your address, is delivered to Dillon's mailbox and kept like any other email; and if the message hard-bounces or is reported as spam, Cloudflare records the address on the account's own suppression list in the clear, which is how a bad address stops being retried. Write to hire.me@dillonbrowne.com if you want any of it deleted.

AI-legible by design

One corpus, humans and agents alike

The markdown files in knowledge-base/ are compiled at build time into the Site Copilot's standing context, so the assistant answers from the same source of truth as the pages themselves. That same corpus — plus every blog post — is published as plain text for external agents and crawlers, so machines reading this site get the same facts humans do. Nothing is written twice, so nothing can drift.