Somewhere in my house, a 2012 Mac mini is running my entire business.

Two websites. A PostgreSQL database. An automation platform with 24 active workflows. A sales bot that generates drone photography quotes. A fleet management system tracking vehicles via Telegram. A monitoring stack with Prometheus, Grafana, and Loki. Automated backups at 3 AM. An AI-powered IT bot named Quail who checks on everything four times a day.

All of it. On a machine that Apple stopped supporting years ago.

The math that started it

At the end of 2025, I was paying for:

ServiceMonthly Cost
DigitalOcean PostgreSQL$15
Replit hosting~$15-30
n8n cloud$60
Total$90-105/month

That’s over a thousand dollars a year to run things I could run myself. And I knew it. I’d just been too busy building systems for other organizations to build my own.

Classic Gen X move: spend 28 years keeping someone else’s infrastructure running, then look at your own setup and realize you’re overpaying for stuff you could do better with hardware you already own.

The Mac mini

The spec sheet is almost funny:

  • Model: Mac mini 6,2 (2012)
  • CPU: Intel i7-3615QM, 4 cores / 8 threads
  • RAM: 16GB
  • Storage: 2TB SSD (root + containers + backups)
  • OS: Ubuntu 24.04 LTS
  • Power draw: ~24 watts

Twenty-four watts. That’s less than a lightbulb. It runs 24/7 and I can’t even hear it.

I named it “vault” because that’s what it is — a place where everything important lives, under my roof, on my network, encrypted and backed up.

What’s running on it

Here’s the stack, because I know you want to see it:

Docker containers:

  • PostgreSQL 16 (production database — fleet data, expenses, maintenance logs)
  • n8n (automation platform — 24 workflows, webhooks, API integrations)
  • NGINX (serving sherlockaerotech.com and genxitcode.com)
  • Prometheus + Grafana + Loki (monitoring and dashboards)
  • Alertmanager + Blackbox Exporter (external probes, SSL monitoring)

System services:

  • Cloudflare Tunnel (exposes n8n and websites to the internet — no port forwarding, no static IP)
  • Tailscale (mesh VPN — access vault from anywhere, works through corporate firewalls)
  • apcupsd (UPS monitoring with graceful shutdown on low battery)
  • Automated backup cron (daily at 3 AM to USB drive, 30 daily + 12 weekly retention)
  • Quail, an AI monitoring bot that pings me on Telegram if anything goes sideways

Websites served:

  • sherlockaerotech.com (business site — drone photography)
  • genxitcode.com (the site you’re reading right now)

What it replaced

The migration took a few focused evenings in January 2026. Phase by phase:

  1. Cloudflare Tunnel — One install, one config file. Suddenly vault is reachable from the internet with zero port forwarding. Simpler than the NGINX reverse proxy it replaced.

  2. Database migration — Exported from DigitalOcean, imported to vault PostgreSQL. Verified every table. Updated credentials in n8n. Cancelled DigitalOcean.

  3. Workflow migration — Exported all 24 n8n workflows from cloud, imported to self-hosted n8n. Updated webhook URLs. Tested everything with live Telegram messages.

  4. Website migration — Downloaded from Replit, dropped into an NGINX container. DNS pointed to Cloudflare Tunnel. Done.

  5. Google Workspace OAuth — This was the most tedious part. Reconnecting Sheets, Gmail, Calendar, and Contacts to the self-hosted n8n. But it’s a one-time thing.

Every phase had a rollback plan. Cloud services stayed running until vault proved stable. I’m not an animal — I migrated my production systems the way I’d migrate anyone else’s.

The money move

Here’s where it gets good:

BeforeAfter
$90-105/month in cloud services$0/month hosting
Cloud n8n with usage limitsSelf-hosted n8n, unlimited
Shared database on someone else’s serverMy own PostgreSQL, my own backups
Claude Pro at $20/monthClaude Code Max at $100/month

I took the savings from killing cloud services and put them into Claude Code Max — unlimited access to Claude Opus. The tool I actually use every day to build everything.

Net cost change: approximately zero. But the capability change is enormous. I went from renting infrastructure and rationing AI to owning infrastructure and having unlimited AI.

“But what about uptime?”

This is the question. It’s a fair one.

I’m running production services off a consumer machine in my house. If the power goes out or my internet drops, everything goes down. That’s real.

Here’s how I deal with it:

Power: Four-layer resilience stack.

LayerEquipmentRuntime
1APC UPS (1350VA)2+ hours at 24W load
2EcoFlow DELTA 2 (1024Wh)~42 hours
3Ryobi 40V batteries + inverterPortable backup
4Predator 3500 gas generatorIndefinite

The UPS kicks in instantly. If power stays out more than two hours, I plug vault into the battery generator. If it’s a real disaster, I fire up the gas generator. Vault draws so little power that it’s almost trivial to keep running.

The UPS monitors itself via USB. If the battery gets critically low and I’m not home, it triggers a graceful shutdown — stops all Docker containers cleanly before powering off. When power returns, systemd brings everything back up automatically.

Internet: Cloudflare Tunnel reconnects automatically. Tailscale reconnects automatically. If my ISP goes down, the sites go down. But they come back without intervention.

Monitoring: This is where it gets fun. I built a two-bird monitoring system — Quail and Kite.

Quail lives on vault itself. Ground level. It runs health checks every six hours — containers, disk space, backups, website availability — and reports to me via Telegram. If something goes wrong at 2 AM, Quail sends an alert. It’s AI-powered, so it doesn’t just say “disk full” — it tells me what’s filling the disk and what to do about it.

But here’s the problem with a monitoring bot that lives on the same machine it’s monitoring: if vault goes down, Quail goes down with it. That’s where Kite comes in.

Kite will live on an external VPS — high altitude, looking down. Its job is to monitor vault from the outside. If genxitcode.com stops responding, if the Cloudflare Tunnel drops, if SSL certs are about to expire — Kite sees it and alerts independently. Quail can’t tell me vault is dead if vault is dead. Kite can.

Quail is live now. Kite is coming soon. One on the ground, one in the air. Between the two of them, I’ll have better observability than most teams running on AWS.

Is it five nines? No. But neither is any cloud provider at the price I was paying. And when something does go wrong, I can SSH into my own server and fix it — instead of filing a support ticket and waiting.

Why this matters

This isn’t a tutorial on how to set up a homelab. There are plenty of those.

This is about what happens when you stop assuming you need to rent everything. When you actually look at your workload and realize that a twelve-year-old machine you already own can handle it. When you take the money you were sending to three different cloud providers every month and redirect it toward the tool that actually makes you more productive.

It’s the Gen X approach to infrastructure: don’t believe the hype until you’ve tested it yourself. The cloud is great — until you realize you’re paying a premium for convenience you don’t need. I’ve been managing servers for 28 years. I don’t need someone else to do it for me.

What’s next

The vault stack is stable and boring now, which is exactly what infrastructure should be. The interesting work is what runs on top of it:

  • Getting Kite airborne — external monitoring from a VPS, completing the two-bird system
  • More automation workflows for client projects
  • This blog, served from that same quiet little box in my house

Everything you just read was served to you by a machine that was designed to run iPhoto and iTunes. It’s running my business instead.

Exit code: 0.