Netlify
App Deploys already uses Netlify; claim and keep going.
Cloudflare Pages
Free with unlimited static bandwidth.
What Windsurf gives you
Anything; App Deploys supports common JS frameworks.
Built-in hosting
App Deploys publishes to Netlify under Windsurf's account at <name>.windsurf.build; you can claim the site into your own Netlify account.
- Free: Free: 1 deploy per day, 1 unclaimed site. Pro: 5 deploys/day, 5 unclaimed sites. Intended for previews; unclaimed sites may be deleted.
- Custom domain: Claim the site into your Netlify account, then add a domain there.
First: which kind of project do you have?
| Type | How to tell | What the host needs |
|---|---|---|
| Static / SPA | Build outputs dist/ or build/. | Netlify (via App Deploys) or any static host. |
| Next.js / SSR | next.config.* etc. | Netlify or Vercel. |
Get your code out
- Push to GitHub like any local project; App Deploys config lives in windsurf_deployment.yaml.
Build settings
- Build command
-
npm run build - Output
- Framework default
- Node
- Match local
Environment variables to copy
-
Your local .env — add values in Netlify after claiming the site.
Gotchas
- Claim your site from the deploy link quickly — unclaimed previews can be removed.
Step-by-step guides for Windsurf
- Netlify Native: App Deploys already uses Netlify. Claim the site to keep it.
- Vercel Great for Next.js projects from Windsurf.
- Cloudflare Pages Cheapest for static output.
Database & login
Data: Neon (opens in a new tab): Free: 100 projects, 100 CU-hours per project/month, 1 GB storage per project (20 GB total). Compare databases
Auth: Clerk (opens in a new tab): Hobby: free — 50,000 monthly retained users per app, up to 3 social connections.
Common errors
- Supabase warns “RLS disabled” — your table is public
- “new row violates row-level security policy” (42501)
- Page works, but refreshing it gives a 404
- Blank page or “supabaseUrl is required” after moving off the builder
- Google login sends you back to localhost (or “redirect_uri_mismatch”)
- Deploy succeeds but shows a blank page or “Page not found”
- Firebase: “This domain is not authorized for OAuth operations”
- Clerk: “Development keys” warning or sign-in broken in production