Skip to content

feat(app): show a QR code of this host's tailnet address in Settings → Host - #562

Merged
iamnbutler merged 3 commits into
mainfrom
phone-qr
Oct 22, 2026
Merged

iamnbutler merged 3 commits into
mainfrom
phone-qr

Conversation

@iamnbutler

Copy link
Copy Markdown
Contributor

Settings → Host gets a Phone section with a QR code of this host's HTTPS address on the tailnet (https://<machine>.ts.net:<port + 1000>). It also shows the address as text with a copy button. A phone on the tailnet scans the code and opens Ace. Related to g12 in the onboarding review and #182; it closes neither.

  • The host records the address only once the HTTPS listener has started. Diagnostics reports it as web.
  • The section shows only when Tailscale is running and the host isn't loopback.
  • Without a tailnet certificate, it says to turn on HTTPS in the Tailscale admin console and restart Ace Helper.
  • The code is always dark on a white quiet zone, in both themes, because phone cameras often fail on inverted codes.

New dependency: uqr 0.1.3, from unjs, MIT. It has no dependencies of its own. It's added through the ui catalog and used only for encode(); the SVG is drawn in React. A QR encoder needs Reed-Solomon error correction, version selection and masking, which isn't worth hand-rolling, and nothing in the tree already did it.

Smoke-tested:

  • A source host on port 4431 with its own ACE_HOME, joined to the real tailnet, served https://natembp.tail93a054.ts.net:5431, and that address returned 200.
  • Settings → Host, opened in headless Chrome, showed the section in both themes.
  • jsQR, run from a temporary directory outside the repo, decoded the screenshot to exactly that URL.

Built in Ace

No. Claude Code built this outside Ace while the user was away. Ace can't yet run an unattended polish pass across several lanes. Tracked under #5.

…→ Host

Why: apps/host/src/web.ts#let address | set only after the HTTPS listener starts, so the phone row never offers an address that isn't served
@iamnbutler
iamnbutler merged commit 20de297 into main Oct 22, 2026
1 check passed
@iamnbutler
iamnbutler deleted the phone-qr branch October 22, 2026 00:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant