Skip to content

UI polish: TUI redesign pass (chat, home, server/setup, settings) - #39

Open
Melloss wants to merge 19 commits into
mainfrom
feature/ui-polish
Open

UI polish: TUI redesign pass (chat, home, server/setup, settings)#39
Melloss wants to merge 19 commits into
mainfrom
feature/ui-polish

Conversation

@Melloss

@Melloss Melloss commented Jul 25, 2026

Copy link
Copy Markdown
Collaborator

Summary

Visual polish pass aligning the app with the new TUI design spec — flat/monospaced
terminal aesthetic applied across shared chrome and the core screens (Chat, Home,
Server/Setup, Settings). Same design tokens the app already used; this is UI
restructuring, not a rebuild.

  • Shared chrome: tab bar, switches, status dots, top bar, section headers, unified
    back button (~17 screens)
  • Chat: redesigned composer, model picker bottom sheet, assistant @agent · model
    header, reworked slash-command popup, restyled permission prompts
  • Home: collapsible SERVERS·PROJECTS tree, "Choose a workspace" picker sheet,
    workspace-detail session listing
  • Server/Setup: realigned connect flow and hero to design
  • Settings: WORKSPACE/APP grouping, per-server notification routing, provider
    capability badges
  • Diff viewer: filename + change-count stats
  • Files explorer: type-colored glyphs

Test plan

  • ./gradlew :app:assembleDebug — installs and launches
  • ./gradlew :app:testDebugUnitTest — passing
  • ./scripts/check_theme_violations.sh — clean
  • Manual pass on device: chat composer, model picker, home tree, start-work
    picker, settings sections, diff viewer

Melloss and others added 18 commits July 23, 2026 13:03
- Composer: filled primary send button, bordered attach button, "▷ Message
  OpenCode…" placeholder to match design 05.
- Permission prompts (session-scoped + tool-scoped): warning left-border card,
  buttons reordered to allow-once / always / deny with typed outlined colors.
- User message: flat panel surface with a "you" label instead of primary tint.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Section labels now use monospace + letter-spacing (design 02 typography).
- Home header reads "Home" instead of "[ Home ]".

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Renders the design 05 `▓▓▓░ 62%` meter right-aligned in the model/agent bar,
computed from the newest assistant reply's token totals against the selected
model's context window. Tints warning/error as usage climbs.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Provider auth / run errors now render as a left-border card (accent strip +
monospace `provider auth error · 401` header + message), with an outlined
"update key" action wired to the existing provider-auth handler.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Full-width, bottom-anchored panel over the dialog scrim instead of a centered
box, with a monospace primary "Select Model" header. Search, provider filter
tabs, favorites/recent/other, [R]/[T] badges and star all unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Replaces the server filter-toggle cards with a collapsible per-server tree of
project rows, and restyles RECENT WORKSPACES rows to the design's
↺ + project-pill + server·recency layout. Server browsing is now expand/collapse
(no enable/disable filtering); search still returns flat workspace+session results.
Drops the now-unused filter-card composables, DISABLED_FILTER_ALPHA and
visualLabel helper.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Setup welcome: >_ primary hero glyph and "connect to a running opencode
  server" tagline in the secondary accent.
- Server connect: plain (de-bracketed) title and a "/" primary prefix on the
  URL field.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The design's most-repeated signatures were missing app-wide:
- Tab bar: panel background, active tab now carries a 2px primary top-border
  strip on a #1e1e1e fill, 30px height, monospace labels, close × on every
  closeable tab, and a divided monospace "+" new-tab button + bottom border.
- TuiSwitch: replaced the two-cell OFF/ON text toggle with the design's
  36x20 knob-slider (square knob slides right=success / left=muted).
- Status dots: SessionStatusDot and TuiStatusDot now render flat squares
  instead of circles, matching the design's square indicators everywhere.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- TuiTopBar now sits flush on the page background with a 0.5px bottom border
  (was a filled #1e1e1e bar) and a semibold title, matching the design.
- New TuiSectionHeader: monospace, letter-spaced, uppercase label on a
  full-width panel bar with optional trailing slot, for the design's section
  labels across settings/lists.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Adds TuiSectionHeader group bars, switches the row chevron to › in the border
tone, and adds the monospace version footer (P4OC vX · applicationId).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Replaces the Material file/folder vector icons with the design's glyph system:
▸ for folders (secondary blue), ■ for files in their type color (git status
still overrides), monospace file names, and a › open-chevron on files only.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Agents: replace the rounded Material Card with a flat element surface, a
  square agent-color status dot and a monospace @name + built-in pill.
- Add shape = RectangleShape to the remaining Material Card usages in Visual,
  Skills and Model-controls screens so nothing renders with rounded corners.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…n 12)

Connected bordered cells with a filled active cell (element bg + semibold
primary) replace the gapped FilterChip row for System/Light/Dark. Shared
component is reusable for tool-display / effort selectors.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Notification and Connection settings now use the shared monospace, letter-spaced
panel-bar section header instead of an inline accent title.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Matches the model picker: reasoning = [R] in info cyan, tools = [T] in accent,
replacing the "Reasoning"/"Tools" text chips.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
New NotificationRoutingMode (All/Mentions/Off) persisted per server endpointKey
in NotificationSettings/DataStore. NotificationEventObserver honors it via pure,
tested gates: awaiting-input (permission/question) delivers unless Off;
turn-complete delivers only under All. Absent entry defaults to All, so existing
behavior is unchanged. NotificationSettings screen gains a "Routing · per server"
section with a per-server All/Mentions/Off dropdown.

Granularity is per-server rather than per-project: the app has no persisted
per-workspace catalogue to enumerate in settings, and every notification event
carries its serverRef so the gate is exact.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
De-brackets the title to show the filename (semibold monospace) and adds
green/red addition/deletion counts in the top bar.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@Melloss
Melloss requested a review from theblazehen July 25, 2026 20:20
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