Taking the weekly build challenge? →

Vibe Coder Deployment Playbook

You built the thing. Now get it live. This is the exact guide to deploy your Bolt or Cursor project to production — without burning a week on config hell.

Pick Your Platform First

Most vibe coders go straight to Vercel because someone mentioned it once. That works — sometimes. Picking the wrong platform for your project type is the #1 reason deployments fail before they start.

PlatformBest ForCold StartsDB Support
VercelNext.js, React, Bolt/Lovable projectsYes (Serverless)Via integrations
RailwayFull-stack, Node/Express backends, Cursor projectsNoBuilt-in Postgres
NetlifyStatic sites, Gatsby, plain ReactYes (Functions)Via plugins
RenderLong-running servers, background jobsYes (free tier)Built-in Postgres

The simple rule:

Built with Bolt or Lovable? → Vercel

Backend-heavy with a real server (Express, FastAPI)? → Railway

Static site or marketing page? → Netlify

🔒

Unlock Playbook

The full deployment guide, including step-by-step Vercel/Railway configs and env var best practices, is reserved for our community of builders.

Free forever • Join 1,200+ vibe coders

Deploying a Bolt Project to Vercel

Most common path. Most Bolt projects generate a React or Next.js frontend.

01

Get your code into GitHub

In Bolt, click Export → Download ZIP or connect GitHub directly. If you downloaded a ZIP:

Terminal

cd your-project-folder
git init
git add .
git commit -m "initial commit"
git remote add origin https://github.com/you/project.git
git push -u origin main
02

Connect to Vercel

  1. Go to vercel.com → Sign up with GitHub
  2. Click Add New → Project
  3. Select your repo from the list
  4. Vercel auto-detects the framework
03

Verify build settings

SettingCorrect Value
Build Commandnpm run build
Output Directorydist (Vite) or .next (Next.js)
Install Commandnpm install
04

Add environment variables before deploying

Go to Settings → Environment Variables and add every key from your .env file. See the full env vars guide below.

05

Deploy

Click Deploy. Watch the build logs in real time. If it fails, the error will be in the logs — don't guess, read them. When it passes: live URL in under 2 minutes.

🔒

Unlock Technical Blueprints

The exact configurations for Cursor + Railway deployments are reserved for our community members.

Free forever • Join 1,200+ vibe coders

Deploying a Cursor Project to Railway

Cursor projects often have a real backend — Express, FastAPI, database connections. Vercel's serverless model fights against this. Railway is the right call.

01

Push to GitHub (same as above)

Same drill. Get it into a GitHub repo.

02

Create a Railway project

  1. Go to railway.app → Sign up with GitHub
  2. Click New Project → Deploy from GitHub Repo
  3. Select your repo
  4. Railway detects your stack automatically
03

Add a database (if needed)

In your project dashboard, click + New → Database → Postgres. Railway auto-injects DATABASE_URL into your environment — no manual copying needed.

04

Set your start command

Go to Settings → Deploy and set your start command:

Terminal

# Node.js
npm start

# Python (FastAPI)
uvicorn main:app --host 0.0.0.0 --port $PORT
CriticalMake sure your server listens on process.env.PORT. Hardcoding port 3000 will break it.
05

Add environment variables + deploy

Add vars in the Variables tab using the Raw Editor. Railway auto-deploys on every git push.

Environment Variables — The #1 Gotcha

More deployments fail because of env vars than any other reason.

What they look like

File: .env.local

OPENAI_API_KEY=sk-proj-...
DATABASE_URL=postgresql://...
STRIPE_SECRET_KEY=sk_live_...
NEXT_PUBLIC_API_URL=https://yourapi.com
Mistake 1Forgetting NEXT_PUBLIC_ prefix

In Next.js, any var accessible in the browser must start with NEXT_PUBLIC_. Without it, it's undefined on the client.

Mistake 2Trailing spaces in values

Copy-pasting from Hint or chat often adds invisible trailing spaces. Your API call gets a space at the end and fails with 401. Always double-check.

Mistake 3.env.local vars not pushed

.env.local is gitignored. If you added vars there and forgot to add them to Vercel/Railway, they don't exist in production.

Mistake 4Not redeploying after adding vars

Adding environment variables to Vercel does NOT trigger a redeploy. Manually trigger one: Deployments → Redeploy.

Common Build Errors + Exact Fixes

Module not found

Module not found: Error: Can't resolve './components/Header'

Fix: File wasn't pushed to GitHub (gitignore or case sensitivity). Mac filesystems are case-insensitive; Linux (Vercel's build server) is not. Header.jsx ≠ header.jsx in production.

Terminal

git status
git add .
git commit -m "fix: add missing files"
git push

Output directory missing

Error: No output directory named "dist" found after the build

Fix: Your build script isn't generating the expected folder. Check package.json → build script. Confirm it runs locally.

Terminal

npm run build
ls dist/  # Should have index.html and assets

File not found on build server

ENOENT: no such file or directory during build

Fix: Code references a hardcoded absolute path (/Users/yourname/...) that doesn't exist on the server. Replace with relative paths. Also check .gitignore.

Build timeout

Build times out / npm install hangs

Fix: Heavy optional dependency or expensive postinstall script. Add a .npmrc to skip optional deps.

Terminal

# .npmrc
omit=optional

Pre-Launch Checklist

Five minutes here saves five hours debugging in production.

1

Run the build locally first

If it fails locally, fix it before touching deployment.

Terminal

npm run build
npm run preview
2

Check every .env variable is added to your platform

Open your .env file. Open your Vercel/Railway variables panel. One missing key = silent failure.

3

Confirm output directory matches platform settings

Check what npm run build creates (dist, .next, build, out) and make sure that's what you've told the platform to look for.

4

Verify your server listens on process.env.PORT

For Railway and Render, the platform assigns a port. Hardcoding 3000 will break it.

5

Test with a fresh incognito window after deploy

Your browser has cached data from local dev. Incognito is what new users actually see.

Challenge Accepted

Ready to build something worth deploying?

Join the challenge