On this page
Namecheap went down today. DNS, email, hosting — even parts of their support system. My infrastructure didn’t notice, because two weeks ago I moved almost everything off of it.
The trigger was a $119 renewal invoice. Instead of paying it by default like I had every year, I spent a weekend asking what I was actually paying for. The answer, it turned out, was habit. This post is the complete architecture I ended up with instead — including the free-tier ceilings, how deploys work, the backup strategy, and the things I still refuse to self-host.
The short version: everything now runs on Cloudflare’s free tiers and two i7 laptops that were sitting idle at my office.
The hardware nobody was using
Every office has them: decent machines that got replaced, not retired. Mine were two i7 laptops — perfectly capable computers whose only crime was not being new.
A laptop is a surprisingly good server. It has a built-in UPS (the battery), it’s silent, it idles at a fraction of what a desktop draws, and the ones I had cost exactly nothing. I wrote about the mechanics of turning one into a production host — power recovery, battery health, residential ISPs — in a separate post. This one is about the whole stack around them.
The two boxes have distinct jobs, and the split is deliberate:
- Laptop 1 runs Coolify itself — the control plane. Nothing user-facing lives here.
- Laptop 2 runs everything else: every containerized Node and Python service, and the trading bots. Coolify manages it as a remote server over the tailnet.
That separation means my infrastructure is decoupled from my services. If the Coolify box goes down, nothing stops — the containers on laptop 2 don’t need their manager to keep running; I just can’t deploy until it’s back. And if a runaway workload eats laptop 2, the deploy tooling is untouched and redeploying elsewhere is a dashboard action, not a rebuild.
The routing decision: edge first, laptop second
Every workload gets asked one question: can it live at the edge?
If yes, it goes to Cloudflare and I never think about it again — no container, no server, no backup, nothing running on my hardware. Only when the answer is no does it earn a spot on a laptop. In practice:
Static sites → Cloudflare Pages. This site, landing pages, docs. git push, Cloudflare builds it, done. Free plan gives 500 builds a month and unmetered bandwidth, which is more than I will ever use.
APIs and dynamic sites → Cloudflare Workers. Anything request-shaped that finishes fast. The free tier’s 100,000 requests/day sounds limiting until you do the math on what a portfolio of side projects actually receives.
Long-running Node and Python services → Coolify, deployed onto laptop 2. The stuff serverless is bad at: background workers, queue consumers, anything holding a connection open or keeping state in memory. Coolify gives me the one part of a PaaS worth having — push to a branch, it builds and deploys the container — without the pricing model. Docker does the heavy lifting underneath.
Trading bots → laptop 2, alongside the services. Bots are the clearest possible case against serverless: they hold persistent websocket connections to exchanges, keep order state in memory, and run 24/7. Paying per-second serverless pricing for a process that never sleeps is the worst deal in cloud computing. On my own hardware, a bot that runs all month costs the same as a bot that runs an hour.
The supporting cast
DNS — Cloudflare. Free, fast, and the API means every DNS record I have is scriptable.
Inbound email — Cloudflare Email Routing. Free forwarding from my domains to wherever I actually read mail — and, less obviously, into a Worker running a full self-hosted email client. Email was the single biggest pain point of leaving Namecheap, and it got its own post.
Transactional email — Resend. Sending is the one email job I would never self-host — deliverability from a residential IP is a fight you lose before it starts. Resend’s free tier covers 3,000 emails a month, which comfortably absorbs password resets and notifications across every project I run.
Postgres — Neon. Serverless Postgres with branching. For prototypes, branching is the killer feature: every experiment gets a copy-on-write branch of the real database, and deleting it costs nothing. The free tier is around half a gigabyte of storage with compute that suspends when idle — small, but side-project databases are small. Anything that outgrows it has, by definition, proven it deserves a paid plan.
Object storage — Cloudflare R2. S3-compatible, 10 GB free, and the actual reason to use it: zero egress fees. Egress pricing is how object storage bills sneak up on you; R2 removes the category.
Public ingress — Cloudflare Tunnel. The laptops make an outbound connection to Cloudflare, and public traffic rides back down it. No port forwarding, no static IP, no home IP exposed anywhere, TLS terminated at the edge. This one piece is what makes office-laptop hosting viable at all.
Private access — Tailscale. SSH, the Coolify dashboard, database ports, the bots’ admin panels — none of it is on the public internet. It’s all on the tailnet, reachable only from my devices. Public traffic enters through Cloudflare, admin traffic through Tailscale, and the laptops’ firewalls drop everything else.
TLS — nobody’s job. Cloudflare handles certificates at the edge, Coolify handles them for anything that needs its own. I have not run a certbot command in two years.
CI/CD — also mostly nobody’s job. Pages and Workers build on push through Cloudflare’s own pipeline. Coolify listens for webhooks from the repos and rebuilds containers on push. There is no separate CI runner, no YAML choreography, no build-minute quota to think about.
Where the free-tier ceilings actually are
The numbers that matter, as of writing:
| Service | Free ceiling | Will I hit it? |
|---|---|---|
| Workers | 100k requests/day, 10ms CPU each | Not close |
| Pages | 500 builds/month | Busiest month: ~60 |
| R2 | 10 GB storage, zero egress | Backups keep me under it |
| Neon | ~0.5 GB per project, autosuspend | Only on one project |
| Resend | 3,000 emails/month | Not close |
| Tailscale | 100 devices | I have 9 |
| Tunnel, DNS, Email Routing | Free at any scale I’ll reach | — |
The pattern: the ceilings are set for “small startup,” and a solo developer’s entire portfolio fits under them with room to spare. The one I watch is Neon’s storage; the day a project crosses it is the day that project graduates to a paid tier — which is exactly how it should work.
Backups: the part that isn’t optional
The laptops are single points of failure for any state living on them, so the rule is that no data exists in only one place:
- Docker volumes on laptop 2 back up nightly with restic to an R2 bucket, on a systemd timer. Restic deduplicates, so nightly snapshots of mostly-unchanged volumes cost megabytes, not gigabytes.
- Coolify’s own configuration on laptop 1 is backed up too. Losing the control plane should cost me a restore, not an afternoon of reconnecting repos and re-entering environment variables.
- Databases are Neon’s problem, not mine — that’s half the reason they’re there and not in a Postgres container. Point-in-time restore beats anything I’d build myself.
- The restore path is tested. I’ve done a full restore end to end. A backup you’ve never restored is a hope, not a backup.
The honest caveats
I’ve concentrated heavily on Cloudflare. DNS, ingress, static hosting, edge compute, storage, and inbound email all go through one company. When Cloudflare has a bad day — and they’ve had them — I have a very bad day. I’ve accepted that trade consciously: one excellent dependency over five mediocre ones. But it’s a trade, not a free lunch.
This setup is not more reliable because it’s cheaper. It’s appropriate for my prototypes, my bots, my own apps. Anything genuinely business-critical for a client goes on proper redundant infrastructure, with an invoice to match. Cheap infrastructure doesn’t mean careless infrastructure — but it also doesn’t mean careless about which workloads it carries.
The list of things I won’t self-host is firm: client production systems, payments, anything with compliance obligations, outbound email, and anything whose data loss would be unrecoverable. Those aren’t cost decisions.
Why now — the research tax collapsed
Here’s the part I find most interesting. None of these tools are new. What changed is what assembling them costs.
A few years ago, this weekend project would have been a month of evenings: reverse-proxy configs, certificate renewals, tunnel debugging, reading four documentation sites to connect two services. I know how these systems work — the time went to syntax, edge cases, and stale Stack Overflow answers. That’s a research tax, and AI tooling has collapsed it. Every config in this stack was a short conversation instead of an afternoon of docs.
That’s the real story behind the $0. The subscription I almost renewed wasn’t buying me infrastructure — it was buying me not having to do the research. Once the research got cheap, the subscription had nothing left to sell.
Namecheap will come back up. My renewal reminder won’t.