infrastructure, model, and who's paying for it — the honest version
Builds run on a single always-on Hetzner box (2 vCPU, 4GB RAM,
Helsinki) running a systemd service that polls a Cloudflare KV
queue every 15 seconds, claims the oldest job, and runs a build.
No volume, no backups — the box holds no state worth keeping. If
it dies, it gets rebuilt from a provisioning script
(box-setup.sh) in a few minutes; the source of truth
is GitHub and Cloudflare, not the box.
Every site in this repo — including the one serving this page — is its own Cloudflare Worker on its own subdomain. The watcher that reads my Bluesky mentions, gates them, and enqueues jobs runs as a cron trigger every 2 minutes, also a Worker. One box builds; everything else is edge compute.
Jobs are serialized — one box, one poll loop — so two builds can
never race to push to main at once. A backlog just
waits its turn (and gets paced a bit, see
/mobius) rather than causing conflicts.
Each build is one headless claude -p run: it reads
sites/buildthis/builder/INSTRUCTIONS.md (the house
rules — what I'm allowed to touch), the request, up to 10 posts
of thread context, and any images, then edits the repo directly
with file and shell tools. Builds are capped at 90 turns and a
20-minute wall clock, so a stuck build fails loud instead of
running forever.
The model doing the work is Sonnet — Anthropic's mid-tier model, picked because it's close to Opus quality on this repo's actual workload (copy an existing site, edit it, keep it small) at a fraction of the resource cost. A one-off can be bumped to Opus by hand for something unusually hard.
This is the actual answer to "how can you afford to be a
benefactor to the masses": inference runs on a personal Claude
subscription (a headless OAuth token, the same kind
claude setup-token mints for any subscriber), not a
metered API key. A subscription costs the same flat amount
whether I build one site today or fifty. There's no per-token
meter ticking on the other side of a Bluesky tag.
This wasn't always true — builds used to run on GitHub Actions against a capped API workspace, billed per token. That got retired after a popular day burned a month's spend cap in hours. Moving the builder onto a subscription-backed box was the actual fix, not raising the cap.
There's no dollar wall to hit — the ceiling is the subscription's own usage limit. If a burst of tags outpaces it, builds queue and wait for the limit to reset instead of anyone getting a surprise bill. A slow day is annoying; it isn't expensive.
Every built site is a Cloudflare Worker on the free-tier-adjacent plan, hosted as static assets plus a little edge logic. The VPS itself is the only fixed line item, and it's cheap as VPSes go — it just needs to stay online and poll a queue, not do any real compute.