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.

LocalhostProduction
AccessOnly youAnyone
UptimeTerminal open24/7
URLlocalhost:3000yourapp.com
SecurityNo encryptionHTTPS
ErrorsTerminalMonitoring
CostFree$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

ProviderBest forFree tierDeployDatabase
VercelNext.jsFreegit pushNo (bring your own)
RailwayNode.js / Express / Python$5/mogit pushPostgres
Fly.ioContainers / GoFree allowanceflyctlPostgres
Cloudflare PagesStatic sitesFreegit pushNo
RenderFull-stack / DockerFree (sleeps)git pushPostgres

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.

Previous/shipNextScope drift