The problem
The site where people sign up and pay for Burn ran on WordPress. The marketing team designed and built a new Astro site on Vercel. Someone had to move a live checkout to it without dropping sales, breaking app logins, or losing tracking. That was my part.
What I did
Staged the cutover. I didn’t flip everything at once. Vercel took over the domain while WordPress moved behind it on a separate hostname, still serving the two things that couldn’t move yet: the cancellation page and two webhooks. That let the new site go live without a big-bang migration.
Moved the infrastructure. I changed DNS, moved the site’s secrets into Doppler with automatic sync to Vercel, and corrected the primary domain and search-indexing settings so search engines index the new site under one canonical domain.
Found and fixed the checkout bugs. Three issues surfaced in live checks: production was running on a Stripe test key, some price lookup keys were missing, and a framework setting was sending the post-purchase redirect to localhost. I fixed each one and audited the roughly 40-minute window in which checkout had been on the test key.
Fixed tracking that ad blockers were eating. I added a first-party analytics proxy, so client events stopped disappearing for users with ad blockers.
Verified with real money. I made a real purchase, logged into the app with it, and cancelled it, end to end on production. I also hardened the legacy WordPress install before retiring it.
The outcome
Seventeen production paths were checked and passing on cutover day. The full money path (buy, get access, cancel) was verified with a real transaction rather than a test card. The team can now change the site without touching WordPress.
What I’d tell another team
Test cards prove your code works. A real purchase proves your configuration works, and configuration is what breaks during a migration.