Skip to content

[wip]feat/app UI refresh#233

Draft
swedishfrenchpress wants to merge 47 commits intomainfrom
feat/app-ui-refresh
Draft

[wip]feat/app UI refresh#233
swedishfrenchpress wants to merge 47 commits intomainfrom
feat/app-ui-refresh

Conversation

@swedishfrenchpress
Copy link
Collaborator

WIP: App-wide UI refresh and design system standardization

This is a large draft PR focused on deep UI consistency and design system work across the app.

It combines and builds on top of two existing WIP PRs:

From there this branch goes much further, working toward a unified design system with reusable components and consistent patterns across the entire app. The goal is to standardize typography, spacing, buttons, icons, empty states, toggles, section headers, row components, and nav bars so that every screen feels like it belongs to the same app.

Still actively working through this. Screens being touched include settings and all sub-screens (mints, mint details, webhooks, basket names, fiat currency, language, security & privacy, tips), the withdraw flow, add items, and the onboarding mint selection.

Key areas of work:

  • Building and enforcing a shared component library (rows, buttons, section headers, empty states, checkboxes, radio buttons, toggles)
  • Removing one-off custom styling in favor of component reuse
  • Standardizing typography sizes, weights, and colors across all screens
  • Consistent spacing and padding
  • Fixing light mode and dark mode across the board
  • Hero card treatment for key features (auto-withdraw, default mint, lightning mint)

This is a WIP, expect rough edges. Feedback welcome on direction.

swedishfrenchpress and others added 30 commits March 19, 2026 23:59
…iable hit testing, adjust row padding to maintain visual alignment
…e is off

The screen title showed "Auto-Withdraw" everywhere — renamed to "Withdraw"
in the nav bar and hero section across all locales (en/es/pt). Destination
and Trigger Settings sections were always visible even with the toggle off;
they are now fully hidden when disabled and smoothly animate in/out when
the toggle changes.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
… mode

The disabled state used a 20% opacity background color compounded with
0.5 alpha on the view, resulting in ~10% visibility. Fixed at the
component level so all screens using Widget.Button.Primary.Green benefit:

- Disabled bg now uses color_bg_tertiary (theme-aware solid color)
- Added text color selector with proper disabled state via color_text_tertiary
- Removed redundant alpha hacks from XML layouts and Kotlin code
- Removed inconsistent textStyle="bold" overrides on withdraw buttons

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Both withdraw layouts had an explicit color_bg_surface background on the
ScrollView, creating a visible seam against the nav bar. Other settings
screens (Security, Language, Currency) inherit color_bg_white from the
root with no ScrollView background override. Removed the override so
both withdraw screens match.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
… spacing

The section headers (DESTINATION, TRIGGER SETTINGS, etc.) were using
inline styling with sans-serif (regular) and 0.03 letter spacing instead
of the shared Text.SectionHeader style used across 8+ other screens.
Refactored all 4 headers to use the shared style (sans-serif-medium,
0.05 letter spacing).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Both rows used the same lightning bolt icon. Auto-Withdraw now uses a
Material Design autorenew icon to convey automatic/repeating behavior,
and Withdraw Now uses the down arrow icon consistent with withdraw line
items in the activity screen.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ermark

Dialed back the gradient to barely-there warmth — light mode goes from
pure white to a ~3% orange tint, dark mode shifts subtly from default
surface to a faint ember tone. Removed the orange border stroke that
added to the warning-banner feel.

Added an oversized 120dp lightning bolt at the bottom-right corner at 6%
opacity as a brand watermark, clipped by the card edges.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Restructured layout so the bolt sits outside the padded content layer in
its own FrameLayout, flush against the card edges with -30dp margins and
clipped by the CardView corner radius. Added -15deg counter-clockwise
rotation, a vertical fade-out overlay (theme-aware, transparent to card
bg color), and bumped opacity from 6% to 12% for better visibility.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ation on toggle

Renamed hero card title from "Withdraw" to "Auto-Withdraw" across all
locales. Added a LightningStrikeView that plays an orange lightning bolt
animation when the Auto-Withdraw toggle is switched on — forked bolt
path with amber glow, no screen flash, 400ms duration, auto-removes
after completion.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Reduced to a single bolt, added smooth fade-in/hold/fade-out timing
(550ms), lowered overall opacity to 70%, thinned stroke widths and glow
radii for a subtler effect. Removed the lightning bolt icon from the
Lightning Address input label.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Removed clock icon from recent activity empty state, made history card,
auto-withdraw toggle card, and withdraw now card backgrounds transparent
so they blend seamlessly in both themes — matching the borderless
appearance already seen in light mode.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The mint profile icon wasn't reliably loading, showing a fallback
bitcoin icon instead. Removed the icon container entirely for a cleaner
layout — mint items now show just name, URL, balance, and chevron.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Removed gray card backgrounds from invoice and address components (both
XML and programmatic setCardBackgroundColor). Removed lightning bolt and
envelope icons from section headers. Fixed SEND TO and CASHU TOKEN
headers to use shared Text.SectionHeader style. Applied hero gradient to
the balance card. Made cashu input and token result cards transparent.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Simplified Lightning Invoice and Address sections to match the
Auto-Withdraw screen's clean pattern (label, input, helper text).
Replaced QR scan icon with a Scan Invoice secondary button. Renamed
SEND TO header to DESTINATION. Removed lightning bolt icon from mint
name. Added real-time fiat balance below the BTC amount using
BitcoinPriceWorker. Removed address helper text.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Fixed cashu tab spacing to match destination section by removing extra
marginTop. Renamed "Amount (sats)" to "Amount" across all locales.
Fixed scan icon on Scan Invoice button — switched from drawableStart
(ignored by MaterialButton) to app:icon with textStart gravity.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replaced the custom segment toggle (bg_input_pill container, 14sp medium
text, bg_segment_tab_selected) with the same implementation used on the
payment request screen (bg_button_secondary_pill container, 18sp bold
text, bg_button_primary_green selected state, 42dp height, 125dp min
width). Both screens now use identical toggle styling.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ling

