The Gap Between Local and Live
You've built something on your laptop. It works. Your friends tested it, they liked it, and now you want real users to access it without your MacBook running in the corner.
This is where most side projects stall.
The jump from localhost to production isn't just hitting a deploy button. It's SSL certificates, database backups, log rotation, uptime monitoring, and about a hundred small decisions you didn't have to make when it was just you and Node.js.
This post walks through the real steps to move a side project live — and keep it running without becoming a full-time DevOps engineer.
Step 1: Stop Running on Your Machine
First, accept that your laptop is not a server. It will sleep. It will update. You'll close it. Your app goes down.
You need actual hosting — somewhere that runs 24/7 without your involvement.
For a side project, you have three realistic paths:
- Platform-as-a-Service (PaaS): Heroku, Vercel, Railway, Render. Deploy via Git, they handle the infrastructure. Easiest, but you lose control and pay a premium for small projects.
- Managed Linux VPS: DigitalOcean, Linode, or a managed Linux VPS host. You get a real server, but you manage updates and security. Middle ground.
- Your own cloud account: AWS, Google Cloud, Azure. Full control, lowest cost at scale, but you're responsible for everything. Steep learning curve.
For most side projects, a managed Linux VPS is the sweet spot — you get reliability without managing kernel updates yourself.
Step 2: Choose Your Database Strategy
If your app uses a database (and most do), you can't just copy your local SQLite file to production.
Your options:
- Managed database service: AWS RDS, DigitalOcean Managed Databases, Render Postgres. Backups, failover, and scaling are automatic. Costs ~$15–50/mo. Worth it.
- Database on the same server: Cheaper upfront, but backups become your problem. If the server fails, your data might be gone.
- Serverless databases: Supabase, Planetscale, Firebase. Good for small projects, pay-as-you-go. Can surprise you with costs if you scale.
Backups are non-negotiable. A database without backups is a disaster waiting to happen. Test your restore process before you need it.
Step 3: Set Up HTTPS and a Domain
Your app needs a real domain and HTTPS. This isn't optional anymore — browsers flag HTTP sites as insecure, and users won't trust you.
The steps:
- Buy a domain ($10–15/year from Namecheap, Google Domains, or similar).
- Point it to your server's IP address (via DNS A record).
- Install a free SSL certificate (Let's Encrypt + Certbot). Takes 10 minutes, renews automatically.
- Set up HTTP → HTTPS redirects so old links don't break.
If you're using a PaaS, they handle this for you. If you're on a VPS, it's still straightforward — most hosting providers have one-click Let's Encrypt setup.
Step 4: Automate Deploys (Don't SSH and Manually Restart)
If you're logging into your server via SSH and restarting your app by hand every time you push code, you're doing it wrong. You'll forget. You'll break things at midnight. You'll hate it.
Set up a simple deployment pipeline:
- Git-based deploy: Push to a GitHub branch, a webhook triggers a script on your server that pulls the latest code and restarts the app.
- CI/CD platform: GitHub Actions, GitLab CI, or Render's built-in deploys. They handle the pipeline for you.
- Docker: Containerize your app so you can test locally exactly as it runs in production. More setup, but eliminates "it works on my machine" problems.
Start simple: a bash script that pulls the latest code, installs dependencies, runs tests, and restarts your app. As you grow, layer on more sophistication.
Step 5: Monitor and Alert
Your app will fail. A dependency will break. Memory will leak. Traffic will spike. You need to know about it before your users complain.
Essential monitoring:
- Uptime monitoring: Pingdom, UptimeRobot (free tier exists). Checks your site every 5 minutes. Alerts you if it's down.
- Error tracking: Sentry, Rollbar, or LogRocket. Automatically catches crashes and shows you the stack trace.
- Server metrics: CPU, memory, disk space. Most hosting providers include basic dashboards. Set alerts for when you're approaching limits.
- Application logs: Write logs to a file or service (not just stdout). You'll need them to debug production issues.
Start with uptime monitoring and error tracking. They catch 90% of problems. Add server metrics once you're comfortable.
Step 6: Plan for Backups and Disasters
A backup you can't restore is worthless. Test yours.
Your backup strategy should cover:
- Database snapshots (daily, kept for at least 7 days).
- Application code (it's in Git, so you're already good here).
- User-uploaded files (if your app has them).
- Configuration and secrets (stored securely, backed up separately).
If you're on a managed database service, they handle backups. If you're managing your own, use tools like pg_dump (for Postgres) or mysqldump (for MySQL) on a cron job, and store backups off-server (S3, Google Cloud Storage, or a backup service).
Once a month, actually restore from a backup in a test environment. It's the only way to know it works.
Step 7: Manage Secrets and Environment Variables
Never hardcode API keys, database passwords, or Stripe keys in your code. Ever.
Use environment variables instead:
- Store secrets in a
.envfile (never commit it). - Load them into your app at startup.
- On your server, set them via your hosting platform's dashboard or a secrets manager.
If you're using an AI pair programmer like Claude Code to help you deploy, make sure you're not accidentally showing it your real secrets. Work with dummy values during development, then swap them in at deploy time.
Step 8: Plan for Growth (Before You Need It)
Your side project might stay small. It might explode. Plan for both.
If you stay small: A single managed VPS ($10–20/mo) handles most side projects forever. Optimize your code, cache aggressively, and you're done.
If you grow: You'll need to scale horizontally (multiple servers) or vertically (bigger server). This is where a cloud platform like AWS starts making sense. But don't over-engineer early — YAGNI (You Aren't Gonna Need It) is real.
The AI Pair Programmer Advantage
All of this — deployment scripts, monitoring setup, database migrations — is tedious boilerplate. An AI pair programmer can handle it.
Tools like Claude Code can:
- Generate deployment scripts tailored to your stack.
- Set up monitoring and alerting configurations.
- Write database migration scripts.
- Debug production issues by analyzing logs and suggesting fixes.
If you're hosting on a platform that gives you a dedicated AI engineer (like Vibesies does), you can literally describe what you need and have it built and deployed. For side projects, this eliminates a ton of friction.
A Practical Checklist
Before you launch:
- ☐ Domain registered and pointing to your server.
- ☐ HTTPS enabled (Let's Encrypt or managed SSL).
- ☐ Database backed up and restore tested.
- ☐ Deployment automated (no manual SSH restarts).
- ☐ Uptime monitoring enabled.
- ☐ Error tracking set up (Sentry or similar).
- ☐ Environment variables for secrets (not hardcoded).
- ☐ Logs being written somewhere you can read them.
- ☐ One test user besides you has used it successfully.
- ☐ You know how to restore from a backup.
This isn't overkill. This is the bare minimum to not lose sleep at night.
Conclusion: From Side Project to Production
Scaling a side project from localhost to production is about removing single points of failure. Your laptop fails. Your deploy process breaks. Your database corrupts. You plan for all of it.
The good news: it's not complicated. A managed Linux VPS, basic monitoring, automated deploys, and tested backups cover 95% of what you need. You don't need Kubernetes or microservices. You don't need to understand load balancing. You need reliability and peace of mind.
Start with the checklist above. Get it live. Monitor it for a week. Then relax knowing your side project will still be running next month.