- My project: Hermes IDE | GitHub
- Me: gabrielanhaia
You have an idea. You're ready to build. And then you open your browser to set up infrastructure and suddenly you're comparing 47 cloud providers, 12 database options, and 6 different ways to send an email. Three hours later you've deployed nothing and you're reading a blog post about Kubernetes.
Stop.
I've built side projects that died in a week and products that made it to production with real users. The biggest lesson: your infrastructure choices in week one don't matter nearly as much as you think. What matters is shipping fast, keeping costs near zero until you have users, and not painting yourself into a corner you can't get out of.
For each piece of your stack, I'll tell you what to use when you're starting, when to upgrade, and what's not worth paying for until you actually need it.
The Golden Rule: Don't Optimize for Scale You Don't Have
If you have zero users, your infrastructure needs are trivial. A $5/month VPS can handle more traffic than most side projects will ever see. The goal at this stage is:
- Spend as close to $0 as possible. Every dollar spent before you have users is a dollar wasted.
- Ship fast. Pick boring tools you already know.
- Stay portable. Don't lock yourself into a vendor you can't leave.
Hosting
People overthink this one more than anything else.
Option 1: VPS (Virtual Private Server)
A VPS is a virtual machine you rent. You get root access, install whatever you want, and run your app however you like. It's the most flexible and often the cheapest option.
Top picks:
| Provider | Starting price | Standout |
|---|---|---|
| Hetzner | ~$4/mo | Best price-to-performance ratio in the industry. European data centers (Germany, Finland), plus US (Ashburn, Hillsboro). If your users are in Europe, this is the obvious choice. |
| DigitalOcean | ~$6/mo | Great developer experience, solid docs, straightforward UI. The "safe" choice. |
| Linode (Akamai) | ~$5/mo | Similar to DigitalOcean, good global coverage. |
| Vultr | ~$5/mo | Lots of locations, competitive pricing. Good if you need a region the others don't cover. |
When to use a VPS: When you want full control, when you're running a backend in any language, when your app is a single service (API + database on the same box is fine for starting out).
When NOT to use a VPS: If you don't want to manage a server at all (updates, security, SSH). If that sounds painful, go with a PaaS instead.
Pro tip: Hetzner's price-to-performance is absurd. A 4 vCPU / 8 GB RAM box costs what DigitalOcean charges for 1 vCPU / 2 GB. For a bootstrapped project, that matters. The tradeoff is fewer data center regions and less hand-holding in the UI.
Option 2: PaaS (Platform as a Service)
You push code, it runs. No SSH, no server management, no thinking about nginx configs.
Top picks:
| Provider | Free tier? | Good for |
|---|---|---|
| Railway | $5 free credits/mo | Modern, fast, great DX. Deploy from GitHub in minutes. Supports databases too. |
| Render | Free for static, paid for services | Clean UI, auto-deploys from Git. Free tier for static sites and background workers. |
| Fly.io | Limited free tier | Deploy Docker containers globally. Great for APIs that need low latency worldwide. |
| Vercel | Generous free tier | The go-to for Next.js / frontend. Don't use it for backend-heavy apps. It's serverless under the hood and cold starts will hurt. |
| Netlify | Generous free tier | Static sites and JAMstack. Similar to Vercel but less framework-opinionated. |
When to use a PaaS: When you want to focus 100% on code and ship in hours, not days. When you're a solo founder and don't want to play sysadmin.
When NOT to use a PaaS: When costs start climbing. PaaS pricing is great at $0-20/month and terrible at $200+/month. That's when you migrate to a VPS.
Option 3: Cloud Giants (AWS, GCP, Azure)
My honest advice: skip these at the start. Unless you already know them well.
AWS has 200+ services. The billing is unpredictable. The console is a maze. You will spend more time configuring IAM policies than writing code. GCP is slightly better, Azure is slightly worse. All three are designed for enterprises with dedicated DevOps teams, not solo founders.
When they make sense: When you need a specific managed service (SQS, Lambda, DynamoDB), when you're at scale and need the reliability guarantees, or when you got startup credits. Apply for AWS Activate or GCP for Startups. They give $5k-100k in free credits, and that changes the math completely.
The exception: If you already work with AWS daily and can set up an EC2 instance with your eyes closed, go ahead. Use what you know. Speed of shipping beats theoretical optimization.
My recommendation
Solo/bootstrapped, day one: Hetzner VPS ($4-8/mo) if you're comfortable with Linux, or Railway if you want zero ops.
Domain Name
You need one. Don't overthink it.
Where to buy:
| Registrar | Why |
|---|---|
| Cloudflare Registrar | At-cost pricing (no markup, no renewal tricks). If you're using Cloudflare for DNS anyway (you should be, see below), this keeps everything in one place. |
| Namecheap | Good prices, decent UI, reliable. The classic choice. |
| Porkbun | Cheap, no-nonsense, good for less common TLDs. |
Avoid: GoDaddy (upsells everywhere, renewal prices spike), Google Domains (shut down, migrated to Squarespace).
Cost: A .com runs $10-15/year. A .dev or .io is $15-40/year. Don't spend $2,000 on a premium domain before you have users. mycoolapp.dev is fine. Change it later if the project takes off.
Pro tip: Buy the domain early even if you're not ready to launch. Good names disappear. But don't buy 15 domains for 15 ideas. Buy one for the idea you're actually building right now.
DNS and CDN
Cloudflare. Just Use It.
This isn't even a decision. Cloudflare's free tier is absurdly generous and there's no reason not to use it.
What you get for free:
- DNS. Fast, reliable, globally distributed. Point your domain here.
- CDN. Your static assets get cached on 300+ edge servers worldwide. Free.
- DDoS protection. Basic but real. Free.
- SSL/TLS. Free HTTPS certificates, auto-renewed. No more Let's Encrypt cron jobs.
- Page Rules / Redirects. Basic traffic routing for free.
Set up Cloudflare on day one. Even if your app is just a landing page. It takes 10 minutes and you get production-quality DNS and CDN for $0.
When to pay: Cloudflare's paid plans ($20/mo+) add WAF rules, image optimization, and analytics. You won't need these until you have real traffic. The free tier covers 99% of startups in their first year.
Alternatives: Fastly (expensive, for big scale), AWS CloudFront (complex, pay-per-use). Neither is worth it when Cloudflare free exists.
Database
Bad decisions here actually hurt, because migrating databases is painful. Choose wisely.
For most web apps: PostgreSQL
PostgreSQL is the right default for almost every project. It handles relational data, JSON data (with jsonb), full-text search, geospatial queries, and more. It's not the best at any single thing, but it's good-to-great at everything. One database that covers 90% of use cases means fewer moving parts.
How to run it:
| Option | Cost | Effort |
|---|---|---|
| On your VPS | Free (already paying for the VPS) | Medium. You manage backups and updates. |
| Supabase | Free tier (500 MB) | Low. Managed Postgres + auth + APIs. Great for MVPs. |
| Neon | Free tier (512 MB) | Low. Serverless Postgres, scales to zero. Good for side projects. |
| Railway | ~$5/mo | Low. One-click Postgres alongside your app. |
| AWS RDS / GCP Cloud SQL | $15-50/mo | Low ops but high cost for a startup. |
My recommendation for day one: Run Postgres on your VPS if you have one. It's free and simple. If you're on a PaaS, use Supabase or Neon's free tier.
When to pay for managed: When your project has real users and you can't afford downtime. Managed databases handle backups, failover, and patching. That's worth $15-30/month when people depend on your service.
When PostgreSQL isn't enough
| Need | Use |
|---|---|
| Caching / sessions | Redis (or Valkey, its open-source fork). Run it on your VPS or use Upstash (free tier with pay-per-use). |
| Full-text search (serious) | Meilisearch (self-hosted, free) or Typesense (cloud, free tier). Elasticsearch is overkill for startups. |
| Real-time / offline-first | SQLite with Litestream for replication. Seriously underrated for single-server apps. |
| Document store | Just use Postgres jsonb. You almost certainly don't need MongoDB. |
Hot take on MongoDB: Most projects that use MongoDB would be better served by Postgres. Mongo is great for genuinely schemaless data at massive scale. If you're building a CRUD app with users and orders, that's relational data. Use a relational database.
Object Storage (Files, Images, Uploads)
You need somewhere to store user uploads, images, PDFs, and other files. Don't put them in your database. Don't store them on your VPS filesystem (you'll lose them when you migrate servers).
Top picks:
| Provider | Free tier | Price after | S3-compatible? |
|---|---|---|---|
| Cloudflare R2 | 10 GB + 10M requests/mo | $0.015/GB/mo | Yes |
| Backblaze B2 | 10 GB | $0.006/GB/mo | Yes |
| AWS S3 | 5 GB (12 months) | $0.023/GB/mo | It IS S3 |
| MinIO (self-hosted) | Free | Free (your VPS cost) | Yes |
Go with Cloudflare R2. The free tier is generous, there are zero egress fees (AWS S3 charges you every time someone downloads a file), and it's S3-compatible so your code works with any S3 SDK.
Why egress fees matter: With AWS S3, you pay to store files AND you pay every time someone downloads them. If you host images that get popular, your bill can spike out of nowhere. R2 and Backblaze B2 don't charge egress. For a startup watching every dollar, this is the difference between a predictable bill and a surprise.
Authentication
Don't build auth from scratch. You will get it wrong. Password hashing, session management, OAuth flows, email verification, password reset. That's a massive surface area for security bugs, and the cost of getting it wrong is losing your users' data.
Top picks:
| Provider | Free tier | Good for |
|---|---|---|
| Supabase Auth | 50k MAUs | If you're already using Supabase for your database, just use this. |
| Clerk | 10k MAUs | Beautiful prebuilt components. Best DX if you're using React/Next.js. |
| Auth.js (NextAuth) | Free (self-hosted) | Open source, you own the data. Good if you want control. |
| Firebase Auth | Generous free tier | Proven, works with any stack, good social login support. |
| Keycloak (self-hosted) | Free | Enterprise-grade, self-hosted. Powerful but complex. Overkill for most startups. |
If you're using Supabase, use Supabase Auth. If not, Clerk for the fastest setup, Auth.js if you want to own everything. Most free tiers cover you until 10k+ monthly active users. That's a good problem to have.
Transactional Email
Your app needs to send emails: verification, password reset, notifications. Don't use Gmail's SMTP. It'll get rate-limited and flagged as spam.
Top picks:
| Provider | Free tier | After that |
|---|---|---|
| Resend | 3,000 emails/mo | $20/mo for 50k |
| Postmark | 100 emails/mo (trial) | $15/mo for 10k |
| Amazon SES | 3,000/mo (if sent from EC2) | $0.10 per 1,000 |
| Brevo (ex-Sendinblue) | 300 emails/day | $9/mo |
Resend if you care about developer experience (great API, React email templates). Amazon SES if you want the cheapest per-email cost at scale.
Pro tip: Set up SPF, DKIM, and DMARC records on your domain from day one. Without these, your emails go straight to spam. Every provider above has docs on how to do this. It takes 15 minutes and saves you hours of "why aren't users getting my verification emails?"
Source Code: GitHub vs GitLab vs Bitbucket
Your code needs a home. Short answer: use GitHub.
Long answer: GitHub won the developer platform war. The ecosystem is unmatched. GitHub Actions for CI/CD, Dependabot for security patches, Copilot for AI-assisted coding, and the fact that every open-source library you'll ever use lives there. Your future hires already know it.
GitLab is solid if you want everything (code, CI, registry, project management) in one platform and you prefer self-hosting. Some teams love it. But for a solo founder, GitHub's free tier covers everything you need.
Bitbucket still exists, mostly because of the Jira integration. If your team is deep in the Atlassian ecosystem, it makes sense. Otherwise, skip it.
Free tier: GitHub gives you unlimited private repos, 2,000 CI/CD minutes/month, and 500 MB of package storage. That's more than enough for any startup.
CI/CD (Continuous Integration / Deployment)
You need automated tests and deploys. Manually SSHing into your server to git pull is fine for day one and embarrassing by day thirty.
Top picks:
| Provider | Free tier | Notes |
|---|---|---|
| GitHub Actions | 2,000 minutes/mo (free for public repos) | If your code is on GitHub, this is the default. Huge marketplace of actions. |
| GitLab CI | 400 minutes/mo | Good if you're on GitLab. |
| Coolify (self-hosted) | Free | Open-source PaaS you run on your own VPS. Heroku alternative. Handles deploys, databases, SSL. Worth looking at if you want PaaS convenience on VPS pricing. |
Just use GitHub Actions. It's where your code already lives, the free tier is generous, and you can go from running tests to deploying to your VPS with a simple workflow file.
Pro tip: If you're on a VPS and want push-to-deploy without setting up CI pipelines, look into Coolify. It's a self-hosted Heroku alternative that runs on your VPS and gives you automatic deploys, database management, and SSL through a web UI. Install it on a Hetzner box and you've got a PaaS experience for $4/month.
Monitoring and Error Tracking
You don't need this on day one. You need this on the day your first real user reports a bug and you have no idea what happened.
Top picks:
| Provider | Free tier | What it does |
|---|---|---|
| Better Stack (formerly Logtail) | Free tier available | Uptime monitoring + logs. Clean UI. |
| Sentry | 5k errors/mo | Error tracking with stack traces, breadcrumbs. Industry standard. |
| Grafana Cloud | 10k metrics, 50 GB logs | Full observability stack. Powerful but complex. |
| UptimeRobot | 50 monitors | Simple uptime pings. Get alerted when your site goes down. |
Set up UptimeRobot (free, 2-minute setup) on day one so you know when your site is down. Add Sentry when you have real users so you catch errors before they report them.
Don't set up Grafana/Prometheus/Loki on day one. You don't need dashboards when you have 3 users. Tail your logs with journalctl and move on.
Analytics
You built it. But is anyone using it? You need to know. Guessing doesn't count.
Top picks:
| Provider | Free tier | Notes |
|---|---|---|
| Plausible | $9/mo (no free tier, but worth it) | Privacy-friendly, lightweight, no cookie banners needed. EU-hosted. |
| PostHog | 1M events/mo | Product analytics, session recordings, feature flags. All-in-one. Self-hostable. |
| Google Analytics | Free | The default. Powerful, but heavy, and your users' data goes to Google. Requires cookie consent in the EU. |
| Umami (self-hosted) | Free | Open-source Plausible alternative. Run it on your VPS for $0. |
If you care about privacy (and your European users), go with Plausible or self-host Umami. If you want product analytics beyond page views (funnels, user journeys, feature usage), PostHog is hard to beat on the free tier.
Google Analytics is fine if you just need basics and don't mind the privacy tradeoffs. But for a startup, PostHog gives you way more signal about what users actually do in your app, not just which pages they visit.
Payments
If you're building a business, you need to charge money. This is one area where you should absolutely not build it yourself.
Top picks:
| Provider | Transaction fee | Good for |
|---|---|---|
| Stripe | 2.9% + $0.30 | The industry standard. Best docs, best API, huge ecosystem. Works globally. |
| Lemon Squeezy | 5% + $0.50 | Merchant of record, so they handle sales tax/VAT for you. Higher fee, but zero tax headaches. |
| Paddle | 5% + $0.50 | Same merchant-of-record model as Lemon Squeezy. Good for SaaS. |
The tax question matters more than you think. If you sell to customers in the EU, you're responsible for collecting and remitting VAT in every country. That's a nightmare for a solo founder. Lemon Squeezy and Paddle handle all of that because they're the merchant of record, meaning the sale technically goes through them. You pay a higher percentage, but you don't need an accountant in 27 countries.
Stripe is the right choice if you're selling in one country or you already have tax infrastructure figured out. The API is the best in the industry and the ecosystem of tools (Stripe Billing, Stripe Tax, Stripe Connect) is unmatched.
For most solo founders starting out: Lemon Squeezy until the 5% fee starts hurting, then migrate to Stripe + a tax solution when revenue justifies the complexity.
The $0 Stack (Everything Free)
Here's a complete stack that costs literally nothing:
| Layer | Tool | Free tier |
|---|---|---|
| Hosting | Railway or Render | Free credits / free tier |
| Domain | (skip for now, use the free subdomain) | $0 |
| DNS/CDN | Cloudflare | Free |
| Database | Supabase or Neon | Free tier |
| Storage | Cloudflare R2 | 10 GB free |
| Auth | Supabase Auth | 50k MAUs |
| Resend | 3k emails/mo | |
| Analytics | PostHog or Umami (self-hosted) | 1M events or free |
| Payments | Lemon Squeezy | 5% + $0.50 per sale |
| CI/CD | GitHub Actions | 2,000 min/mo |
| Monitoring | UptimeRobot | 50 monitors |
Total: $0/month. This stack can handle a real MVP with real users. You won't need to spend a dollar until you have traction.
The $10-20 Stack (Ready for Real Users)
When free tiers feel limiting:
| Layer | Tool | Cost |
|---|---|---|
| Hosting | Hetzner VPS (2 vCPU, 4 GB) | ~$6/mo |
| Domain | Cloudflare Registrar | ~$1/mo (billed yearly) |
| DNS/CDN | Cloudflare | Free |
| Database | PostgreSQL on VPS | Free (same box) |
| Storage | Cloudflare R2 | Free tier |
| Auth | Supabase Auth or Clerk | Free tier |
| Resend | Free tier | |
| Analytics | Umami on VPS | Free (self-hosted) |
| Payments | Lemon Squeezy or Stripe | % per sale |
| CI/CD | GitHub Actions | Free tier |
| Monitoring | UptimeRobot + Sentry | Free tiers |
| PaaS layer | Coolify on VPS | Free (self-hosted) |
Total: ~$7-8/month. This is what I'd recommend for most solo founders who are comfortable with a terminal. You get a real server, a real database, and PaaS-like deploys, all for less than a Netflix subscription.
Mistakes I've Seen (and Made)
1. Starting with Kubernetes. You have one service and zero users. You don't need container orchestration. You need a VPS and systemd. K8s is for teams running dozens of services at scale. You're not there yet. You may never be.
2. Using a microservices architecture. Build a monolith. Split it later if you need to. Every startup that succeeded started as a monolith. Most of them still are.
3. Paying for managed services before you need them. A managed database at $50/month makes sense when you have paying customers. Before that, Postgres on your VPS is fine.
4. Not setting up backups. This isn't a "scale" concern. Back up your database from day one. A cron job that dumps Postgres to R2/S3 once a day takes 10 minutes to set up and will save your project when (not if) something goes wrong. If you're using a managed database, make sure automated backups are actually enabled.
5. Choosing tech you don't know because it's "better". The best technology is the one you can ship with today. If you know Python, build it in Python. If you know JavaScript, use Node. The language and framework matter far less than actually launching.
When to Upgrade
Here's a rough guide for when to start spending real money:
| Signal | Action |
|---|---|
| Free tier limits hitting regularly | Move to paid tier of the same service |
| VPS CPU consistently above 70% | Upgrade to a bigger VPS (still cheaper than migrating) |
| You can't afford downtime | Move database to managed (Supabase, RDS, etc.) |
| You're making revenue | Invest in monitoring, error tracking, better email |
| You have a team | Set up proper CI/CD, staging environments, code review |
| You're past $500/mo on PaaS | Consider migrating to VPS + Coolify for massive savings |
The pattern: start free, pay when it hurts, and always know what you're paying for and why.
Now Go Build Something
Nobody ever lost a startup because they used Hetzner instead of AWS. Plenty of startups died because the founder spent three weeks configuring Terraform instead of talking to users.
Pick a stack from the tables above, set it up this weekend, and ship something. You can always change things later. You can't get back the weeks you spent comparing options instead of building.
What does your stack look like? Did I miss a service you swear by? Drop it in the comments. I'll update this post with good suggestions.
Want to go deeper?
This article covers the highlights, but the full picture is a lot bigger. I wrote a book that goes into every layer in detail — hosting, payments, databases, security, tax compliance, CI/CD, privacy regulations, and complete stacks at every budget from $0 to $200/month. It also includes dedicated playbooks for SaaS, e-commerce, marketplaces, mobile apps, API products, and content platforms.
Ship It: The Complete Tech Stack Guide for Startup Founders — 306 pages, 32 chapters. From zero infrastructure to production-ready.

Top comments (0)