Updated history item icons to match the Activity screen — up arrow in
gray circle with green checkmark badge overlay for completed entries.
Removed redundant "Sent" badge. Fixed badge clipping with clipChildren.
Changed Withdraw Now icon from orange to gray to match. Centered share
icon vertically with text content for cashu token entries.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Updated history item text to match the Withdraw screen's row styles
instead of the Activity screen's styles. Amount now uses 17sp medium
(matching row titles like "Withdraw Now"), detail lines use 14sp
secondary (matching row descriptions). This makes Recent Activity feel
typographically unified with the rest of the Withdraw screen.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Inner circle was 40dp while Auto-Withdraw and Withdraw Now rows use
44dp. Expanded inner circle to 44dp and outer container to 50dp so the
green checkmark badge can still overflow the edge cleanly.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Removed elevation shadow from both withdraw screen title bars and
replaced inline 20sp title styling with shared Text.Title style (17sp)
to match Security & Privacy and other screens. Fixed centering with
textAlignment. Updated mint selection bottom sheet fonts to match
withdraw screen typography — mint name uses medium 17sp, URL uses 14sp
secondary, balance uses medium instead of bold.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Switched to explicit MaterialButton with app:strokeColor/strokeWidth for
visible border, since the style's android:background was being ignored.
Added insetTop/insetBottom="0dp" to match Continue button's 52dp height.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Removed gray background (color_bg_surface on root and ScrollView),
removed title bar elevation/divider, replaced inline 20sp title with
Text.Title style, updated TO label to use Text.SectionHeader, made card
backgrounds transparent, matched button width to other screens (40dp
margin), removed word "actual" from fee note text across all locales.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The history section header and card were appearing statically while
other elements above them had a staggered reveal. Added both to the
entrance animation sequence at 250ms and 300ms delays, continuing the
top-to-bottom stagger pattern.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Hero card switches between orange/amber gradient (inactive) and green
gradient (active) when Auto-Withdraw is toggled, including the
lightning bolt watermark tint. Instant swap with no flicker. Replaced
blue accent color on the percentage slider and See All button with
Numo orange to match the app's brand palette.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Icon is now gray/neutral when off (matching Withdraw Now style) and
switches to green when toggled on. Changes in sync with the hero card
gradient transition.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
swedishfrenchpress and others added 17 commits March 22, 2026 17:17
Remove TermsBottomSheet and revert welcome screen styling (TOS dialog,
terms text style, accept button elevation) back to master so splash
screen updates can be done on a separate branch.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
… system

Use Widget.Button.Primary.Green and Widget.Button.Secondary.Outlined
styles from the withdraw branch for consistency. Replace the ad-hoc
bottom sheet scan row with a proper outlined MaterialButton. Fix purple
button color by adding colorPrimary to the bottom sheet theme. Add text
color state list so disabled buttons show readable gray text. Update
hint copy to "Enter mint URL".

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace the plain Default Mint header + row with a hero card matching
the Auto-Withdraw design — gradient background, lightning bolt watermark,
and elevated typography. Remove chevrons from wallet setup options.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Remove 5 tests that referenced view IDs from an abandoned drag-and-drop
UI iteration (add_different_mint_card, mints_subtitle, mints_list_container,
mints_count_text). These IDs no longer exist in activity_onboarding.xml.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…green

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…creens

Update shared design system (typography, spacing, buttons, drawables) and
apply consistently across all in-scope screens:

- Shared: new Text.RowTitle/RowSubtitle/Helper styles, pill-shaped primary
  buttons (100dp radius), dashed secondary buttons (12dp radius), 36dp
  circular nav back buttons, custom checkbox drawables, EntranceAnimator
  utility with staggered fade-up animations
- Settings: all rows use 40dp icon circles, 15sp/12sp title/subtitle,
  section headers via Text.SectionHeader style, entrance animations
- Sub-screens (Security, Language, Currency, Theme): same row pattern,
  custom checkbox replacing system radio indicators, entrance animations
