A Java storefront replaced under live traffic
A decade of Grails 3 running a seasonal storefront, where the back-to-school spike is the revenue and the platform could not be safely changed during it. Every customer password was a one-way BCrypt hash — the usual migration path ends in a forced reset email for every account, which is a login wall at the exact moment of purchase. At the counter, collecting an order took about ten minutes: wait for a POS terminal, look the order up, confirm it, walk to the back, find it, take a signature.
A Next.js storefront on Shopify, Stripe and Supabase, with authentication that migrates each customer at the moment they log in: the app validates the entered password against the legacy hash and provisions the new account in the same request. No cutover weekend, no reset email, no announcement. Then the counter itself — packed orders get a storage bin, a printed label and a QR code sent by SMS; staff scan it on an iPad, see the bin number, pull the order, and take the signature on the same screen.