Skip to content

feat(desktop): UI userification — wallet menu, inline Discover filters, settings & external-clients restyle#445

Closed
owklama wants to merge 13 commits into
AntSeed:mainfrom
owklama:feat/desktop-userification
Closed

feat(desktop): UI userification — wallet menu, inline Discover filters, settings & external-clients restyle#445
owklama wants to merge 13 commits into
AntSeed:mainfrom
owklama:feat/desktop-userification

Conversation

@owklama
Copy link
Copy Markdown

@owklama owklama commented May 3, 2026

Summary

A wide UI refresh of the desktop app — re-organizes navigation chrome, removes the native titlebar, replaces native dropdowns with custom popovers, restyles chat + settings views, and rebuilds the Discover marketplace cards. Major themes:

  1. Discover inline filters — Category, Price, and Sort are now first-class popover pills in the controls row (no more drawer round-trip for the common cases) with curated category ordering and per-category icons. The drawer itself gets a custom time-window select, custom checkbox, and restyled reset button.
  2. Discover card redesign — outlined chip tags with icons, provider logo + attribution in the footer, unified Free/Paid pricing skeleton, responsive grid, and brand glyphs alongside model names.
  3. App chrome refresh — native TitleBar component removed; wallet/credits menu extracted into a standalone WalletPanel; AntStation logo + Alpha pill hoisted into the sidebar header; alpha badge shifted from red danger pill to green accent pill.
  4. Chat experience refinements — restyled StreamingIndicator, ServiceDropdown, SessionApprovalCard, ChatView; new peer-routing tests for chat.ts.
  5. Settings viewsConfigView and ExternalClientsView rebuilt top-to-bottom; ExternalClients steps replaced with connected flow cards.

What's in here

