Why I moved this blog from Vercel to Cloudflare Workers

Why I moved this Next.js blog off Vercel to Cloudflare Workers: the April 2026 security incident, the pricing math, and the technical steps of swapping in OpenNext and replacing the unmaintained Contentlayer with Velite.