Skip to content

fix(app): UX pass — layout, scroll, wrap, copy & design-slop cleanup - #13

Merged
hellno merged 11 commits into
mainfrom
hellno/ux-improvements-pass
Jun 10, 2026
Merged

fix(app): UX pass — layout, scroll, wrap, copy & design-slop cleanup#13
hellno merged 11 commits into
mainfrom
hellno/ux-improvements-pass

Conversation

@hellno

@hellno hellno commented Jun 10, 2026

Copy link
Copy Markdown
Owner

UX pass on the new infra↔UI integration, found by driving the live app. Every commit is green (fmt, clippy on default + tray, 87 tests); the structural fixes were verified live and the scroll/centering reworks were cross-reviewed by codex (final verdict: clean).

Fixes

  • Layout collapse/overlap — the content column wasn't given full height, so any view shorter than the viewport floated mid-pane and overlapped the breadcrumb + bottom status strip. It now stretches like the sidebar.
  • Scrolling — the main pane now scrolls, per-surface (each surface keeps its own scroll offset), so tall Settings/Wallet content no longer underlaps the status strip.
  • Centering — Receive/Shield cards actually center now: the content slot is a real flex column (gpui div defaults to display: block, so flex_1/justify_center was inert before).
  • Text wrap — long copy in Settings rows and the Shield/Receive headings wraps instead of clipping off the right edge.
  • Shield recipient copy — only calls the recipient "your own 0zk address" when it actually matches your address; otherwise neutral copy.
  • Breadcrumb — drop the redundant "Personal › Personal" on Project home.
  • Design + slop cleanup — flattened the Receive network warning to an inline amber icon + risk text and removed the amber left-keyline (also from the Shield honesty box + the DESIGN.md rule); removed AI-slop comments while keeping the substantive gotcha/honesty notes.

hellno added 11 commits June 9, 2026 20:53
…/overlap

The two-pane row is an h_flex (children centered vertically). The sidebar opts
into full height with .h_full(), but the content column didn't — so any view
shorter than the viewport collapsed to its intrinsic height and floated mid-pane,
bunching the breadcrumb, body, and bottom status strip into an overlapping stack.
Give the content column .h_full()/.min_h_0() to match the sidebar.
Text columns sitting next to a control/glyph had no width bound, so long copy laid
out on one line and ran off the right edge: Settings toggles + RPC input pushed
off-card, and the Shield/Receive descriptions clipped. Bound each text column with
.flex_1()/.min_w_0() so it wraps within the available width.
…atus strip

The content slot clipped/overflowed instead of scrolling (a TODO had disabled it),
so a view taller than the pane (Settings, a funded Wallet) slid under the bottom
status strip. Wrap the slot in gpui-component's Scrollable (overflow_y_scrollbar,
which owns its own scroll handle) so it clips to the pane and scrolls.
The compose note still claimed the 0zk address 'auto-fills in a later release',
but Wave-2 shipped the auto-fill and the field is pre-filled. Show honest,
state-aware copy keyed off whether the recipient field has content.
…home

Project Home's view label is itself 'Personal', so the breadcrumb repeated it.
Skip the trailing '> <view>' segment when it would just repeat the project name.
The shared scroll wrapper on the content slot caused two regressions codex flagged:
(1) gpui-component's Scrollable keys its offset by call site, so one wrapper shared a
single offset across every surface — scrolling a long page then navigating opened the
next one pre-scrolled with its header hidden; (2) the centered Receive/Shield cards lost
their full-height parent and rendered top-aligned. Move scrolling into each surface's own
match arm (distinct call sites -> independent offsets) and leave Receive/Shield unwrapped
so they stay centered against the full-height slot. Drops the now-stale TODO(scroll) notes.
…our 0zk (codex P2)

The helper line said 'Pre-filled with your own 0zk address' for any non-empty recipient,
including a user-typed/edited one — misrepresenting where the deposit goes. Key the copy
off whether the recipient equals the wallet's auto-filled railgun address; a manual
recipient now gets neutral 'double-check it' copy.
…x column

gpui's Style::default() is display:block (verified style.rs), so the prior
div().flex_1().min_h_0() content slot never let the centered cards' flex_1 take
effect — Receive/Shield sized to their card and sat under the breadcrumb. Make the
slot a v_flex (flex column) so flex_1 + justify_center actually fills + centers.
Verified live: Receive now centers; scrolling surfaces (size_full children) unaffected.
Removing the stale TODO(scroll) comments let rustfmt collapse the home-view roots
and re-indent ~460 lines. Restore the original layout with a one-line note (scrolling
now lives in shell.rs's per-surface wrapper), shrinking the welcome.rs diff from ~470
lines of churn to the handful that actually changed.
Drop the redundant flex_1/min_w_0 'wraps text' comments (3 files — a standard gpui
idiom), tighten two over-long shell.rs comments, and revert welcome.rs to main (its
only change was formatting-motivated notes that triggered a 460-line rustfmt reflow).
Keep the comments that document real footguns (gpui div=block, Scrollable call-site
keying) and the shield honesty rationale.
…yline

Per design review the 2px amber left-keyline on caution cards read as generic
alert-card slop. Flatten the Receive warning to an inline amber icon + risk text
(no banner box), and remove the keyline from the Shield honesty box (keep its calm
fill). Update DESIGN.md to drop the keyline rule (caution = amber icon + text).
@hellno hellno changed the title fix(app): UX pass — layout collapse + text-clipping fixes fix(app): UX pass — layout, scroll, wrap, copy & design-slop cleanup Jun 10, 2026
@hellno
hellno merged commit 60834c1 into main Jun 10, 2026
3 of 4 checks passed
hellno pushed a commit that referenced this pull request Jun 14, 2026
Validate the code-fit layer from a four-cluster read of the actual
codebase: per-item crate placement, seam-vs-expansion, size, and risk,
plus an EIP-7702 spike brief.

Key findings:
- deckard-core already has the right seams (multi-account derivation,
  reserved enclave flag, alloy/7702-ready builder-agnostic broadcast)
- Un-gating Send is UI-only (daemon path tested) and the dependency hub
- deckard-contract (frozen) is the higher-ceremony expansion point;
  batch RevokeApproval/Intent::Batch/session-token changes together
- Re-tier #13 RPC-before-first-request UP to L (provider spawns with
  DEFAULT_RPC before the auth gate); re-tier #8/#9 multi-identity DOWN
  (core already derives accounts)

Reworks the sequencing tiers with the measured sizes.
hellno pushed a commit that referenced this pull request Jun 14, 2026
Validate the code-fit layer from a four-cluster read of the actual
codebase: per-item crate placement, seam-vs-expansion, size, and risk,
plus an EIP-7702 spike brief.

Key findings:
- deckard-core already has the right seams (multi-account derivation,
  reserved enclave flag, alloy/7702-ready builder-agnostic broadcast)
- Un-gating Send is UI-only (daemon path tested) and the dependency hub
- deckard-contract (frozen) is the higher-ceremony expansion point;
  batch RevokeApproval/Intent::Batch/session-token changes together
- Re-tier #13 RPC-before-first-request UP to L (provider spawns with
  DEFAULT_RPC before the auth gate); re-tier #8/#9 multi-identity DOWN
  (core already derives accounts)

Reworks the sequencing tiers with the measured sizes.
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