Friday, September 11, 2026

From a Broken Laptop to a Server

I live on a very small Caribbean island, so there isn't much of a market for used technology. Most of my opportunities come from Facebook Marketplace, and because the population is small, good deals don't show up very often.

So when I saw someone selling two relatively new HP laptops with broken screens, I stopped to look.

It was a little strange. Screens don't usually just break from normal wear and tear, and I had no idea what had happened to them. My best guess: someone kept stacking heavy things on top of them. But honestly, that didn't matter much to me.

Broken HP laptop screen, shattered display pattern

They were relatively new models — an HP G8 and an HP G9, one with an Intel processor and the other with AMD. I started doing the math in my head.

Maybe $50 for a laptop. Another $50 for a replacement screen. I could do the repair myself, and I'd have a perfectly useful laptop for using in bed at night without having to turn on my main computer.

I offered $100 for both. We eventually settled on just one.

Then I checked the specifications more carefully. The screen resolution was pretty basic, and once I couldn't find the replacement screen I wanted — at the resolution I actually cared about — I started thinking about it differently. I didn't actually need another laptop collecting dust.

What I needed was another server.

So instead of replacing the screen, I turned it into a headless machine.

Broken laptop connected to external monitor during setup

Why move multimedia off my main machine in the first place

Running a home server has given me a lot of freedom, and I've learned a huge amount along the way. But one thing became obvious pretty quickly: different services need different things, and lumping everything onto one machine isn't always the smart move.

My multimedia services — music and video streaming — were originally running on my main desktop, IMPERFECT. It made sense at first: powerful CPU, plenty of RAM, no problem handling the load. But that was exactly the issue. I was keeping a full desktop running around the clock just so a movie or a song would be available if someone wanted one. Power consumption aside, it was also just annoying — if I wanted to watch something, I had to go turn the computer on first.

That's backwards. A media server should be the thing that's always on, quietly waiting. The desktop should be the thing I turn on when I actually need to do something with it, not the thing I have to boot just to press play.

So the broken laptop solved two problems at once: it gave the multimedia stack a dedicated, low-power home, and it freed my main desktop from having to stay on 24/7 for services that don't need that kind of horsepower anyway.

The technical rundown, for anyone who wants it

If you're the type who wants the actual stack instead of just the story, here's what's running — and it's more than I expected to end up with when I started:

  • OS: Ubuntu Server 26.04 LTS, no desktop environment — just Docker and whatever it takes to keep the containers alive
  • Storage: the original NVMe drive, upgraded for more local headroom, plus network mounts to my NAS for anything that outgrows local disk

Services, all in a single Docker Compose stack:

Navidrome for music. Migrating it turned up its own small lesson — I went looking for the old instance's data, ready to carefully back up playlists and listening history before the move. The data volume turned out to be completely empty. Whatever I thought was being saved there, never actually was. Nothing to migrate, so I just started fresh.

Ubuntu Server terminal session during headless setup

Jellyfin for movies and series, split across two sources by design. Anything new — freshly downloaded, not yet watched, still "hot" — lands on the laptop's local disk first, in its own folder that Jellyfin treats as its own library. That's deliberate: local disk is fast, and I don't want new content depending on network speed or NAS availability the first time someone wants to watch it.

Once something has been watched and isn't "new" anymore, it gets moved manually over to the NAS — which is where the bulk of the actual library lives, mounted read-only inside the container. I haven't automated that move yet. I want to actually live with the manual process for a while first and see what "not new anymore" really means in practice before I write a script that decides that for me. The plan, eventually, is something that sweeps the local folder on a schedule and relocates anything older than some threshold — but I'd rather get the threshold right by observing real usage than guess at it upfront.

Either way, from Jellyfin's side, both sources just show up as one unified library. Nobody browsing has to know or care where a given movie physically lives.

qBittorrent, no VPN in front of it. That's a cost I'm not covering right now, and I'd rather say that plainly than pretend otherwise.

FileBrowser, so moving files between local storage and the NAS doesn't mean SSHing in every time just to drag one folder into another.

  • Networking: this laptop has no physical Ethernet port at all, so everything runs over WiFi. That meant setting a static IP directly on the wireless interface — and separately reserving a static IP for a USB-Ethernet adapter I sometimes plug in for maintenance, so the two never fight over the same address if I ever use both at once. Local DNS entries point clean hostnames at all of it, and it's wired into the same family dashboard as the rest of the homelab.
  • Power: no battery — I pulled it out and genuinely don't remember where it ended up. Lid-close behavior is disabled at the systemd level, since Ubuntu's default is to suspend the machine the moment the lid shuts, which is exactly backwards for something meant to run 24/7 with the lid closed for good.
  • Monitoring: wired into my existing Uptime Kuma dashboard. If any of the four services drops, I know before anyone in the house notices the music stopped.

One thing still unresolved: Wake-on-LAN. I can't confirm whether it's even enabled in the BIOS, because — you guessed it — the screen is broken, and by the time I thought to check, the lid was already shut in its final resting spot under one of my access points. For now, it just stays on. Given how little power this thing actually draws, that's a trade I'm fine making.

And because apparently I couldn't just put it on a shelf like a normal person

I tucked it underneath one of my access points and left it there, plugged in and quietly doing its job.

Laptop tucked under a WiFi access point on a shelf

I don't even remember where I put the battery.

And that's fine.

The original idea was to find a cheap laptop for myself. What I ended up with was a little server that I didn't have to buy separately.

That's one of the things I like about this whole homelab experiment: it's constantly forcing me to reconsider what something is worth.

A broken screen doesn't necessarily mean a broken computer. An old laptop doesn't necessarily need to become someone's next laptop. Sometimes the useful part of a piece of hardware is the part you weren't originally looking at.

My kids get laptops from school that I don't necessarily need. My wife isn't particularly interested in using a laptop. And I'm not going to buy technology just because I can.

But when something comes along that I can repurpose, I don't want to automatically dismiss it just because it isn't useful in the way it was originally designed.

0 comments:

Post a Comment