Skip to content

onboarding: UX polish for full-tab setup and Ledger (#718) - #731

Merged
derek-flossman merged 10 commits into
release/v0.10.8from
fix/718-onboarding-polish
Oct 26, 2026
Merged

derek-flossman merged 10 commits into
release/v0.10.8from
fix/718-onboarding-polish

Conversation

@Ryun1

@Ryun1 Ryun1 commented Oct 19, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

UX fixes from testing first-run onboarding, mostly on the full-tab surface. Styling and keyboard behaviour only: no change to what accounts are found, created or signed.

  • Background stays still. The landscape was sized to the page, so opening a dropdown (e.g. on "Find your accounts") rescaled and shifted it. It is now pinned to the viewport.
  • Enter continues on a valid passphrase, on the software and the Ledger setup alike. Enter only presses the step's Continue when that is enabled (valid, matching, not busy), and never triggers the form's "Finish setup" submit. One shared helper (bindEnterToContinue, beside the passphrase meter) serves both.
  • Toasts no longer cover the card's buttons. The toast slot sits above the side panel's dock; the full tab has none, so toasts landed on the bottom action. On that surface they now sit top-right, clear of the card.
  • The Ledger overlay uses the wizard's card on the full tab. It is a panel-sized sheet, so opened from first-run setup it filled the whole tab and stretched every button edge to edge. It now shows the landscape and sets each Ledger screen in the same 520px card, with a step's layout (dark icon chip and headline at the top, actions at the foot). Follow-ups from re-checking it: a tall account list scrolls from its heading (a centred card had overflowed 232px above the scroll origin), toasts stack above the overlay so their copy control stays clickable, and the device chooser's list sits under its heading. Scoped to the full tab: the side panel is unchanged.
  • Ledger "Show more" visibly works. It appended the next page inside closed account groups with no count, so nothing changed on screen. The click now opens the groups and marks itself busy while the device is read (side panel too).

Not in this PR (separate PRs to follow): listing Braavos Account 0 in the recovery-phrase scan, and finding Ready/Braavos accounts in first-run Ledger setup.

Roadmap & release

Checks

  • bun run check passes. Every gate passes except apps/terminal "Tokens screen > defaults to AVNU and builds through the selected swap route", which fails identically on a clean release/v0.10.8.
  • bun run test:e2e passes (22/22)
  • Tests are included for the behavior changed (Enter on both passphrase steps, Show more, surface-geometry radius rule updated for the Ledger card)
  • No lint or type suppressions added
  • All changed files stay under the 500-line cap

The Ledger screens were checked by rendering the real view code into the built onboarding page (no device in CI); worth a click-through with a Ledger.

Dependencies

none

Reminder: review before merging; Ledger behaviour has only been checked without a device.

@cursor

cursor Bot commented Oct 19, 2026 •

Copy link
Copy Markdown

PR Summary

Low Risk
Presentation-layer onboarding and Ledger UI only; vault, device enumeration, and account logic are unchanged aside from paging queue UX.

Overview
Polishes first-run onboarding and Ledger flows with styling and keyboard behavior only—no changes to account discovery, creation, or signing.

Passphrase steps: Adds shared bindEnterToContinue so Enter triggers the step Continue when enabled (valid, matching passphrase), prevents accidental form submit on Finish setup, on both software onboarding and Ledger first-run.

Full-tab surface: Pins the landscape background (background-attachment: fixed) so expanding UI no longer rescales it; moves toasts to top-right so they do not cover card actions; introduces ONBOARDING_LEDGER_STYLES so the Ledger overlay uses the same 520px wizard card (landscape visible, wizard hidden while open) instead of edge-to-edge full tab.

Ledger "Show more": Exposes loadingMore on the picker view—button disabled/busy while paging; queues extra clicks during in-flight page load instead of dropping them; runtime opens collapsed account groups and marks the button busy so appended rows are visible.

Reviewed by Cursor Bugbot for commit 0504863. Bugbot is set up for automated code reviews on this repo. Configure here.

Ryun1 added 7 commits October 19, 2026 15:56
The full-tab background was a cover image sized to the body, so opening a
disclosure on "Find your accounts" (or anything else that grew the page)
rescaled and re-centred the image, and the landscape lurched behind the
card. Pin it to the viewport instead.

Refs #718
The passphrase fields sit inside the onboarding form, whose submit belongs
to "Finish setup", so Enter there did nothing useful. Enter in either field
now presses the step's Continue, and only when Continue is enabled (valid,
matching, and not already busy).

Refs #718
The Ledger setup has its own passphrase pair and a plain Continue button,
so Enter there did nothing, unlike the software path after the previous
commit. Move the Enter handling into a shared bindEnterToContinue beside
the passphrase meter (already shared by both setups) and use it in both.

Refs #718
The toast slot sits above the side panel's dock. The full-tab onboarding
surface has no dock, so a toast landed on the card's bottom action (e.g.
"Valid recovery phrase" over "Find my accounts"). On that surface toasts
now sit in the top-right corner, which is outside the card at any width
that shows the landscape and, on a narrow tab, overlaps only the card's
top padding rather than its back control.

Refs #718
The Ledger onboard overlay is a panel-sized sheet. Opened from first-run
setup it filled the whole tab: the landscape and card vanished and every
screen, its buttons and the account picker stretched edge to edge.

On the onboarding surface it now shows the landscape and sets each
screen in the wizard's 520px card (hiding the wizard behind it), with a
wizard step's reading order: dark icon chip and headline at the top,
actions pinned to the card's foot. Scoped to the full-tab surface, so the
side panel is unchanged; the in-wallet add-account chooser keeps its own
header layout. The surface-geometry test now admits this card among the
full-page chrome allowed the largest radius.

