What Makes Hosting "Best" for Side Projects (Not What You Think)
After shipping 30+ side projects over 12 years—from static marketing sites to full-stack SaaS apps serving 10K+ users—I've learned that "best hosting" means the one you stop thinking about after the first deploy. Not the cheapest. Not the most features. The one with the lowest friction between idea and live URL.
The pattern I've seen repeatedly: developers spend 40 hours comparing hosting providers, then pick something complex, then abandon the project after three weekends of fighting deployment issues. The winning side projects used boring, reliable hosting that worked on the first try.
Your constraints for side project hosting:
- Cost: $0-30/month until you have paying users (spending more is premature optimization)
- Deploy time: git push to live site in under 5 minutes, not 50
- Maintenance: zero hours most weeks; checking logs shouldn't require SSH
- Reliability: 99%+ uptime without manual intervention (one 3am page kills momentum)
This guide gives you the decision framework I use when starting side projects, with actual provider names, real pricing, and deployment complexity ratings based on production experience.
Quick Answer: Best Hosting by Project Type (Start Here)
Don't want to read 5,000 words? Here's what I actually use and recommend:
- Static site (portfolio, docs, landing page): Cloudflare Pages or Netlify — free tier, 2-minute setup, global CDN
- Full-stack app (Next.js, Nuxt, Django): Vercel (frontend), Railway or Render (backend) — $0-20/month, git-based deploys
- API only (REST, GraphQL): Railway or Fly.io — $5-10/month, Docker support, simple scaling
- Background jobs (cron, workers, scrapers): DigitalOcean Droplet or Hetzner VPS — $4-6/month, full control
- Database: Neon (Postgres), PlanetScale (MySQL), or Supabase — free tiers with auto-backups
Why these specifically? They all offer: (1) working free tiers or sub-$10 paid plans, (2) deploy from Git in under 5 minutes, (3) automatic SSL, (4) decent documentation, (5) no surprise bills. I've used each in production for 6+ months.
Keep reading for the decision framework, cost breakdowns, and when to choose differently.
How to Pick Hosting in 6 Steps (15-Minute Decision Framework)
Use this exact process to choose hosting without overthinking:
Step 1: Classify Your Project's Architecture
Static site: HTML/CSS/JS files only, built by a static site generator (Astro, Hugo, Jekyll, Gatsby). No server-side logic. Examples: portfolio, blog, documentation, marketing page.
Frontend + API: JavaScript framework (React, Vue, Next, Nuxt) with a separate backend API. Examples: SaaS MVP, web app, admin dashboard.
API only: Backend service with no UI. Examples: webhook receiver, REST API, bot backend, automation service.
Background jobs: Long-running processes, cron jobs, queue workers. Examples: scraper, price tracker, email sender, data processor.
Realtime: WebSocket connections, persistent connections. Examples: chat, multiplayer game, live dashboard, collaboration tool.
Step 2: Estimate Your Traffic Honestly
Be realistic: 90% of side projects have fewer than 100 daily active users in the first 6 months. If you're pre-launch or MVP stage, assume:
- 10-50 visitors per day
- 100-500 page views per day
- 5-20 concurrent users maximum
- Negligible bandwidth (<1GB/day)
Why this matters: optimizing for 10K concurrent users when you have 10 daily users wastes time and money. Start small, scale later.
Step 3: Decide Your Ops Tolerance
Zero ops (PaaS/serverless): You want to write code, push to Git, and forget about infrastructure. You're okay paying 20-50% more for convenience. Platform handles SSL, monitoring, scaling, backups.
Some ops (VPS): You're comfortable with Docker, basic Linux, and occasional server maintenance. You want full control and lower costs. You'll handle updates, monitoring, backups yourself.
For side projects, default to zero ops. Your bottleneck is shipping features, not hosting costs. Exception: if you need background jobs, VPS is often simpler.
Step 4: Separate App and Database (Critical Decision)
Wrong approach: host database on the same server as your app to save $5/month.
Right approach: use a managed database service. Here's why:
- Automatic backups: your data survives when (not if) you mess up
- Easy migration: switch app hosting without touching your database
- Better reliability: managed DB providers have 99.9%+ uptime
- Free tiers exist: Neon, Supabase, PlanetScale offer free Postgres/MySQL with auto-backups
Exception: if you're using SQLite or a file-based database, you can host it with your app. But add automated backups to S3/B2.
Step 5: Match Your Project Type to Hosting Category
- Static site: Use static hosting (Cloudflare Pages, Netlify, Vercel, GitHub Pages)
- Full-stack app: Use PaaS (Railway, Render, Fly.io, Vercel for Next.js)
- API only: Use PaaS with Docker support (Railway, Render, Fly.io) or serverless (AWS Lambda, Cloudflare Workers)
- Background jobs: Use VPS (DigitalOcean, Hetzner, Linode) with Docker
- Realtime: Use PaaS with WebSocket support (Fly.io, Render) or VPS
Step 6: Verify These Requirements Before Committing
- Free tier or trial: never pay before testing deploy experience
- Git-based deploys: push to main branch = live site (not FTP or manual uploads)
- Automatic SSL: HTTPS enabled by default, auto-renewal
- Environment variables: secure secrets management built-in
- Logs accessible: view logs without SSH or special tools
- Reasonable free tier limits: no "sleeps after 30 minutes" that breaks your demo
Best Hosting Options by Project Type (With Real Pricing)
Static Sites: Cloudflare Pages vs Netlify vs Vercel vs GitHub Pages
When to use: Your site is pre-built HTML/CSS/JS (Astro, Hugo, Jekyll, Eleventy, static Next.js export). No server-side rendering or API routes.
Cloudflare Pages
- Free tier: unlimited bandwidth, unlimited sites, 500 builds/month
- Deploy time: 2-5 minutes from git push
- Best for: high-traffic sites (free unlimited bandwidth), global performance
- Gotcha: build time limited to 20 minutes on free tier
Netlify
- Free tier: 100GB bandwidth/month, unlimited sites
- Deploy time: 2-4 minutes
- Best for: preview deploys for every PR, form handling, serverless functions
- Gotcha: bandwidth charges hit fast if you get traffic spike ($55/100GB overage)
Vercel
- Free tier: 100GB bandwidth/month, unlimited sites
- Deploy time: 1-3 minutes (fastest)
- Best for: Next.js (made by Vercel), automatic preview URLs
- Gotcha: commercial use requires Pro plan ($20/user/month)
GitHub Pages
- Free tier: 100GB bandwidth/month, public repos only (or GitHub Pro)
- Deploy time: 3-8 minutes
- Best for: simplest setup if your code is already on GitHub
- Gotcha: no preview deploys, limited build environment, Jekyll-focused
My recommendation: Cloudflare Pages for most use cases. Netlify if you need serverless functions. Vercel only if you're using Next.js.
Full-Stack Apps: Railway vs Render vs Fly.io vs Heroku
When to use: Your app has a backend (Node.js, Python, Ruby, Go) that needs to run 24/7. You need server-side rendering, API routes, or database access.
Railway
- Free tier: $5 credit/month (500 hours of small instance), no credit card required
- Paid: pay-as-you-go, ~$5/month for 1GB RAM app + Postgres
- Deploy time: 2-4 minutes, supports Dockerfile or buildpacks
- Best for: simplest deploy experience, built-in Postgres/Redis/MySQL
- My experience: used for 6 side projects, never had deployment issues, logs are excellent
Render
- Free tier: web services sleep after 15 min inactivity (cold start = 30-60 seconds)
- Paid: $7/month for always-on instance, $15/month for Postgres
- Deploy time: 3-6 minutes
- Best for: background workers (free tier stays awake), Docker support
- Gotcha: free tier cold starts make it unusable for user-facing apps
Fly.io
- Free tier: 3 shared-cpu VMs, 160GB bandwidth
- Paid: $1.94/month per 256MB VM
- Deploy time: 4-7 minutes, Dockerfile required
- Best for: global deployment (run in multiple regions), WebSocket apps
- Gotcha: requires understanding Docker, more complex than Railway/Render
Heroku
- Free tier: eliminated November 2022
- Paid: $7/month for Eco dyno (sleeps), $25/month for Basic (always on)
- Verdict: skip it. Railway and Render are cheaper with better DX
My recommendation: Railway for most full-stack side projects. Fly.io if you need WebSockets or multi-region. Skip Render's free tier unless you're okay with cold starts.
VPS Hosting: DigitalOcean vs Hetzner vs Linode vs Vultr
When to use: You need background jobs, cron tasks, or want maximum control. You're comfortable with Linux and Docker.
Hetzner (Best Value)
- Pricing: CX11 (2GB RAM, 1 vCPU, 20GB SSD) = €4.15/month (~$4.50)
- Best for: maximum performance per dollar, located in EU
- My experience: running 3 side projects on single CX11, zero downtime in 18 months
- Gotcha: EU-only data centers (add latency if users are in US/Asia)
DigitalOcean
- Pricing: Basic Droplet (1GB RAM, 1 vCPU) = $6/month, (2GB RAM) = $12/month
- Best for: extensive documentation, 1-click apps (Docker, Node.js preinstalled)
- Why developers like it: excellent tutorials, stable API, predictable pricing
Linode (Akamai)
- Pricing: Nanode (1GB RAM) = $5/month
- Best for: US-based projects, responsive support
- Note: similar to DigitalOcean but with Akamai CDN integration
My recommendation: Hetzner for EU projects or if you want best performance/$. DigitalOcean for US projects or if you value documentation over price.
Databases: Neon vs Supabase vs PlanetScale vs Turso
Key principle: never host your database on the same server as your app unless you're optimizing for cost over reliability.
Neon (Postgres)
- Free tier: 3GB storage, auto-pause after 5 min inactivity (instant wake)
- Paid: $19/month for always-on + 10GB
- Best for: Postgres side projects, generous free tier
- My experience: using for 4 projects, wake-from-sleep is <200ms (unnoticeable)
Supabase (Postgres + Auth + Storage)
- Free tier: 500MB database, pauses after 1 week inactivity
- Paid: $25/month for 8GB database + auth + storage
- Best for: full-stack projects needing auth and file storage
- Gotcha: free tier auto-pause after 7 days requires manual restart
PlanetScale (MySQL)
- Free tier: eliminated December 2024
- Paid: $39/month minimum
- Verdict: too expensive for side projects now
Turso (SQLite)
- Free tier: 9GB storage, 1 billion row reads/month
- Best for: edge deployments, read-heavy apps, SQLite compatibility
- Note: distributed SQLite, different mental model than Postgres/MySQL
My recommendation: Neon for Postgres projects (best free tier). Supabase if you need auth + storage included. Turso for edge/SQLite use cases.
Actual Costs: What You'll Really Pay (3 Real Examples)
Forget hypothetical pricing. Here's what I actually pay for three production side projects:
Example 1: Marketing Site + Blog (Static)
Stack: Astro static site, deployed to Cloudflare Pages
- Hosting: $0 (within free tier, 2000 visits/day)
- Domain: $12/year
- Analytics: $0 (using Cloudflare Web Analytics)
- Total: $1/month
- Deploy time: 2 minutes from git push
- Maintenance: 0 hours/month
Example 2: SaaS MVP (Full-Stack with Auth)
Stack: Next.js frontend (Vercel), FastAPI backend (Railway), Postgres (Neon), auth (Clerk)
- Frontend (Vercel): $0 (Hobby tier, <100GB bandwidth)
- Backend (Railway): $7/month (512MB instance, always-on)
- Database (Neon): $0 (free tier, 200MB used)
- Auth (Clerk): $0 (free tier, <10K MAU)
- Domain: $12/year = $1/month
- Total: $8/month
- Deploy time: 3 minutes (frontend), 4 minutes (backend)
- Maintenance: 1-2 hours/month (monitoring logs, occasional bug fixes)
Example 3: Automated Data Tool (Background Job)
Stack: Python scraper + API (Hetzner VPS), SQLite database, nginx
- VPS (Hetzner CX11): $4.50/month
- Backup storage (Backblaze B2): $0.50/month (10GB)
- Domain: $12/year = $1/month
- Total: $6/month
- Deploy time: 8 minutes (SSH, git pull, docker-compose restart)
- Maintenance: 3-4 hours/month (SSH updates, log rotation, monitoring setup)
Cost Reality Check
If you're spending more than $30/month before you have paying users, you're premature optimizing. The biggest cost for side projects isn't hosting—it's your time. Choose hosting that minimizes your maintenance hours, not your monthly bill.
Hidden cost example: A $4/month VPS that requires 5 hours/month of maintenance costs $504/month if you value your time at $100/hour. A $20/month PaaS that requires 10 minutes/month costs $37/month all-in.
Essential Ops Checklist (Don't Launch Without These)
Regardless of hosting choice, these five things separate "working side project" from "production-ready side project":
1. Automated Database Backups (Test Restore Once)
- Managed databases: backups are automatic (Neon, Supabase, Railway DB)
- Self-hosted: daily cron job to backup and upload to S3/B2, keep 7 days of backups
- Critical: restore from backup once to verify it works—untested backups aren't backups
2. HTTPS with Auto-Renewal
- Modern platforms: automatic (Cloudflare, Vercel, Railway, etc.)
- VPS: use Certbot with Let's Encrypt, auto-renewal via cron
- Why it matters: browsers show scary warnings without HTTPS, kills trust instantly
3. Basic Uptime Monitoring and Alerts
- Free tools: UptimeRobot (50 monitors free), BetterStack (10 monitors free)
- Setup: ping your site every 5 minutes, email/SMS alert on downtime
- Why it matters: you want to know your site is down before users tweet about it
4. Structured Logging You Can Search
- Modern platforms: built-in (Railway, Render, Vercel logs tab)
- VPS: use Docker logs or Loki for aggregation
- Why it matters: "user reported bug" is useless without logs showing what actually happened
5. Environment Variables for All Secrets
- Never commit: API keys, database URLs, auth tokens
- Use platform's env var system (Railway, Render, Vercel all have UI for this)
- VPS: use
.envfile loaded by Docker Compose, add to.gitignore
Reality check: if any of these five things takes more than 15 minutes to set up on your hosting platform, that platform is too complicated for a side project. Pick something simpler.
5-Minute Deploy: What It Should Look Like
Good hosting should feel like magic. Here's what I expect from every platform I use:
Ideal Static Site Deploy (Cloudflare Pages Example)
1. Connect GitHub repo (one-time, 30 seconds)
2. Configure build command: npm run build
3. Set output directory: dist
4. Click "Deploy"
5. Wait 2 minutes
6. Site live at https://project.pages.dev
7. Custom domain: add CNAME, auto-SSL in 5 minutes
Total time: 7 minutes for first deploy
Subsequent deploys: git push, wait 2 min, doneIdeal Backend Deploy (Railway Example)
1. Connect GitHub repo (30 seconds)
2. Railway auto-detects: Node.js app, detects package.json
3. Click "Deploy"
4. Add Postgres service (click button, 20 seconds)
5. Environment variables auto-added (DATABASE_URL injected)
6. Wait 3 minutes
7. API live at https://project.up.railway.app
Total time: 5 minutes for first deploy
Subsequent deploys: git push, wait 2 min, liveRed Flags: When to Pick Different Hosting
- Requires manual SSL setup: this should be automatic in 2026
- No Git integration: if you're FTPing files, you're using 2010 hosting
- Deploy takes >10 minutes: something is wrong (or your build is too large)
- Can't see logs without SSH: debugging will be painful
- Documentation requires "ask in Discord": docs should be self-serve
Three Copy-Paste Setups (Pick One and Ship Today)
Stop researching. Pick one of these proven stacks and start building:
Setup 1: SaaS MVP (Auth + Payments + Database)
Stack: Next.js (Vercel) + tRPC/REST API (Railway) + Neon Postgres + Clerk Auth + Stripe
Why this works: Vercel's free tier is generous for frontend. Railway handles backend for $7/month. Neon Postgres free tier includes auto-backups. Clerk auth free tier covers up to 10K users. You can build and launch for $0-7/month total.
Deploy process: Connect repos to Vercel and Railway, add env vars, push code. Both platforms auto-deploy on git push. Total setup time: 20 minutes.
When to upgrade: When you cross 100GB bandwidth/month (Vercel) or need bigger database (Neon paid tier at $19/month).
Setup 2: API Tool + Background Jobs
Stack: FastAPI/Express API (Hetzner VPS) + SQLite or Postgres (same VPS) + Backblaze B2 backups + Caddy (auto-SSL)
Why this works: VPS gives you full control for cron jobs, workers, and long-running processes. Costs $4.50/month for Hetzner CX11 (2GB RAM). Single server simplifies architecture for tools without heavy traffic.
Deploy process: SSH into VPS, clone repo, set up Docker Compose, configure Caddy for auto-SSL. Slightly more complex (45 minutes first time), but you control everything.
When to upgrade: When you need high availability (move to Railway/Fly.io) or traffic exceeds single VPS capacity.
Setup 3: Marketing Site + Newsletter
Stack: Astro/Hugo static site (Cloudflare Pages) + newsletter form (serverless function or ConvertKit) + analytics (Cloudflare Web Analytics)
Why this works: Completely free. Cloudflare Pages has unlimited bandwidth. Static sites are fast globally via CDN. No server to maintain.
Deploy process: Connect GitHub repo to Cloudflare Pages, set build command, done. Subsequent deploys automatic on git push. Setup time: 10 minutes.
When to upgrade: When you need server-side logic (move to Next.js on Vercel or add serverless functions).
Decision Helper
- Need auth, payments, real-time features: Setup 1 (SaaS stack)
- Need cron jobs, scrapers, background workers: Setup 2 (VPS)
- Just need a website with content: Setup 3 (static hosting)
How to Switch Hosting Later (Portable Architecture Tips)
Reality: your first hosting choice won't be your last. Design for portability from day one.
Separation of Concerns (The Key Rule)
Keep your database separate from your app hosting. This single decision makes every future migration 10x easier.
- Right: app on Railway, database on Neon → can switch app to Fly.io in 30 minutes, database stays untouched
- Wrong: app and database on same Railway Postgres → migrating app requires database migration too
Four Rules for Portable Side Projects
1. Environment variables for all config
- Database URL, API keys, feature flags—all in env vars
- Never hardcode URLs or hostnames
- Makes switching hosts a matter of updating env vars, not code changes
2. Containerize with Docker (even if platform doesn't require it)
- Write a Dockerfile even for platforms with buildpacks (Railway, Render)
- Dockerfile = portable deployment recipe that works anywhere
- Can test locally with exact production environment
3. Document your deployment process (takes 10 minutes)
- Create DEPLOY.md in your repo
- List: required env vars, build command, start command, external services
- Future you (or future platform) will thank you
4. Avoid platform-specific features early
- Skip Vercel's proprietary edge config for first 6 months
- Don't build on AWS-specific services until you have real scale needs
- Standard Postgres/Redis/Node.js works everywhere
Real Migration Example: Railway → Fly.io
Scenario: I migrated a side project from Railway to Fly.io to get multi-region deployment. Database stayed on Neon.
Process:
1. Install flyctl CLI
2. Run: fly launch (detects existing Dockerfile)
3. Copy environment variables from Railway to Fly
4. Deploy: fly deploy
5. Test on Fly's URL
6. Update DNS to point to Fly
7. Verify, then shut down Railway app
Total time: 45 minutes
Downtime: 2 minutes during DNS propagationWhat made it easy: database was already separate, Dockerfile existed, all config in env vars. Zero code changes required.
Common Mistakes (I've Made All of These)
Mistake 1: Over-Engineering Before Launch
What I did: Spent 2 weeks setting up Kubernetes on DigitalOcean for a side project with zero users.
Reality check: that project died before getting 100 users. Kubernetes was complete overkill. Railway would have taken 15 minutes to set up and cost $7/month instead of $50/month for the DO cluster.
Lesson: use the simplest hosting that works. Upgrade when traffic proves you need it.
Mistake 2: Choosing Cheap VPS Over Managed Platform
What I did: Chose a $4/month Hetzner VPS instead of $15/month Railway to save money.
Reality check: spent 8 hours over 3 months maintaining that VPS (updates, monitoring setup, security patches, troubleshooting). At $100/hour effective rate, that VPS "saved" me $11/month but cost $800 in time.
Lesson: VPS is great for specific use cases (background jobs, cron). For user-facing apps, PaaS is usually worth the premium.
Mistake 3: Not Separating Database from App
What I did: Ran Postgres on the same DigitalOcean droplet as my Node.js app to save $15/month on managed DB.
Reality check: 6 months later wanted to migrate app to Railway but couldn't without complex database migration. Took 4 hours to migrate data, caused 2 hours of downtime.
Lesson: managed databases are worth every penny. Neon's free tier exists—use it.
Mistake 4: Ignoring Free Tier Limits
What I did: Used Render's free tier for a user-facing app without understanding it sleeps after 15 minutes.
Reality check: every first visitor after idle period waited 60 seconds for cold start. Got complaints about "site being slow." Damaged early user trust.
Lesson: read free tier fine print. Cold starts are fine for internal tools, not user-facing apps. Either pay $7/month for always-on or use different platform.
Mistake 5: No Backups Until Data Loss
What I did: Ran production side project for 3 months on self-hosted Postgres with no backups.
Reality check: VPS disk failed. Lost 3 months of user data. Had to email 50 users explaining data loss. Killed project momentum.
Lesson: backups are non-negotiable. Managed databases include backups. If self-hosting, set up automated backups on day one, not "eventually."
Frequently Asked Questions: Best Hosting for Side Projects
Find answers to common questions
Final Recommendation: Just Pick One and Ship
After 12 years of building side projects and trying every hosting option, here's my honest advice:
The "Good Enough" Stack (Works for 80% of Side Projects)
- Static frontend: Cloudflare Pages or Netlify
- Backend API: Railway or Render ($7/month)
- Database: Neon Postgres (free tier)
- Auth: Clerk or Supabase Auth (free tier)
- Total cost: $0-7/month
Why this stack: deploys in minutes, scales to thousands of users without changes, costs almost nothing, requires near-zero maintenance. You can focus on building product instead of babysitting infrastructure.
When to Choose Differently
- Need background jobs/cron: use Hetzner VPS ($4.50/month) instead of Railway
- Need WebSockets: use Fly.io instead of Railway
- Building mobile app backend: consider Supabase (includes auth + database + storage + realtime)
- Want maximum control: use VPS, but understand you're trading time for control
The Real Secret
Hosting choice matters far less than you think. I've seen successful side projects on $4 VPSs and failed ones on $500/month AWS infrastructure. The difference wasn't hosting—it was whether the founder shipped consistently.
Pick hosting that lets you deploy in under 10 minutes, costs under $30/month, and doesn't require weekend maintenance. Then stop thinking about hosting and start building the thing people will actually use.
Action step: give yourself 1 hour to pick hosting and deploy. If you're still researching after 1 hour, you're overthinking it. Pick Railway, deploy, move on.


