Last year I was paying $89/month for cloud services I didn't fully control. Notion, Slack, GitHub Copilot, a VPS, and a managed database. Each one seemed cheap individually. Together they were a quiet drain.
Then I looked at the hardware I already owned. A Mac Mini M4 running 24/7. A Windows PC with GPUs that was idle half the day. An old Ubuntu box from a previous project. I was paying for cloud convenience while sitting on local capacity.
So I migrated everything. Not because I'm anti-cloud or a privacy maximalist — I'm neither. I just got curious whether I could match the functionality for less money, and what the tradeoffs would actually feel like.
What I Replaced
| Cloud Service | Monthly Cost | Self-Hosted Replacement | Runs On |
|---|---|---|---|
| Notion ($8/mo personal plan) | $8 | Obsidian + local Git sync | Mac Mini |
| Slack (free tier, limited history) | $0 | Mattermost | Ubuntu box |
| GitHub Copilot | $10 | Ollama + Continue.dev extension | Windows PC (RTX 3060) |
| DigitalOcean VPS ($6 droplet) | $6 | Docker + Nginx on Mac Mini | Mac Mini |
| Supabase (free tier, 500MB) | $0 | PostgreSQL in Docker | Mac Mini |
| Total | $24 | $0 ongoing |
Wait, that's only $24. Where did I get $89? There were three more services I also cut that weren't directly replaceable: a $15/mo analytics tool, a $20/mo newsletter platform, and a $30/mo CI/CD runner. I stopped using those entirely rather than self-hosting equivalents. My actual stack shrank, which is a different kind of saving.
The point: I wasn't just replacing services. I was questioning whether I needed them at all.
The New Stack
Notes & Documentation: Obsidian + Git
Notion is excellent. I used it for two years. But I never used the databases, the formulas, the relations. I used it as a markdown editor with folders. That's exactly what Obsidian is, except your files live on your disk as plain Markdown.
My setup:
- Obsidian desktop app on Mac and Windows
- Vault stored in
~/notes/on the Mac Mini - Synced to the Windows PC via a bare Git repo over local network
- No cloud sync service involved
The Git sync runs every hour via cron. It's not instant like Notion, but my notes don't need to be real-time. If I'm on the Windows PC and need a note from the Mac, I pull. Takes 2 seconds.
Tradeoff: No mobile app access when I'm away from home. I accepted this. 90% of my note-taking happens at my desk anyway.
Team Chat: Mattermost
I don't have a team. I have one collaborator on a side project and a couple of friends who help test things. Slack's free tier deletes messages after 90 days, which is annoying when you're debugging something from three months ago.
Mattermost runs in Docker on the Ubuntu box. It took 20 minutes to set up with Docker Compose. It has channels, threads, file uploads, and webhooks. Everything I actually used in Slack.
Tradeoff: No Slack Connect, no huddles, no third-party app directory. I don't need any of those. If I did, this replacement wouldn't work.
AI Coding Assistant: Ollama + Continue.dev
GitHub Copilot is genuinely good. I used it for a year. But I was already running local models for other tasks, and I started wondering whether a local Qwen 3 Coder 30B could match it.
Short answer: for autocomplete and simple generation, yes. For complex multi-file reasoning, Copilot is still better. But Continue.dev lets me switch models on the fly, and I've found that 80% of my coding assistance needs are simple enough for the local model.
The setup:
- Ollama on the Windows PC (RTX 3060, 12GB VRAM)
- Qwen 3 Coder 30B for generation
- DeepSeek R1 8B for reasoning tasks
- Continue.dev extension in Windsurf
Tradeoff: Slower. Copilot suggestions appear in under a second. My local setup takes 3-5 seconds for the 30B model. I adjusted my workflow to accept the delay — I hit tab less impulsively and think slightly more before requesting completions.
VPS Replacement: Docker + Nginx on the Mac Mini
I had a $6 DigitalOcean droplet running a few small services: a webhook receiver, a file server, and a reverse proxy for internal tools. Nothing that needed real horsepower.
The Mac Mini is already on 24/7 for my AI agents and cron jobs. Adding Docker and Nginx to it was trivial. It handles the same load with resources to spare.
I exposed it via Cloudflare Tunnel (free tier), so I don't need to open ports on my router or deal with dynamic DNS.
Tradeoff: If my home internet goes down, these services go down. The droplet never did. But my home internet has been stable for months, and the services aren't critical enough to warrant $6/month insurance against a rare outage.
Database: PostgreSQL in Docker
Supabase's free tier is generous but limited. I hit the 500MB cap twice and had to prune data. Self-hosting PostgreSQL in Docker gives me as much storage as my disk allows.
I use it for:
- Agent memory logs
- Telegram bot state
- Fiverr order tracking
- Personal analytics
It's not highly available, not backed up to the cloud, and not magically scalable. It's just a database that stores data and answers queries. For my use case, that's enough.
Tradeoff: I back up the data directory to an external drive weekly. If the Mac Mini dies, I lose up to a week of non-critical data. I can live with that.
What It Actually Costs
The cloud services cost $24/month ($288/year). The self-hosted stack costs:
| Cost | Amount | Notes |
|---|---|---|
| Electricity (Mac Mini 24/7) | ~$3/month | ~20W idle, measured with a smart plug |
| Electricity (Ubuntu box, always on) | ~$5/month | ~35W, older hardware |
| Initial hardware | $0 | Already owned |
| Cloudflare Tunnel | $0 | Free tier |
| Total | ~$8/month |
So I save about $16/month. Not life-changing money. But over a year that's $192, and more importantly, I own the stack. No pricing changes. No feature removals. No "we've updated our terms of service."
The Real Benefits (Beyond Money)
Latency. My internal tools respond instantly because they're on my LAN. The webhook receiver used to take 200ms from the VPS. Now it takes 5ms.
Privacy. My notes, chat history, and database are on my hardware. Not because I'm hiding anything, but because it's nobody's business what side projects I'm building.
Customization. When I wanted to add a custom webhook endpoint that formatted data specifically for my Telegram bots, I just wrote a Python script and dropped it in the Nginx config. No vendor limitations, no API quotas.
The Downsides (Honest)
Maintenance burden. When PostgreSQL had a disk space issue last month, I had to fix it myself. No support ticket to open. I spent an evening reading Docker logs and pruning old backups.
No mobile access to notes. This genuinely bothers me sometimes. I keep a small notebook app on my phone for quick captures, then transfer to Obsidian later. It's friction.
Backup anxiety. I back up to an external drive, but what if the house burns down? I've started syncing critical data to a cheap Hetzner storage box ($3/month) as off-site backup. So I'm not fully cloud-free after all — just selective about what needs redundancy.
Slower AI completions. I mentioned this above. It's real. There are moments where I miss Copilot's instant suggestions, especially when I'm tired and want the machine to think for me.
Who Shouldn't Do This
If you're on a team of more than three people, use the tools your team knows. If you need 99.99% uptime, pay for it. If you value your time at more than $50/hour and this migration would take you a weekend, it's probably not worth it financially.
I did this because:
- I'm a solo developer with full control over my stack
- I already owned the hardware
- I find this stuff genuinely interesting (if you don't, it'll feel like chores)
- My requirements are simple enough to match with open-source tools
The Bottom Line
Self-hosting isn't about sticking it to Big Tech or achieving digital purity. It's about matching your tools to your actual needs instead of paying for features you'll never use.
I'm not fully cloud-free. I still use GitHub, Cloudflare, and that Hetzner backup. The goal isn't ideological — it's practical. Pay for what you need. Run what you can. Question everything in between.
If you're curious about one specific replacement, drop a comment and I'll write a detailed setup guide for that piece.
Top comments (0)