Put your vibe-coded app on your own domain: Cloudflare Pages vs Vercel

You built an app with AI, bought a domain, and want it live on that domain with HTTPS, without breaking your email.

Published Oct 16, 2026 Last tested: Oct 16, 2026 Verdict: final Test log (6 entries)

Short answer: It's a near tie. Cloudflare Pages (85/100) is our pick because it needed the fewest setup steps, our tie-breaker; Vercel (86/100) is the runner-up, with safer defaults, but its free Hobby plan is non-commercial only.

The verdict

Winner

Cloudflare Pageswon on tie-breaker

85/100

Cloudflare's static hosting with Git deploys; server code runs as Cloudflare Workers.

Passed every scored deploy check (live on our domain, HTTPS, redirect, API, no leaked secret, redeploy on push, rollback), with the fewest setup steps and the fastest certificate. But Express can't run on Workers, so we rewrote the API (29 lines), no HSTS header was sent, and preview links are public by default. Score: 85/100 (average of two runs). Our pick on the tie-breaker: fewest setup steps.

Visit Cloudflare Pages

Runner-up

Vercel

86/100

Hosting that builds your app from GitHub on every push and runs your API as serverless functions.

Passed every scored deploy check (live on our domain, HTTPS, redirect, API, no leaked secret, redeploy on push, rollback). The Express API ran with a 7-line config file and a 4-line wrapper (21 lines added, 4 removed). HTTPS, HSTS and the http-to-https redirect were on by default, and preview links sat behind a Vercel login. Score: 86/100 (average of two runs), 1 point ahead, but runner-up on our tie-breaker (fewest setup steps). Catch: the free Hobby plan is for personal, non-commercial use.

Visit Vercel

Quick answers

How do I put my Lovable app on my own domain?

Two routes. Lovable's built-in custom domain is available on its paid plans, per Lovable's docs; we haven't tested it yet. Or connect your Lovable project to GitHub and deploy that repo on one of the hosts we tested here, Cloudflare Pages or Vercel, then add your domain there. Our verdict covers the second route.

Cloudflare Pages or Vercel: which should I use?

It's a near tie. Cloudflare Pages needed fewer setup steps, but server code has to be rewritten for Cloudflare Workers. Pick Vercel if you want safer defaults (HSTS, private previews) and are non-commercial or on Pro; Hobby is non-commercial only.

What DNS records do I need?

For a subdomain like app.yourdomain.com, one CNAME record. Vercel asked for CNAME app → cname.vercel-dns.com, and Cloudflare Pages for CNAME app → <project>.pages.dev. Add the domain in the host's dashboard first, then add the record at your registrar. Leave your MX records alone.

Why is my custom domain stuck on "verifying" or has no SSL certificate yet?

In our test, Cloudflare reported "CNAME record not set" until the record existed, and Vercel showed the domain as misconfigured. Both cleared on their own once DNS was live, then issued a free SSL certificate automatically (Cloudflare about 4 minutes after DNS was live). A certificate can't be issued until the record resolves, so no SSL usually means the same DNS problem. Check for a typo in the record value and for an old A or CNAME record on the same name.

Can I host it for free?

Yes, both runs cost $0. Vercel's Hobby plan is free but restricted to non-commercial, personal use. Cloudflare's Self-Serve Subscription Agreement has no personal-use or non-commercial clause, and Cloudflare Pages' free plan allows 500 builds a month (all checked 2026-10-16).

Will changing DNS break my email?

Not if you only add or change the website record (CNAME or A) and leave MX records alone. We only added CNAME records for two subdomains.

Why

Who this is for: you made an app with Lovable, Bolt, Cursor or another AI tool, the code is (or can be) on GitHub, and you want it on your own domain with HTTPS.

Our pick: Cloudflare Pages (85/100). To put a vibe-coded app on your own domain, we recommend Cloudflare Pages, based on our 2026-10-16 test. It needed the fewest setup steps of the two, had a valid certificate about 4 minutes after DNS was live, and Cloudflare’s self-serve terms have no non-commercial clause (checked 2026-10-16). The catch: Express can’t run there, so we rewrote our small API for Cloudflare Workers.

Runner-up: Vercel (86/100). Pick Vercel if you want safer defaults (HSTS, private previews) and are non-commercial or on Pro; Hobby is non-commercial only. It also ran our Express API with a small config file instead of a rewrite.

It’s a near tie. Vercel scored 1 point higher. The two were within 5 points, so we ran both a second time, as our rubric requires, and averaged the runs; the second runs matched the first (Vercel 86, Cloudflare Pages 85). Our rule breaks ties on fewest setup steps, which went to Cloudflare.

Gotchas on default settings

Vercel’s Express setup didn’t serve our built frontend. Vercel says files in public/ are served, but files our build wrote there returned 404. Fix: a vercel.json that builds the frontend with Vite into dist, plus api/index.js that exports your Express app, with a rewrite from /api/(.*) to /api.

Vercel’s production branch isn’t on the Git settings page. We found it under Settings → Environments → Production → Branch Tracking. Until it pointed at our branch, pushes built preview deployments only.

