← All case studies
Sep – Oct 2026Burn by Cara Loren

Moving a live checkout site off WordPress, verified with real purchases

Burn's signup and checkout site ran on an aging WordPress install. The marketing team built a new Astro site. I owned the cutover (DNS, secrets, checkout and tracking) and verified it with real purchases.

Role
Lead developer · cutover and infrastructure
Timeline
Sep – Oct 2026
Stack
AstroVercelStripe CheckoutCloud DNSDopplerPostHognginx
scripts/verify-cutover.sh · output, simplified
$ ./verify-cutover.sh getburnapp.com
200  /                      apex served by Vercel
308  www → apex             canonical redirect
200  /checkout              live Stripe key
302  /thank-you             → production host
200  wp./cancel             legacy, still served
200  wp./webhooks/*         legacy, still served
     … 11 more

✓ 17/17 · purchase → app login → cancel verified
  • 17 / 17Production paths verified on cutover day
  • 3Live checkout bugs found and fixed during cutover
  • 1Real purchase, login and cancel, verified end to end

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.

Hiring a full-stack or mobile engineer?

I’m based in Seattle, working globally, and open to full-stack and mobile roles across apps, payments and the systems behind them. Email is the fastest way to reach me.