Refs #718
Follow-ups to the full-tab Ledger card, found re-checking it:

- A centred grid item taller than the overlay overflowed above the scroll
  origin: with both account groups open, the card's top (heading and first
  rows) sat 232px off-screen and could not be scrolled to. Centre with auto
  block margins instead, which collapse for a tall card.
- The overlay is now transparent around its card, so a toast showed
  through but sat beneath it (z 10 vs 40) and could not be clicked, e.g. an
  error toast's copy control. On this surface toasts stack above the Ledger
  layers.
- The device chooser renders inside the actions block, which the card pins
  to its foot, so the device list fell to the bottom. Keep it under the
  heading and drop only Cancel to the foot.

Refs #718
"Show more" read the next page from the device silently and appended it
inside the Bramble and Argent groups. With no activity those groups stay
closed and their summaries carry no count, so the click changed nothing
on screen and looked broken. The click now opens the groups (kept open
across the re-render) and marks the button busy while the device is read.

Refs #718
@Ryun1
Ryun1 force-pushed the fix/718-onboarding-polish branch from 15b7ce3 to af6bd90 Compare October 19, 2026 15:01

@cursor cursor Bot left a comment •

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Stale Bugbot comment from a previous run.

@Ryun1
Ryun1 changed the base branch from release/v0.10.7 to release/v0.10.8 October 19, 2026 15:01
After the device read, the controller stays busy while each new
candidate is described on chain. A "Show more" click in that window hit
the busy guard and was dropped, after the click had already opened the
groups and dimmed the button, so it looked started; the next repaint
restored an idle button and the page never came (Bugbot, #731).

A click while a page is still read or described is now queued and runs
as soon as that page settles; the picker renders "Show more" busy and
disabled for the whole wait (a new `loadingMore` on the picker view). A
failure or cancel drops the queue. The derive block is compacted to keep
the controller under the size cap.

Refs #718
@derek-flossman

Copy link
Copy Markdown
Collaborator

AI-assisted review (Claude, with an independent Codex gpt-6-astra pass), posted from @derek-flossman's account. Findings were checked against the code; treat them as review input, not approval.

Reviewed: no new findings. The Bugbot "Show more" issue is fixed in f9d065c. The branch is behind release/v0.10.8, so it'll need an update before merge.

derek-flossman and others added 2 commits October 26, 2026 18:48
Merged with today's release/v0.10.8, #765 and #762 each added a few lines
to files this branch also grows. That left styles-onboarding.ts at 501
lines and onboard-session.ts at 502, which check:files refuses. This
shortens four comments: two from this branch and the #762 one, with no
code change. The files are now 497 and 499 lines.

Refs #718
Refs #727

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@derek-flossman

Copy link
Copy Markdown
Collaborator

Review follow-up (AI-assisted, by Claude), posted from @derek-flossman's account. Pushed to this branch with Derek's OK.

@Ryun1, heads-up: I pushed two commits here so this can merge today.

  • e163837 merges current release/v0.10.8. No conflicts.
  • 0504863 trims comments only, no code change. After the merge, #765 and #762 had each added a few lines to files this branch also grows: styles-onboarding.ts came to 501 lines and onboard-session.ts to 502, so check:files failed. I shortened your background-pin and toast-slot comments, your "Show more" queue comment, and my own accounts: send a phrase-less wallet's regular-account choice to import (#740) #762 comment. The files are now 497 and 499.

Bugbot's "Show more can skip the next page" is fixed by f9d065c. I traced the queue:

  • a click while a page is read or described sets moreQueued;
  • the finally runs it once that page settles, only if the flow epoch is unchanged;
  • resetState and the error path clear it;
  • loadingMore keeps the button busy and disabled for the whole wait.

Run on this branch merged with current release/v0.10.8:

  • types, lint, copy, imports, cycles and dead code pass; check:files passes after the trim;
  • bun run test: 3075 pass;
  • wallet-ui: 2121 pass, 0 fail;
  • full E2E: 23/23 pass. That includes onboarding and fix: stop the side panel scrolling when its content fits (#759) #765's side-panel-overflow.e2e.ts, so the new full-tab styles don't reintroduce panel overflow.

Still open from your description: a click-through of the Ledger screens with a real device.

For #733, which is stacked here: onboard-session.ts is now at 499 lines and #733 adds to it, so it will need a trim or a split when it's rebased.

@derek-flossman
derek-flossman merged commit d77e242 into release/v0.10.8 Oct 26, 2026
6 checks passed
@derek-flossman

Copy link
Copy Markdown
Collaborator

Merged by the repo owner via the release-review bypass; no second review. Head 0504863 was up to date with release/v0.10.8, with fast-checks and pr-guards green.

@derek-flossman
derek-flossman deleted the fix/718-onboarding-polish branch October 26, 2026 18:55

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Want fixes drafted automatically? Bugbot Autofix can create code changes for findings. A team admin can enable Autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 0504863. Configure here.

export const ONBOARDING_LEDGER_STYLES = `
body.onboarding-surface:has(> .ledger-onboard-overlay:not([hidden])) .onboarding-wizard {
visibility: hidden;
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Enter restarts hidden Ledger setup

Medium Severity

Opening the Ledger overlay only sets the wizard to visibility: hidden, so the passphrase field can keep focus. Further Enter keydowns still hit bindEnterToContinue and call startLedgerSetup again, which runs openConnect and resets any in-flight read or picker. Keyboard users on the full-tab surface cannot reach the overlay's Connect control with Enter, and a repeat or second Enter can abort a connect that already started.

Additional Locations (2)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 0504863. Configure here.

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