After a rollback on Vercel, pushes stop going live. Vercel pauses automatic production updates after a rollback until you promote a deployment. Promote once and pushes go live again.

Cloudflare needs a one-time GitHub link in its dashboard. Installing Cloudflare’s GitHub app wasn’t enough; the API kept failing with error 8000011 until the link was made in the dashboard.

Unknown paths behave differently. Cloudflare Pages returned the app itself for a made-up path (good for apps with client-side routes); Vercel returned a plain 404, so add a rewrite if your app has client-side routes.

Scores

Scored with our published rubric. Tested 2026-10-16. Both scores are the average of two runs (each tool scored the same both times). The totals were within 5 points, so the pick went to the tie-breaker set in our test script before testing: fewest setup steps (Effort), then time.

VercelCloudflare Pages
Task success (35)55
Effort (15)3 (4 setup steps by the account owner, 1 problem the docs didn’t explain)4 (2 setup steps, 1 problem the docs didn’t explain)
Time (10)55
Cost (10)4 (free plan is non-commercial only)5
Quality, docs and developer experience (10)33
Ownership (10)4 (config file plus a small wrapper)3 (API rewritten for Workers)
Safe defaults (10)53 (no HSTS, public previews)
Total86 (avg of 86, 86)85 (avg of 85, 85)

Both passed the checks that matter most: the app and its API live on our own domain over HTTPS, http redirected to https, and our server-only test secret never appeared in the browser files.

What it costs

Both runs cost $0 on the free plans.

  • Vercel Hobby: free, non-commercial and personal use only, 50 domains per project, 100 deployments a day (checked 2026-10-16).
  • Cloudflare Pages Free: 500 builds a month, one at a time, 100 custom domains per project, 20,000 files per site (checked 2026-10-16).

Don’t break your email when you change DNS

Your website and your email use different DNS records. Website: A or CNAME. Email: MX (plus TXT records for SPF and DKIM). Change only the website record and your email keeps working. Need email on your domain? Our business email test is coming next.

Caveats

  • We tested one starter app: Vite + React with a small Express API, the same app as our login test. A plain static site would be simpler on both.
  • We used subdomains on a domain whose DNS stays at the registrar (Spaceship). Root domain and www were not tested.
  • Runs were done by an AI agent following vendor docs, with the account owner doing dashboard steps. Vercel’s certificate time was slowed by our own failed first deploy. Second runs reused the first runs’ code, so they confirm the results, not the times.

Not tested yet

  • Netlify: not tested (needs written permission).
  • Lovable’s built-in custom domain: not tested yet.
  • Root domain and www redirects.

Next step: before you launch, check your app’s security. See our tested pick for a security check for your vibe-coded app.

Test log

DateAgentStepResult
Oct 16, 2026Lando (agent)Re-runs (rubric: top two within 5 points). Same projects and code: scripted checks, a push to redeploy, and a rollback on each.Same pass/fail results as the first runs. Redeploy on push: Vercel 21 s, Cloudflare 22 s. Rollback: both live within 7 s. Scores unchanged: Vercel 86, Cloudflare Pages 85. Within 5 points, so the test script's tie-breaker (fewest setup steps) decided: Cloudflare Pages.
Oct 16, 2026Lando (agent)Vercel: redeploy on push and rollback (run j03-vercel-r1).Rollback put the old version back within 11 s. A push after that built in about 12 s but stayed off the domain: Vercel pauses automatic production updates after a rollback until you promote a deployment. After one promote, the next push went live in about 12 s with no manual step.
Oct 16, 2026Lando (agent)Vercel: connect the repo and deploy the starter app (Vite + React + Express) to j03-vercel.buildwiththis.xyz.Took three tries. Express zero-config didn't find our entry file, then didn't serve the frontend built into public/ (404). Worked with vercel.json (Vite output) plus api/index.js wrapping the Express app. 21 lines added, 4 removed. The production branch setting was under Settings → Environments, not Settings → Git.
Oct 16, 2026Lando (agent)Cloudflare Pages: Git-connected project on branch cloudflare, custom domain j03-cf.buildwiththis.xyz (run j03-cf-r1).Build and deploy took about 20 s. All checks passed. Redeploy on push went live in 32 s; rollback in 3 s or less. The unknown-path check returned the app shell. No HSTS header.
Oct 16, 2026Lando (agent)DNS: one batch of two CNAME records added at the registrar (Spaceship), visible on public DNS at 00:57 ET.Valid HTTPS certificate: Cloudflare 260 s later (Google Trust Services); Vercel 538 s later (Let's Encrypt), delayed partly because our first Vercel deploy had failed. Both redirected http to https (Vercel 308, Cloudflare 301).
Oct 16, 2026Lando (agent)Cloudflare: create the Pages project from GitHub via the API.Failed with error 8000011 until the GitHub connection was made once in the Cloudflare dashboard (installing the GitHub app alone wasn't enough). The docs only say to reinstall; the real cause came from a Cloudflare community answer.

Affiliate disclosure

This page has no affiliate links yet. Every link goes to the tool’s own homepage. Affiliate deals never decide a pick, and a tool with no affiliate program can still win. Full policy.

Sources