I’ve been shipping side projects for a while now, and I finally found a setup that doesn’t make me anxious about the bill at the end of the month.
Recently I shipped SnapStub - a full-stack expense tracker with receipt OCR - and rebuilt my portfolio site. Total monthly cost for running both? Around €10. And I actually own my infrastructure.
Why I stopped using the “easy” platforms
Look, Vercel and Railway are nice. I’ve used them. But every time I wanted to add another project or needed more storage, I’d get that email about upgrading. And once you’re locked in, migrating is a pain.
I just wanted to build stuff on weekends without worrying about costs or vendor lock-in.
The stack I landed on
Coolify - my own little Heroku
Coolify runs on a €5/month Hetzner VPS. It’s basically self-hosted Heroku and it handles everything I need:
- Push to main, it deploys automatically
- SSL certificates just work (Let’s Encrypt)
- I can run multiple apps on one server
- No build minute limits
Both SnapStub’s Go backend and my Astro portfolio deploy here. Same server, same €5.
Cloudflare - seriously, how is this free
I put everything behind Cloudflare and I still can’t believe their free tier:
- CDN for static assets
- SSL/HTTPS automatic
- DNS with a dashboard that doesn’t suck
- DDoS protection included
Both my sites use this. Costs me nothing.
Cloudflare R2 - S3 but cheaper
SnapStub needs to store receipt images for OCR. I looked at S3 pricing and nope. R2 is way better:
- No egress fees (this is huge)
- S3-compatible so migrating is easy if I ever need to
- 10GB free, then it’s like €0.015/GB
I upload receipts without thinking about costs now.
Supabase - Postgres without the ops headache
I like Postgres. I don’t like managing Postgres. Supabase gives me:
- Managed database that just works
- Auth out of the box (saved me so much time)
- Row-level security for keeping user data separate
- Free tier is generous - 500MB database, 50k MAU
All of SnapStub’s user data lives here.
Resend - emails that don’t go to spam
For transactional emails (verification, password resets, etc), I use Resend. Picked it over SendGrid because:
- The API is actually nice to work with
- 3,000 emails/month free
- Emails actually land in inboxes
How it all connects
For SnapStub:
- Go backend runs on Coolify
- React web + Flutter app talk to Supabase
- Receipt images go to R2
- Emails through Resend
For my portfolio:
- Astro site on Coolify
- Contact form emails via Resend
Same infrastructure for both. One bill.
What I actually pay
| Service | Monthly Cost |
|---|---|
| Hetzner VPS (Coolify) | ~€5 |
| Cloudflare (CDN, DNS, SSL) | €0 |
| Cloudflare R2 | €0 (still in free tier) |
| Supabase | €0 (free tier) |
| Resend | €0 (free tier) |
| Total | ~€5-10/month |
Running this on Vercel Pro + managed database + S3 + email service would easily be €40-100+/month.
The honest downsides
I’m not going to pretend this is perfect:
- You need to be comfortable with basic server stuff. Coolify helps a lot, but you’re still managing a VPS.
- No auto-scaling. Fine for side projects, maybe not if you hit the front page of Hacker News.
- Free tiers have limits. If SnapStub takes off, I’ll pay more. That’s fine.
For weekend projects though? This setup is exactly what I needed.
Why I care about owning this
When stuff runs on my server:
- I can SSH in whenever I want
- I can export everything without asking anyone
- I can move to a bigger VPS in like 10 minutes
- No one can randomly ban my account
I’ve seen people lose projects because a platform changed their pricing or shut down their account. Not dealing with that.
If you want to try this
- Get a cheap VPS (Hetzner, DigitalOcean, whatever)
- Install Coolify - it’s one command
- Connect your GitHub repos
- Add Supabase for data, R2 for files, Resend for email
- Ship something
Takes maybe a Saturday to set up. Then you’re good.