Discover (chat marketplace)

  • New DiscoverInlineCategoryFilter — multi-select chip popover. Curated top-5 categories (chat, coding, reasoning, vision, anon) render first; rest collapsed behind a +N more toggle that auto-expands when a hidden tag is selected. Per-category Hugeicons via new discover-category-icons.ts.
  • New DiscoverInlinePriceFilter — 4-bucket preset radio popover backed by PRICE_PRESETS + matchPricePreset helper in discover-filter-util.ts.
  • New DiscoverInlineSortFilter — custom dropdown replaces the native <select>, sharing styling with the other two pills. SORT_OPTIONS moved into discover-filter-util.ts as the single source of truth.
  • DiscoverFilters (drawer): custom time-window select with portal-rendered popover (auto-flips to render above when there's no room below), category buttons now show icons, "Previously used" rebuilt as a custom checkbox, reset button restyled into a danger-tinted full-width pill. Drawer panel itself gets rounded right edge + surface background + soft shadow.
  • New model-logos.tsx + brand-mark glyphs (OpenAI, Anthropic, Meta, DeepSeek, Mistral, Moonshot, Qwen, Google, Minimax, GLM, Flux, Stability, Nvidia, Venice, Grok). All monochrome via currentColor so they work in light + dark.
  • New ProviderLogo.tsx + PNG/SVG assets under assets/provider-logos/ (Anthropic, OpenAI, Google, Meta, Mistral, DeepSeek, Cohere, Minimax, Moonshot, Qwen, Zhipu, Nous Research). Rendered in the card footer next to provider attribution.
  • DiscoverWelcome cards restructured: outlined chip tags with icons (matches the Categories filter), provider attribution moved into the footer with usage stats, unified Free/Paid pricing skeleton with /M suffix, responsive grid (auto-fill minmax(320px, …)), anon rendered as accent badge.
  • useDiscoverFilters: adds clearCategories() for the category popover's Clear button.

App chrome

  • TitleBar.tsx removed; the native title-bar concept is gone. AppShell no longer mounts it.
  • New WalletPanel.tsx — wallet/credits menu extracted into its own component. Hero balance card → wallet/signer address chips with copy-to-clipboard → Manage / Deposit actions. When no wallet is connected, shows a Connect-a-wallet CTA.
  • Sidebar: AntStation logo + Alpha pill hoisted into a sidebar header (previously lived in the title bar). Heavy restyle pass.
  • AlphaHint — clickable Alpha pill with popover. Shifted from red danger pill to green accent pill. Replaces the inline static "Alpha Version" label.

Chat experience

  • chat.ts: peer-routing logic refined; new chat.peer-routing.test.ts covers the routing branches.
  • StreamingIndicator: restyled with new states.
  • ServiceDropdown, SessionApprovalCard, SwitchServiceDialog, ChatView: companion restyle passes.

Settings views

  • ConfigView: full restyle. New InlineSelect component (consistent with Discover dropdowns) for chain selection. Section iconography, intro header with status chip, single co-located save flow.
  • ExternalClientsView: brand-marked client tiles for Anthropic / OpenAI / OpenCode / Generic. Numbered steps replaced with connected flow cards (chip-style step number + per-card tag + animated entrance + connecting rail between cards). Proxy badge + try-button toned down.

Misc

  • .gitignore: ignore .superpowers/ brainstorm session content.

Approach notes

  • Inline filters built per the spec at docs/superpowers/specs/2026-05-03-discover-inline-filters-design.md and plan at docs/superpowers/plans/2026-05-03-discover-inline-filters.md.
  • Purpose-built React components (no premature abstraction); the Discover dropdowns share style conventions but not code yet — extract useDismissableLayer + a trigger SCSS partial when a fourth lands.
  • Model brand marks intentionally simplified, monochromatic, single-weight so the card grid reads as one icon family rather than a sticker collage.
  • Provider logos use raster + svg assets (real brand marks) where the model logos are simplified glyphs — different layers, different goals.
  • Drawer remains source of truth for the long tail of filters (peers, last-seen/settled, channel count, etc.).
  • Time-window popover renders into document.body via createPortal so it can escape the drawer's overflow clipping.

Test plan

  • cd apps/desktop && npx tsx --test src/renderer/ui/components/chat/discover-filter-util.test.ts — pass
  • cd apps/desktop && npx tsx --test src/renderer/ui/hooks/useDiscoverFilters.test.ts — pipeline tests pass
  • cd apps/desktop && npx tsx --test src/renderer/modules/chat.peer-routing.test.ts — peer-routing branches pass
  • Renderer typecheck (tsc --noEmit -p tsconfig.renderer.json) — 0 errors
  • Manual UI verification in npm run dev:
    • Category popover: top-5 ordering, +N more expand/collapse, hidden-selection auto-expand, Clear button, drawer sync, outside-click + Esc dismiss, per-category icons
    • Price popover: preset selection, Custom state, drawer sync
    • Sort popover: option selection, active checkmark, dismiss
    • Drawer time-window selects: open up vs. down based on viewport space, Esc + outside-click dismiss, active checkmark
    • Drawer "Previously used" custom checkbox toggles
    • Drawer reset button: hover state, full reset
    • DiscoverWelcome cards: model logos render for known families, provider logo in footer, anon accent badge, +N tag overflow tooltip, responsive reflow on window resize
    • WalletPanel: balance, copy address, Connect-a-wallet CTA when address absent, Manage / Deposit actions, outside-click dismiss
    • Sidebar header: logo + green Alpha pill render, Alpha popover opens
    • StreamingIndicator: new states render correctly
    • ServiceDropdown / SessionApprovalCard / SwitchServiceDialog / ChatView: regressions check
    • ConfigView: chain InlineSelect changes persist, status chip surfaces save messages, save-and-restart flow works
    • ExternalClientsView: brand tiles render, flow cards animate in with stagger, proxy badge online/offline states, try-button works, copy/launch actions still work
    • Light + dark theme parity across all of the above

Follow-ups (not in this PR)

  • Wire renderer-side *.test.ts files into CI (pre-existing gap — they pass locally but tsconfig.renderer.json excludes them and npm test only covers dist/main).
  • Extract shared useDismissableLayer hook + trigger SCSS partial once a fourth inline pill lands.
  • Real wallet-connect flow behind the Connect-a-wallet CTA (currently routes to the existing payments portal).

🤖 Generated with Claude Code

owklama and others added 9 commits May 3, 2026 12:41
Design for surfacing two dropdown pills (Categories multi-select,
Price preset) in the Discover controls row, sharing state with the
existing useDiscoverFilters hook so the advanced-filters drawer
remains the source of truth.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Six-task plan: helper additions (PRICE_PRESETS, matchPricePreset,
clearCategories) with TDD, two new React components, integration
into DiscoverWelcome with flex-wrap on the controls row, and a
manual-verification checklist.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Powers inline Price filter dropdown — maps slider state (maxInputPrice,
maxOutputPrice) to one of four common buckets (Any, Free only, Under
$0.10/M, Under $1/M) or 'custom' when values don't match a preset.
Single-call clear for the inline Category filter's 'Clear' button.
Cheaper than iterating toggleCategory over the active set (one state
update, one re-render).
Trigger pill + radio popover for the four price preset buckets.
Auto-closes on selection; outside-click and Esc dismiss. Reads
maxInputPrice/maxOutputPrice from useDiscoverFilters and writes both
on selection so input and output sliders stay in lockstep.
Trigger pill + multi-select chip popover. Stays open while toggling
chips; outside-click and Esc dismiss. Disabled until categories load
so the row doesn't reflow on first paint. Shares state with the
advanced-filters drawer via useDiscoverFilters.
Renders the two new dropdown pills between the advanced-filters trigger
and the sort select. Adds flex-wrap to .controls-row so the pills wrap
to a second row at narrow viewports rather than squeezing the search box.
`gap: 8px` is shorthand for both row-gap and column-gap, so the
explicit row-gap was a no-op. Caught in code review.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…, settings & external-clients restyle

- TitleBar: replace credits button with wallet-icon balance + redesigned dropdown (hero balance, copy-address chips, connect-wallet CTA)
- Sidebar: hoist AntStation logo + Alpha pill into a new sidebar header
- New AlphaHint component (button + popover) replaces inline alpha label
- New DiscoverInlineSortFilter custom dropdown replaces native <select>
- DiscoverInlineCategoryFilter: curated top categories, +N more expand, per-category icons
- DiscoverWelcome cards: model brand logos, anon accent badge, restructured header/body/footer; SORT_OPTIONS moved into discover-filter-util
- ConfigView: full restyle with custom InlineSelect for chain selection and section iconography
- ExternalClientsView: brand-marked client tiles (Anthropic/OpenAI/OpenCode/Generic) with restructured layout
- .gitignore: ignore .superpowers/

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@owklama owklama changed the title feat(discover): inline category & price filter dropdowns feat(desktop): UI userification — wallet menu, inline Discover filters, settings & external-clients restyle May 3, 2026
owklama and others added 4 commits May 3, 2026 17:14
…style

- Discover cards: outlined chip tags with icons (matching Categories
  filter), provider attribution moved to footer alongside usage stats,
  unified Free/Paid pricing skeleton with /M suffix on each value, and
  responsive grid (auto-fill minmax 320px) so cards reflow cleanly when
  the window narrows.
- New ProviderLogo component + provider-logo assets (Anthropic, OpenAI,
  Google, Meta, Mistral, DeepSeek, Cohere, Minimax, Moonshot, Qwen,
  Zhipu, Nous Research) rendered next to model names.
- Alpha badge: shifted from red danger pill to compact green accent pill.
- Sidebar, ConfigView, ExternalClientsView: companion restyle pass.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ews, and shell

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Custom time-window select with portal popover, category icons, custom
checkbox, and restyled reset button in DiscoverFilters. Discover drawer
gets rounded right edge and surface background. ExternalClientsView
swaps numbered steps for connected flow cards and tones down proxy
badge and try-button styling.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@owklama owklama marked this pull request as ready for review May 3, 2026 18:28
@owklama owklama marked this pull request as draft May 3, 2026 22:54
@kotevcode kotevcode closed this May 4, 2026
owklama added a commit to owklama/antseed that referenced this pull request May 11, 2026
ANTSEED_PAYMENTS_DEV_TOKEN now only takes effect outside production, so a
leaked env var in a real deployment cannot downgrade the per-session
bearer token to a fixed string. The dev-token URL log line is guarded by
the same check. Also remove a code comment referencing PR AntSeed#445, which
will rot once that PR is no longer top-of-mind.
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