Stoatworks Labs

bdts

Tailscale, signed in from the decoder's own web UI

In developmentFirmwareGo
bdts — Tailscale, signed in from the decoder's own web UI
No screenshot yet — the panel only exists on a patched decoder, and the page around it is BirdDog's, not ours.

What it does

A BirdDog PLAY has no way in from outside the room it is sitting in. The PLAY Patcher fixes that by building a firmware package that installs Tailscale — but it cannot put an auth key in the package, because the package is a file a web page hands you and the key would be readable in it. So every unit came up with Tailscale installed and not signed in, and the only way to finish the job was SSH.

bdts closes that loop. It patches the decoder's own web UI to add a Tailscale panel to the System page: sign in, see the tailnet name and address, change the preferences that this hardware can actually honour, and log out. Nothing else about the unit changes — it is still a BirdDog decoder with BirdDog's interface, one section longer.

The System page is also the page carrying the firmware upload form, which is the way back if anything goes wrong, so the patch is unusually careful with it: it refuses markup it does not recognise, keeps a copy of the original, writes atomically, and inserts a block with no template logic in it at all. The installer checks the web UI came back afterwards and rolls back if it did not.

  • A Tailscale panel on birdUI's own System page — sign in, sign out, and read the tailnet address
  • Interactive login started in the background and its URL read back, so the page never hangs waiting for a human
  • Preferences applied one at a time, so setting one does not reset the others
  • Route advertising and acting as an exit node withheld rather than shown broken — this kernel has no TUN device. Using someone else's exit node still works, and the picker is there
  • Writes gated on a birdUI session, checked against the device rather than assumed
  • Exactly reversible: the stock page is kept and restored byte for byte

Where it stands

Installed and running on a real PLAY on firmware 1.0.30 — the patch applies, the web UI reloads, the firmware upload form survives, and the panel reports correctly off the device's own Tailscale. Two things are still unproven and it shipped anyway: whether the browser sends its birdUI session cookie to the panel's port, which needs a login this machine has no password for, and the interactive sign-in flow, because testing it would log out the very node the device is reached over. There is no tagged release yet.