- Add Items: remove nav divider, apply Text.RowTitle/RowSubtitle to
  item rows, RecyclerView entrance animation
- Basket: pill-shaped checkout/save buttons, updated item typography
- Withdraw: restructure auto-withdraw hero card to match default mint
  hero pattern (green gradient, label + row + badge + helper), update
  nav bars, preserve LightningStrikeView toggle animation

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…Mints refresh

- Remove icon circle backgrounds (bg_circle_light) from all Settings rows,
  Security rows, and auto-withdraw hero card
- Remove nav back/close button circle backgrounds globally by converting
  bg_nav_back_button to invisible ripple mask
- Move auto-withdraw status pill from content row to top-right corner of
  hero card, aligned with the AUTO-WITHDRAW label
- Replace checkmark indicators with radio buttons on Language, Currency,
  and Theme selection screens (single-select = radio)
- Change checkbox/radio fill from green to neutral monochrome
  (color_text_primary fill + color_bg_white mark — theme-aware for both
  light and dark mode)
- Update onboarding mint checkmarks to neutral color (was green)
- Full design refresh of Mints Settings screen: hero card treatment for
  Lightning Mint section, shared section header styles, updated nav bar
- Fix Tip confirm button dark mode: replace inline textColor (color_bg_white
  which inverts to dark-on-dark) with shared Widget.Button.Primary.Green
  style that uses properly themed color_button_primary_green_text

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Auto-withdraw hero: remove "AUTO-WITHDRAW" label, autorenew icon,
divider, and helper text. Move status pill to top-left. Card now
shows just: status pill → title → subtitle.

Change active-state lightning bolt watermark from green to amber
(color_bitcoin_orange) when auto-withdraw is toggled on.

Remove green border stroke from both hero gradient drawables
(bg_hero_gradient_green light + dark) — affects auto-withdraw
and default mint hero cards. Gradient background alone provides
sufficient visual distinction.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…tton

- Text.RowSubtitle: 12sp/secondary → 13sp/tertiary for better contrast
  from titles (matches Activity screen's Text.Caption pattern)
- Mints screen: remove gray ScrollView background, orange bolt badge,
  and "LIGHTNING MINT" green label from hero card
- Mints hero bolt turns amber when swap toggle is ON, green when OFF
- Replace AddMintInputCard with dashed button + AddMintBottomSheet
  (reuses onboarding bottom sheet pattern)
- Add colorControlActivated=color_success_green to Theme.Numo for
  green toggle track when switches are ON (cascades globally)
- Enter Wallet button: replace inline MaterialButton with shared
  Widget.Button.Primary.Green style (proper theming, no shadow)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ails

- Remove all entrance/stagger animations app-wide: delete EntranceAnimator
  utility and entrance_fade_up anim, strip animation calls from Settings×5,
  ItemList, OnboardingAdapter, MintsSettings, WithdrawLightning, TipSelection
- Onboarding back buttons: ic_arrow_back → ic_chevron_back for consistency
- Add New Mint button text: green → color_text_secondary (neutral default)
- Withdraw section headers: remove extra 4dp marginStart, standardize to
  paddingTop 28dp / paddingBottom 14dp (matches Settings pattern)
- Mint Details full redesign: nav bar via Text.Title (17sp), section headers
  via Text.SectionHeader, rows via Text.RowTitle/RowSubtitle, standardized
  14dp/20dp padding, removed gray background and CardView wrappers,
  removed entrance animations

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…signs

- Remove entrance animations from Withdraw screen (startEntranceAnimations,
  animateCardEntrance, history item fade-in). Keep interactive animations
  (toggle pulse, config show/hide, lightning strike).
- Reorder Security & Privacy: WALLET BACKUP → PIN PROTECTION → WALLET
  RECOVERY (PIN moved above recovery for better flow)
- Add explicit switch thumb/track color selectors (green track when ON,
  white thumb) applied to all 4 SwitchCompat instances globally
- Withdraw screen: remove icon circle containers from toggle and manual
  withdraw rows, standardize to plain 24dp icons with 14dp gap
- Basket Names redesign: shared nav bar, dashed add button, left-aligned
  empty state, shared typography, 20dp padding
- Add Item redesign: white background (was gray), transparent cards,
  shared section headers and row title styles, 20dp padding
- Mint Details: hero card wrapper on header, neutral lightning icon,
  24dp action icons, standardized contact padding
- Webhooks redesign: shared nav bar, dashed add endpoint button,
  standard sync row, shared typography, removed card wrappers

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The Auto-Withdraw and Withdraw Now rows had 40dp effective left padding
(20dp on parent "Main Content Area" + 20dp on each row) vs Security's
20dp (row only, no parent padding). Removed paddingHorizontal from the
parent container and added individual paddingHorizontal/marginHorizontal
to section headers and cards that were relying on it. Rows now align
pixel-identically with Security & Privacy.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Backlog

Development

Successfully merging this pull request may close these issues.

1 participant