Going to production
Your code works on localhost. Here is what you need to put it on the internet.
What changes between localhost and production
Everything that was free and easy on your machine becomes something you have to think about.
| Localhost | Production | |
|---|---|---|
| Access | Only you | Anyone |
| Uptime | Terminal open | 24/7 |
| URL | localhost:3000 | yourapp.com |
| Security | No encryption | HTTPS |
| Errors | Terminal | Monitoring |
| Cost | Free | $0-20/mo |
The 6 things you need
Hosting
A server that runs your code. For most projects: Vercel (free) or Railway ($5/mo). Pick whichever matches your stack and move on.
Deploy
Most providers deploy automatically when you push to GitHub. Connect your repo once and every merge to main goes live.
Domain
Optional. Most providers give you a free one (yourapp.vercel.app). A custom domain costs about $10/year if you want one later.
SSL
Automatic. Every modern host handles this. You do not configure it.
Secrets
Set them in your hosting provider's dashboard. Never in code. Never committed to git. Your .env file stays local.
Monitoring
Sentry for errors (free). UptimeRobot for uptime (free). Or just check your host's built-in logs until you need more.
How much does it cost?
FREE -- $0/mo
Vercel + Supabase free tiers. Good for side projects, demos, and anything pre-launch. You can run here indefinitely if traffic is low.
STARTER -- $5-15/mo
Railway + a custom domain. For small products that need a database and a real URL. Most indie projects live here.
GROWING -- $20-50/mo
Vercel Pro + Supabase Pro. For products with real traffic and users who expect uptime. You probably have revenue at this point.
Hosting comparison
| Provider | Best for | Free tier | Deploy | Database |
|---|---|---|---|---|
| Vercel | Next.js | Free | git push | No (bring your own) |
| Railway | Node.js / Express / Python | $5/mo | git push | Postgres |
| Fly.io | Containers / Go | Free allowance | flyctl | Postgres |
| Cloudflare Pages | Static sites | Free | git push | No |
| Render | Full-stack / Docker | Free (sleeps) | git push | Postgres |
Using /ship to deploy
❯ /ship Pre-flight results: [PASS] All changes committed [PASS] Tests: 12 passed, 0 failed [PASS] Secrets: 0 found [PASS] Branch: feat/habit-tracker (not main) What would you like to do? 1. Local -- commit only, no remote 2. Production -- deploy to a hosting provider 3. Done -- already deployed, just save the journal > 2 Recommended: Railway (Node.js + SQLite detected) 1. Create a Railway account at railway.app 2. Run: npm i -g @railway/cli && railway login 3. Run: railway init && railway up 4. Set environment variables in the Railway dashboard Deployed: https://habit-tracker-production.up.railway.app
After /ship creates the commit, choose option 2 and it walks you through each step. The agent picks a provider based on your stack and gives you the exact commands to run.
Security before deploying
Run /security --thorough before deploying. It checks for exposed secrets, missing auth, injection vectors, and anything else from the OWASP Top 10.
/ship reminds you if you have not run a security audit in the current sprint. Do not skip it.