I teased this machine in Post 1. A Lenovo laptop, repurposed as a headless remote access node. That description is accurate and also completely undersells how many different things this machine has been before landing there.

This is the full story.

The laptop made sense on paper. I needed something for light work, Chrome, a bit of code, nothing heavy, no compiling. I had a budget and three options. The Lenovo won because of one thing the others didn't have: a 1080p touchscreen with high nits, good for outdoor use. Practical. Sensible. Bought it, used it, liked it.

Six months later, the hinges broke.

If you've owned a cheap Lenovo or HP, you know exactly what I'm talking about. It's not a matter of if. It's when. The hinge didn't just crack the plastic housing. It cracked the actual display panel. So now I had two problems: broken hinge attachment point and a cracked screen. Replacing the display made sense until I thought about also replacing the housing the hinges destroyed. At that price, I'd basically be rebuilding the whole top half of the laptop. For that money I could just buy a different laptop.

So it went into storage. Lid destroyed, screen cracked, just sitting there.


A few months later I had an idea.

USB-to-ethernet adapter. HDMI dummy plug. Ubuntu Server. If the screen is useless, fine. Remove it from the equation entirely. The machine still had a working CPU, 12GB of RAM, and a functioning battery. That last part turned out to matter more than I expected.

I started using it as an automation and backup hub: n8n, Node-RED, custom scripts pushing backups to safe places. Useful, but not remarkable.


Then I started thinking about power outages.

My area had brownouts and outages regularly at the time. My UPS units kept the main servers and network gear alive for maybe 20 minutes. Fine for short dips, not great for anything longer. But this laptop had a built-in battery. It didn't need a UPS. It was a UPS. So I asked the obvious question: what's the most valuable thing I could run on a machine that stays online when everything else goes dark?

Home Assistant.

I stopped the Home Assistant container on tonycorev1 (the predecessor to tonycorev2, that story is its own post), loaded HAOS directly onto the Lenovo, migrated what I wanted, cleaned out what I didn't. The machine didn't even have a name at this point. We were just calling it the Home Assistant machine.

It worked perfectly. Until the first real power outage.

Not because HAOS failed. It didn't. The laptop stayed online, automations ran, zigbee sensors kept reporting. The problem was internet. My Meraki gear ran off the main UPS bank. When that depleted after 20 minutes, the switch went down. Laptop still had power. No network to talk to.

So I fixed it the logical way: added a second USB-to-ethernet adapter, plugged it straight into the ISP modem, and put the ISP modem on its own dedicated UPS, a bigger one, sized to run for hours. The laptop charger went on a protected outlet too.

Now the setup looked like this: main UPS powers servers and Meraki gear for ~20 minutes. When that depletes, Meraki goes down. But the laptop detects the Meraki cable is dead, switches to the ISP modem directly, and stays online. Meanwhile, our phones and laptops connect to a secondary WiFi SSID that bridges through the ISP modem. Windows and macOS do that automatically when the primary SSID disappears.

The result: during a multi-hour power outage, the house stayed secure. Zigbee sensors kept working. Automations still fired. When the UPS batteries recharged enough, the machine that would eventually be called JARVIS sent Wake-on-LAN packets to bring the servers back up, then sent a notification to my phone confirming everything was back.

It was genuinely one of the cleanest setups I've ever built. Janky on the outside, solid on the inside.


Eventually I made a compromise.

I moved Home Assistant, NUT, and the failover ethernet back to tonycore (still v1 at the time, and yes, there's a whole post about why it's now called v2, and yes, it was entirely my fault). More services, more power draw, yes. But one less machine to maintain. tonycore inherited the failover setup and the automations, and they still run that way today. The Lenovo got reassigned.


This is where it got its name.

I wanted to try local LLMs. This was a couple of years ago, before the current wave of actually-usable small models. The Lenovo had 12GB of RAM and no GPU, but I figured it was worth experimenting. Named it JARVIS because it felt appropriate for a machine I was about to ask to be my AI assistant.

It was not ready for that responsibility.

Local LLMs at that time, on that hardware, were genuinely bad. Slow, incoherent, not useful for anything I was throwing at them. JARVIS sat idle for months with Ubuntu Server, a barely-used LLM interface, and nothing else. I eventually turned it off entirely and forgot about it. By then I was paying for ChatGPT and the API, and JARVIS had nothing left to justify its existence.


Then I needed Windows.

Some apps don't run on Linux. Wine handles some of them. Others just need actual Windows. I booted JARVIS back up, installed Windows 11 Home (in Spanish, because that's what the license was), installed Tailscale, installed TightVNC, and called it done.

No display. Headless from day one on Windows. The HDMI dummy plug tricks it into thinking a monitor is connected so remote desktop doesn't complain. Tailscale handles access from anywhere. VNC handles the actual session.


That's JARVIS today. A broken-hinge Lenovo with a cracked screen that nobody ever sees, running Windows 11 headless, sitting idle unless I need a Windows-only app or there's no good Linux alternative. It contributes maybe a few hours a month. It has had more identities than most machines ever get.

And yet, it's still there. Still plugged in. Still on the network.

That's kind of the theme of this whole homelab, honestly.