Skip to content

Redesign both screens as dark instrument UI - #5

Merged
MadsenDev merged 1 commit into
mainfrom
claude/redesign-from-zip-dg0c13
Aug 8, 2026
Merged

Redesign both screens as dark instrument UI#5
MadsenDev merged 1 commit into
mainfrom
claude/redesign-from-zip-dg0c13

Conversation

@MadsenDev

Copy link
Copy Markdown
Contributor

Applies the visual pass from the design doc: warm near-black ground, a single
violet accent, and a split between Space Grotesk for chrome and JetBrains Mono
for anything the technician reads back.

Both roles are now dark only. The receiver's light theme is gone — it sits at a
counter beside a phone holding a camera preview, and a white page next to that
is glare. The colour scheme is declared in the shell so the first paint is never
a white flash.

The typefaces are self-hosted as Latin variable subsets (53 KB for the pair)
rather than pulled from Google Fonts. A CDN link would be blocked by the relay's
font-src 'self' anyway, and third-party resources have no business on a page
that renders scanned values.

Three things the design shows that the app did not have:

  • The last scan carries its symbology and age. The age ticks inside the
    aria-live region, so it is hidden from assistive tech — otherwise a screen
    reader re-announces the scan every second.
  • The phone counts delivered scans in its status bar. Counts acks, not decodes,
    for the same reason the success flash does.
  • The session countdown gets a hairline track that drains as it runs down. This
    reverses an explicit "not a progress bar" line in the UI spec, so the spec is
    updated rather than quietly contradicted. The relay only says when a session
    expires, never how long it was granted, so "full" is whatever remained when we
    first heard.

Also fixes a duplication the new type scale made obvious: with the pairing QR
gone, the connection state was rendered both as the heading and as a status row
below it, printing the same four words twice. It is one promoted status line now.

Scan values are still sent and displayed raw — the Wi-Fi password the design
mock shows masked is not masked here, because the receiver must show exactly
what it will copy.

Applies the visual pass from the design doc: warm near-black ground, a single
violet accent, and a split between Space Grotesk for chrome and JetBrains Mono
for anything the technician reads back.

Both roles are now dark only. The receiver's light theme is gone — it sits at a
counter beside a phone holding a camera preview, and a white page next to that
is glare. The colour scheme is declared in the shell so the first paint is never
a white flash.

The typefaces are self-hosted as Latin variable subsets (53 KB for the pair)
rather than pulled from Google Fonts. A CDN link would be blocked by the relay's
`font-src 'self'` anyway, and third-party resources have no business on a page
that renders scanned values.

Three things the design shows that the app did not have:

- The last scan carries its symbology and age. The age ticks inside the
  `aria-live` region, so it is hidden from assistive tech — otherwise a screen
  reader re-announces the scan every second.
- The phone counts delivered scans in its status bar. Counts acks, not decodes,
  for the same reason the success flash does.
- The session countdown gets a hairline track that drains as it runs down. This
  reverses an explicit "not a progress bar" line in the UI spec, so the spec is
  updated rather than quietly contradicted. The relay only says when a session
  expires, never how long it was granted, so "full" is whatever remained when we
  first heard.

Also fixes a duplication the new type scale made obvious: with the pairing QR
gone, the connection state was rendered both as the heading and as a status row
below it, printing the same four words twice. It is one promoted status line now.

Scan values are still sent and displayed raw — the Wi-Fi password the design
mock shows masked is not masked here, because the receiver must show exactly
what it will copy.
@MadsenDev
MadsenDev merged commit d39f916 into main Aug 8, 2026
2 checks passed
@MadsenDev
MadsenDev deleted the claude/redesign-from-zip-dg0c13 branch August 8, 2026 19:36
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.

2 participants