Cloudflare Workers / OpenNext dropped; both apps moved to Vercel serverless
clapointe-carbonleo migrated the frontend and backend off Cloudflare across ten commits in a single afternoon. The process was iterative and included at least one dependency-cull mistake that had to be walked back.
Frontend side: open-next.config.ts is deleted and a five-line vercel.json added. The Cloudflare-specific npm scripts (preview, deploy, upload, cf-typegen) are removed. Then @aws-sdk/client-s3, @aws-sdk/s3-request-presigner, and @opennextjs/cloudflare are all stripped in one commit - and the AWS packages are immediately restored in the next one (0785add, message: "needed for R2 storage"). The fork uses S3-compatible R2 access, so those packages were never Cloudflare-specific; they were caught in a bulk removal by name pattern. The stale package-lock.json is also deleted to clear outdated resolutions.
Backend side is cleaner. 35fd778 adds backend/vercel.json pointing @vercel/node at src/index.ts and wraps app.listen() in a process.env.VERCEL !== "1" guard while exporting app as default - the standard Express-on-Vercel-serverless pattern. The CORS configuration is also improved: a callback-based origin validator replaces the single-string origin, accepting http://localhost:3000, https://mike-legal-three.vercel.app, and process.env.FRONTEND_URL. (The Vercel preview URL changed once during setup: mike-legal-dhz4.vercel.app was corrected to mike-legal-three.vercel.app in a follow-up commit.)
Two things in this batch are worth lifting independently of the deployment target. The Express serverless pattern in backend/src/index.ts (if (process.env.VERCEL !== "1") app.listen(...); export default app;) works for any serverless host, Vercel included. The callback-style CORS origin validator is strictly better than upstream's single-string FRONTEND_URL and handles multiple allowed origins cleanly.
Spotted something wrong? Or know the PR text has fresher detail than the writeup above?