From 72c7f45e198c802cf66a79ba0c5b2901ab79e803 Mon Sep 17 00:00:00 2001 From: Mitchell-Johnson Date: Thu, 24 Sep 2026 12:37:25 -0700 Subject: [PATCH] =?UTF-8?q?PLAN:=20to=20do=20=E2=80=94=20a=20KVM=20tab,=20?= =?UTF-8?q?the=20keyboard-video-mouse=20kind?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5 --- PLAN.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/PLAN.md b/PLAN.md index b94ddbb..2f5372a 100644 --- a/PLAN.md +++ b/PLAN.md @@ -553,6 +553,32 @@ something long in one, switch away and back, refresh — it's all still there. item names the heavier pieces (multi-select and bulk actions, folder download, resumable uploads, a gallery, search) — worth doing the two together, since they are the same tab. +- **A KVM tab** — asked for 2026-09-24, not started. A tab that shows a **custom IP-KVM's + own web page** inside Ham Lab, so the machine's screen, keyboard and mouse are one click + away. **This is KVM the keyboard-video-mouse switch, not KVM the hypervisor** — the + Virtualization item above means the other one, and the two must not be confused when + either is built. No such device exists in the lab yet, so this starts with the hardware + (PiKVM, JetKVM, TinyPilot, or the home-built one Mitchell has in mind). + - **Where the entry lives is the design decision.** A KVM earns its keep exactly when the + machine is *down* — no OS, a bad kernel, a BIOS screen — which is when that host's Ham + Lab cannot answer. So the tab has to be **hub-side**, a list the hub holds, and it must + work for machines that run no Ham Lab at all. Configuring it as a `kvm_url` inside each + node's own `config.json` would fail in precisely the case it is for. + - **Framing is the first thing to test, before any UI is written.** Most IP-KVMs send + `X-Frame-Options: DENY` or `frame-ancestors 'none'` and simply refuse to be embedded — + Ham Lab sends both itself, on its own pages. A device whose nginx can be edited (PiKVM) + or that is home-built can be told to allow it; one that cannot will show a blank box, + and then the honest answer is a link that opens it in a tab rather than a fake embed. + - **Mixed content and certificates.** Ham Lab is served over HTTPS through NPM. A KVM on + plain HTTP will be blocked by the browser outright, and one with a self-signed + certificate fails silently inside an iframe. Either give it a proper cert and an NPM + host, or proxy it through the daemon — which already reverse-proxies nodes and carries + WebSockets (`proxyNode`), and a KVM's video and input streams are exactly that. Proxying + also solves the separate login, since the credential could be held once on the hub. + - Worth settling too: whether the tab is per machine (a machine's KVM shown on its page) + or one page listing every KVM; and whether a machine with no Ham Lab at all deserves a + first-class entry on the Machines page, which today only knows hosts that answer. + ## Open questions - Idle-session reaping policy (never / after N days) — leaning never; it's a