← all posts
// local · homelab

The inference box in my closet: a year later

In June last year I bought a used RTX 3090 from a seller in Ostrava, paid a shade over 14,000 crowns, and built it into the quietest machine I could manage. It's been serving models from the hallway closet for a year and a few weeks. Time to be honest about how that went.

what I built and what it cost

  • used RTX 3090, 24 GB (about 14,500 crowns once you count the trip to go test it)
  • Ryzen 5700X on a B550 board with 64 GB of DDR4, the decision I regret most
  • 2 TB NVMe for the model zoo, a small SSD for the OS
  • an 850 W PSU and a compact mATX case that technically fits the card

All in, somewhere around 31,000 crowns. A used 3090 is still the default answer for home inference hardware; nothing newer comes close on VRAM per crown. The plug meter was the second thing I bought: 46 W idle at the wall, roughly 220 crowns a month on my tariff just for existing. Under load it pulls 380 to 420 W, but load is minutes per hour, so the idle number is the one the bill feels.

what it actually serves

Ollama sits at the center with three residents: a pinned embedder, a small chat model, and a 32B coder the other two make room for. My wife drafts client emails through Open WebUI in Czech and English and is now the box's heaviest daytime user. My agents get it at night: triage runs, log summarization, the odd overnight refactor. Embeddings for code search across every project I touch. Whisper transcribes meetings on Sunday evenings. It started as my toy and turned into a small team server where the team happens to be a household.

That shift changed the job. A toy can be down for a week; a thing your family uses cannot.

uptime, honestly

By my log it was down for parts of eleven days this year, and the cause was mostly me. An Ollama upgrade at 11pm that broke a Modelfile I'd hand-tuned and forgotten about. The late-June heatwave this year, when the closet hit 34°C and the GPU started thermal-tripping until I propped the door open with a chair. A power blip in month nine finally shamed me into buying the UPS I'd deferred twice. And one crash in November I never explained, which bothers me more than all the others combined.

The chair is still there.

A year of running your own inference teaches you the hard part is ownership, not inference.

noise, heat, and the family SLA

I tuned the fan curve twice and it still lost. Under sustained load you can hear the box through the closet door after midnight, which triggered a household negotiation: overnight agent runs now get a capped fan profile and slightly slower tokens, and everyone sleeps. The family SLA runs the other way too. When the box is down, my wife notices before my monitoring does. Logging every request at least settled the recurring dispute over whether it was slow that day. It usually was, and it was usually heat.

the two regrets

The case. I picked a compact mATX case because the closet shelf is shallow, and the 3090 exhausts into its own face. Two rounds of fan swaps improved it without fixing it; summer throughput sits maybe 8% below winter. A self-inflicted, season-shaped tax.

The RAM. 64 GB felt generous in 2025 and wasn't. Between the model cache, a vector database, Whisper, and my habit of CPU-offloading models that don't fit in 24 GB just to see how they behave, I hit swap about once a month. Doubling it would have been a couple thousand crowns at build time, and I said no out of some misplaced discipline. The cheapest yes I ever refused.

would I build it again

Yes, and differently: a full tower, 128 GB of RAM, the UPS on day one instead of month nine. On raw token arithmetic the box does not crush cloud APIs at my volume. My API spend dropped by something like half, not to zero, and long agentic work still goes to the frontier, because that's where it belongs.

What kept it alive is everything that arithmetic misses. Family usage is flat-rate, so nobody meters their curiosity: my wife would never paste a client email into a metered API, and here she never thinks about it. Privacy is the default, not a setting. And owning the whole path taught me quantization, KV cache growth, thermals, and scheduling at a depth API calls never would, which has paid for itself in client work at least twice this year.

The honest limitation stays: 24 GB is a ceiling, the models I most want to run in mid-2026 don't fit under it, and no case swap fixes that. The box does bounded work brilliantly and long-horizon work not at all.

The closet hums on, and the parts list for version two keeps growing.

#homelab#hardware#local