A migration that dropped 15 of 18 pages
Every route the new site emitted returned 200, so verification passed. Nothing compared the new site against the old site's inventory.
Astro · Cloudflare Workers · Claude Code
A method for shipping production marketing sites — and a catalogue of 33 failures that passed every check on the way out. Clean build, clean types, clean deploy, wrong result.
Not hypotheticals, and not general advice. Each failed silently on a real rebuild — the compiler was happy, the deploy was clean, and nothing anywhere reported it.
Every route the new site emitted returned 200, so verification passed. Nothing compared the new site against the old site's inventory.
toLocaleDateString with no timezone formats in the build machine's zone. Correct in London, wrong in Los Angeles, same commit.
MX left behind in the old zone. Bounces go to the sender, so the people who find out cannot tell the client.
localhost canonicalsNo environment set, no error, no warning. The bundler ran perfectly and the site told Google it lived on localhost.
An inherited container ID in the template sent a real business's traffic to another company's property, for weeks.
The page jumps, so it looks like it worked. Keyboard users land back in the navigation.
Disallow: / and noindex cancelling outA blocked crawler never fetches the page, so it never reads the noindex — and the staging URL gets indexed anyway.
_headers path silently dropping the CSPThe later block replaces the earlier one rather than merging. The file still contains every header; none of them are sent.
The template is the skeleton. The skill is the method that drives it — discovery, stack decisions, the build, then verification against the deployed thing.
Astro, static, on Cloudflare Workers. Builds green immediately, with no content, no images and no secrets.
npm create website-build-kit@latest my-siteFor Claude Code. Then just ask — it matches on description, so there is no command to remember.
/plugin marketplace add nurkamol/website-build-kit
/plugin install website-build@website-build-kitIt ships no palette, no typeface and no home page — deliberately, so that two sites built from it cannot look alike. What it does ship is the part that takes longest to get right and is easiest to get subtly wrong.