Remote access in a box.

A church, a family's house, a small office with a printer nobody can fix on the phone. The usual answer is a VPN, which means a hole in the firewall, an account on every machine, and a subscription someone forgets to cancel. This is a small box, about the size of a deck of cards, that plugs into the network with two cables. Within minutes it is on a private network the client owns, every device on their LAN is on a status page, and named people can be granted specific devices from anywhere. Nothing is installed on their computers and nothing changes on their router.

My own product · 2026 · Raspberry Pi 5 · Tailscale · Uptime Kuma · in build, pilot site next · ← all work

The problem

Small sites have the same tickets as big ones and no one on staff to take them. The person who can fix things lives somewhere else. Every remote-access tool wants a port opened, software on each machine, or a monthly bill per seat, and the first time the router gets replaced it all stops working. Meanwhile nobody knows the printer went down until Sunday morning.

What I built

A Raspberry Pi flashed from a five-command runbook. Plugged in, it works out which network it is on, joins the client's private network, and announces that LAN as a route that is approved automatically. Then it scans the LAN, puts a row for every device on a status page, and buzzes a phone: new network, this many devices. From then on the box watches the site and the people the client names can reach the devices they are granted.

What changed

Card to reachable in under three minutes, measured. Plug-and-play discovery proven on four different networks. A full first visit rehearsed end to end on my own LAN before any client saw it, and two boxes built: one for a church pilot, one for my former employer. The whole kit is under a hundred dollars of hardware. It started as a Twingate box I shipped to relatives, and the Tailscale version replaced it for client sites.

What sits where

The box is the only new thing on the client's network. It dials out to the private network, which is how a phone or a laptop anywhere reaches the site without a single port being opened. A grant is one line in an admin console the client controls; remove the line and the access is gone.

THE SITE'S OWN NETWORK · untouched Their router no port forwarded Front desk Windows · RDP Printer web UI Camera ONVIF A Mac Screen Sharing NAS SSH piGate · a Raspberry Pi 5 · two cables joins the private network by itself announces this LAN as a route, approved on arrival pings every device, one row each on a status page keeps watching when the site's internet drops it asks devices if they're there; it never looks inside one dials out The private network Tailscale · owned by the client encrypted, device to device works behind any router, no port forwarding, ever a grant = one line in the console tied to a named person, logged, revoked in one click ANYWHERE A phone the status page: green and red dots a push the moment something drops A laptop, granted one device screen-share a Mac · RDP a PC the printer's own admin page never on their Wi-Fi Who holds the keys the network belongs to the client's own account; I am an invited admin the box is tagged as the network's, not a person's, so it outlives staff changes key expiry off, auto-updates on, a watchdog reboots a hang, logs live in RAM a sealed envelope with the admin login stays in the office nothing installed on their machines · nothing changed on their router · no hole in the firewall

Left: the site, exactly as it was, plus one box. Middle: a private network the client owns. Right: the people the client names, wherever they are.

What the box will and won't do

The first visit

The runbook is written for one visit, and it was rehearsed on my own network before any client saw it. Most of the time goes to naming things and to the one-time touch each managed machine needs.

0:00 Plug in power + Ethernet, on the router or core switch, never a Wi-Fi extender ≈ 3 min On the network shows up on the phone's Tailscale list; this LAN's route approved by itself 5–15 min Everything found a row per device on the status page; the phone buzzes: "new network, 28 devices" Name the rows from the phone, with the person who knows: "host .77" becomes "front desk printer" One touch each a Mac's Screen Sharing on, a PC's Remote Desktop on, a reservation on the router Verify, then leave each device from the phone on cellular, Wi-Fi off; the envelope stays after that, everything is remote: the box is watched, the devices are reachable by the people named, and a dead card is "swap it and plug back in" what still needs a body on site: anything before the machine boots, a dead disk, a paper jam, and Sunday morning at 9:55

Green dots are the box working by itself. Purple dots are the visit's real work: names, one-time touches, and proof from outside the building.

How it gets built

Every box is flashed from the same recipe. A small script writes the first-boot configuration, the OS image goes onto the card, two files are dropped on it, and the card goes in the Pi. The first boot creates the user, installs the private-network client and the monitoring container, turns on the hardware watchdog, moves logs into RAM so the card lasts, sets updates to apply themselves with an early-morning reboot, and joins the network with a key that was prepared in the client's admin console before the flash. Moving the box to a different network re-announces the new one; there is nothing to reconfigure. The private-network key is scrubbed off the card after the first login.

The first version of this, for family networks, ran a different connector and needed a one-gigabyte Pi at minimum. The current fleet runs on the cheapest Pi 5, because the private-network client idles in a few dozen megabytes, and the monitoring is the heavier tenant.

Where it stands

In build, with the plumbing proven and the product still being shaped. Two boxes exist: one rehearsed the full first visit on my own network and now also serves a couple of small sites of mine, the other is built for a church pilot and waiting on the visit. After the pilot: a retainer for my former employer's office, then a paid version with a flat price per site. The next feature is self-healing, the box power-cycling a wedged router or access point through a smart plug and only paging a human when that didn't work, which is the same pattern that already keeps my homelab up. Client-branded status pages are queued behind it.

The name is piGate. The site names in the drawings are made up, and no client is named on this page.

Stack

Raspberry Pi 5 Raspberry Pi OS Lite · cloud-init Tailscale (subnet router, tags, auto-approve) Uptime Kuma (Docker) ntfy push nmap · arp-scan · mDNS Caddy (optional named status page) Python (flash + seed tooling)

All open, established tools. Nothing here depends on me staying involved, which is the first thing a client should ask.

Built in conversation

Same method as everything on this site. The route-approval trick, the discovery service, the first-visit runbook, and the list of gotchas that bite six months later (key expiry, card death, the wrong network profile on Windows) all came out of dialogue with Claude, then were proven on real hardware one flash at a time.

The philosophy, the homelab it grew out of, or what I'm building right now.