Deploy Guide · Gap 4
Local
to
Live
From localhost to real URL
Under 2 hours · Step by step
Vercel · Railway · Fly.io
Getting your app working locally is one milestone. Getting it live — with a real URL, a custom domain, production environment variables, and something you can share — is a completely different challenge. This guide closes that gap.
Most vibe coding guides end before deployment. This one starts there. You'll go from "it works on my machine" to a live, publicly accessible URL in under two hours.
💻
Local build working
🔒
Env vars set
📦
Git pushed
🚀
Deployed
🌐
Custom domain
A tool that stays on your laptop helps no one. This guide takes you from working locally to live in the world.
THE COMPLETE SERIES Included in The Complete Series ($29).

Choose your deploy platform

The right platform depends on what you built. This decision takes 2 minutes — make it now before touching any config.

🚂
Railway
Best for: Node/Express backends, Python, apps that need a persistent server or a database. Detects your stack automatically. Very beginner-friendly pricing ($5 credit/month free).
Node/ExpressPythonDatabasesBackend
🦋
Netlify
Best for: Static sites and JAMstack apps. Similar to Vercel for frontend-only projects. Excellent for sites built with Bolt or that have no server component.
StaticJAMstackFormsFunctions

8 steps to your first deploy

1
Prepare your environment variables
Do this before touching any deploy platform
15 min

Every secret in your .env file needs to be set on the deploy platform as an environment variable — it will never see your .env file. This is the step that catches most first-time deployers off guard.

1
Open your .env file locally. Make a list of every variable in it.
2
Identify which values need to change for production (database URLs, API keys that have different prod/dev versions).
3
If you use Supabase: create a new project for production — don't use your dev project in production.
Critical: never commit .env to git
Before pushing to GitHub, run: git status and verify .env is not in the staged files. If it already was committed: rotate every secret immediately, then clean the git history.
2
Push your code to GitHub
A private repo is fine for everything below
10 min
If you haven't set up git yet
# In your project folder git init git add . git status # verify .env is NOT listed git commit -m "Initial commit" # Create repo on github.com, then: git remote add origin https://github.com/your-name/your-repo.git git push -u origin main
AI prompt for git help
"Walk me through pushing my project to a new GitHub repo. My project is in [folder]. I've never done this before. Show me every command."
3
Connect to Vercel (or Railway)
Takes about 5 minutes
5 min
1
Go to vercel.com, sign up with GitHub.
2
Click "Add New → Project". Select your repository from the list.
3
Vercel detects your framework automatically — verify it's correct.
4
Before clicking Deploy: go to "Environment Variables" and add every variable from your .env list.
5
Click Deploy. First deploy takes 2–5 minutes.
The most common first-deploy failure
Environment variables not set. Your app builds fine but crashes at runtime because it can't find the database URL or API key. Always set env vars before hitting Deploy.
4
Read the build logs — don't skip this
Where 80% of deployment problems are diagnosed
10 min

Every deploy platform shows build logs. Read them. If the deploy fails, the error is in there — often near the bottom. Don't guess; read.

Look for lines marked ERROR or Failed — these are the actual problem.
If you see "Module not found" — a package isn't in your package.json (maybe installed globally locally).
If you see "Environment variable X is not defined" — add it in the platform's env var settings.
AI prompt for build log errors
My deploy on Vercel failed. Here is the build log: [paste the full log] What is causing this error and how do I fix it?
5
Test your live URL thoroughly
Production behaves differently from development
20 min

Your app is live but production is different from your local environment. Test every critical path before sharing the URL with anyone.

Open the live URL in an incognito window (clears any cached state).
Walk through your done-test from the Intent Worksheet — the exact user journey.
Test on a real phone, not just a resized browser.
Open browser DevTools → Console. Any red errors? Investigate before sharing.
!
Test with a slow network: DevTools → Network tab → throttle to "Slow 3G". Is it still usable?
6
Add a custom domain (optional but recommended)
yourname.com instead of your-project-xyz.vercel.app
20 min

A custom domain makes your project feel real and shareable. Domains cost ~$12/year on Namecheap or Cloudflare. The connection process takes 20 minutes, but DNS propagation can take up to 24 hours.

1
Buy a domain on Namecheap or Cloudflare Registrar (cheapest options).
2
In Vercel: Project Settings → Domains → Add your domain.
3
Vercel shows you DNS records to add. Copy them.
4
In your domain registrar: go to DNS settings, add the records Vercel provided.
5
Wait 10–60 minutes. Check vercel.com/dashboard — it shows when the domain is verified.
AI prompt for DNS help
"I bought a domain on [Namecheap/Cloudflare]. Vercel is telling me to add these DNS records: [paste records]. Walk me through exactly where to add them in [registrar name]."
7
Set up automatic deploys
Push to git → live in 2 minutes, every time
5 min

Vercel and Railway both watch your GitHub repository by default. When you push new code, they deploy automatically. This is already set up from Step 3 — but confirm it works.

1
Make a tiny change locally (add a comment, change some text).
2
git add . && git commit -m "Test auto-deploy" && git push
3
Watch Vercel dashboard — a new deploy should start within 30 seconds.
4
If it doesn't: check Vercel project settings → Git → confirm the correct branch is connected.
8
Set up monitoring — the 48-hour window
The first two days after launch are the most revealing
15 min

The first 48 hours after launch reveal problems your testing didn't find: real users do unexpected things with real data on real devices. Set up the minimum viable monitoring before sharing your URL.

Error monitoring: Install Sentry (free tier). One script tag or npm package — shows you every error real users hit, in real time.
Uptime monitoring: Add your URL to UptimeRobot (free) — emails you if the site goes down.
!
Analytics: Add Plausible or Fathom (privacy-friendly) or Google Analytics — see who visits and what they do.
The most important post-launch action
Watch Sentry for the first hour after sharing your URL. The first real errors will appear within minutes. Most are minor — a missing image, a failed API call in an edge case — but catching them immediately builds trust with early users.

Pre-launch checklist

Must do before sharing
.env not committed to git
All env vars set on platform
Build logs show no errors
Live URL tested on real phone
Safety checklist passed
No console errors in DevTools
Core user journey works end to end
Strongly recommended
Custom domain connected
Sentry error tracking active
UptimeRobot monitoring
Slow network test passed
Tested in incognito window
HTTPS working (auto on Vercel)
404 page exists and is friendly
Nice to have
Analytics installed
Favicon set
Meta description added
Open Graph image for sharing
Privacy policy (if collecting data)
Loading states on all async ops
Performance tested (Lighthouse)

The 5 most common deploy failures

Build fails: Module not found
A package installed locally isn't in package.json. Run npm install [package-name] --save locally, commit the updated package.json, push again.
App crashes: env variable is undefined
You forgot to set an env var on the platform. Check the platform's environment variables settings. Add every variable from your .env file. Redeploy.
API routes return 404
Usually a routing config issue. The AI may have configured routes that work in dev but need a different config in production. Search your framework + "production API routes" for the exact fix.
Database connection fails in production
Your production database URL is different from your local one. Check that DATABASE_URL (or equivalent) is set to the production database, not the local one. If using Supabase, use the connection string from the production project.
CORS errors in browser console
Your backend is not allowing requests from your production frontend URL. Update your CORS config to include the production domain. Never use wildcard (*) in production — add your specific domain.
When in doubt: ask the AI
Paste the full error message, the relevant config file, and the deploy platform you're using. "My Vercel deploy fails with this error. Here are my files. What's wrong and how do I fix it?"