Skip to content

feat: a clearer Device tab, with the enrol words kept on screen - #147

Merged
TheCryptoDonkey merged 4 commits into
mainfrom
design/devices-tab
Sep 26, 2026
Merged

TheCryptoDonkey merged 4 commits into
mainfrom
design/devices-tab

Conversation

@TheCryptoDonkey

Copy link
Copy Markdown
Member

A design review of the Device tab, from screenshots of every signer state on desktop, phone and tablet, then the build.

Phone enrolment

  • The five words stay on screen while the signer shows ADD PHONE. Before, Sapwood hid them at exactly that point.
  • Words no longer break mid-word on a phone. They are numbered and grouped in the board's pairs.
  • "Continue" is now "Send to the signer". The copy says the signer's button only works once all five words have shown, matching the firmware.
  • The done step compares the check code across all three screens and adds "Codes don't match: revoke", which reuses the existing revoke.
  • Each step change is announced to screen readers and moves focus.

The tab

  • A "Needs attention" block appears only when something needs a decision. Below it is one grouped list whose rows carry their own state, instead of summary rows repeated by sections.
  • Encryption, the vault key and the boot PIN sit together under "After a power cut". The bridge secret moves to Network.
  • A locked signer and an unknown firmware version no longer show green.
  • On phones, buttons are 44px and long states wrap under their title.

Firmware version check

  • Pre-release ordering now follows SemVer, so a board on beta.17 is offered beta.19 instead of being told it is up to date.
  • Build metadata is ignored.

Handlers and device calls are unchanged. The boot PIN, no-encryption and vault escrow warnings each stay directly above their action.

Checks: vitest 1131/1131, svelte-check clean, check:cli clean, build OK, chromium e2e 31/31.

Not checked: real iOS Safari, Firefox and Android Chrome; a screen reader; a full keyboard walk; anything on hardware.

Follow-up: 44px targets outside this tab (the header link, password eye, relay suggestion chips) are for an app-wide pass.

version.ts dropped pre-release suffixes entirely, so a signer on
0.18.0-beta.17 was told "Up to date" against a bundled 0.18.0-beta.19: the
page stated something false about the owner's own beta channel. Compare
pre-release identifiers per SemVer 2.0 section 11 instead, so beta.17 <
beta.19 < 0.18.0.
The tab used to show every concern twice (a "Your signer" summary list, then
collapsible sections repeating the same names), split encryption controls
across two sections that each pointed at the other, hid the five compare
words behind "Waiting..." during the phone-unlock bench flow, and left most
controls under the 44px touch target on a phone.

Restructure around "is my signer all right, and if not, what do I do?": a
Needs-attention block (present only when something needs a decision) above
one grouped section list in a fixed order (After a power cut, Firmware,
Backup, Network, Display and light, Diagnostics, Bridge), with Security
folded into After a power cut next to the mode it changes and the bridge
secret moved into Network. Keep every handler and device call unchanged.

For the phone-unlock bench flow (UnlockPhones.svelte): keep the five words
on screen throughout, including while waiting on the signer's button; fix
the word-wrap that could split a word across lines; add a heading and a live
region so step changes announce themselves and move focus; add a "Codes
don't match: revoke" button on the done step, wired to the existing revoke().

Add WordPairs.svelte (the five-word compare, shared by the confirm and
working steps so the words never move) and TogglePair.svelte (a shared
pressed/unpressed pattern with aria-pressed for the Upright/Flipped,
Detailed/Quiet and On/Off pairs). Scope new 44px touch targets to the
Device tab only, so other tabs are unaffected. Fix the ambiguous numeric
dates, the checkbox text with no space, an em dash in VaultUnlock's relay
copy, and the Firmware row showing green for an unknown version.
A version with build metadata and no pre-release (0.14.0+abc) failed to parse
after the pre-release change, so Sapwood would decline to compare it at all.
- Say once that the card can queue behind another approval, and that the
  signer's button only works once all five words have shown.
- Keep the step announcement for screen readers only; each step already
  says the same on screen.
- Let a long section state drop under its title instead of squeezing it.
- Apply the 44px touch targets on narrow screens as well as touch pointers,
  without dropping the disclosure marker.
@TheCryptoDonkey
TheCryptoDonkey merged commit fa1abe8 into main Sep 26, 2026
4 checks passed
@TheCryptoDonkey
TheCryptoDonkey deleted the design/devices-tab branch September 26, 2026 09:27
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