Skip to content

feat(companion/ui): update ui design specification - #148

Merged
tkhwang merged 2 commits into
mainfrom
feat/ui-update-0720
Jul 22, 2026
Merged

feat(companion/ui): update ui design specification#148
tkhwang merged 2 commits into
mainfrom
feat/ui-update-0720

Conversation

@tkhwang

@tkhwang tkhwang commented Jul 22, 2026

Copy link
Copy Markdown
Owner
  • Refresh design document with latest UI/UX decisions
  • Update last refreshed date to 2026-07-23
  • Incorporate Brainless component registry sources and review dates
  • Refine brand "avoid" list to include soft-elevation card stacks and mixed UI typography
  • Clarify product goal to let users choose Claude Code or Codex CLI experience
  • Update primary navigation description to "inset floating terminal tab bar"
  • Detail core screens for Activity report and Settings preferences
  • Refine content hierarchy for global inventory and screen-reader status
  • Update visual language for color, typography, spacing, shape, and elevation
  • Specify existing and new/changed components based on Brainless reference

This update reflects the current design direction, emphasizing a terminal-native aesthetic and integrating Brainless components for a consistent user experience. It clarifies the visual language and component usage across the application.

Summary by CodeRabbit

  • New Features

    • Added Claude Code and Codex fixed-dark themes.
    • Introduced a shared agent header, terminal-style panels, prompt markers, status tokens, and floating navigation tabs.
    • Added theme selection in Settings with legacy preference migration.
    • Improved responsive layouts for narrow screens.
  • Style

    • Refreshed task, activity calendar, settings, and action controls with flatter terminal-inspired visuals.
    • Improved theme-aware calendar colors, focus states, spacing, and text wrapping.
  • Tests

    • Expanded coverage for themes, navigation, shell components, settings, preferences, calendar styling, and responsive behavior.

- Refresh design document with latest UI/UX decisions
- Update last refreshed date to 2026-07-23
- Incorporate Brainless component registry sources and review dates
- Refine brand "avoid" list to include soft-elevation card stacks and mixed UI typography
- Clarify product goal to let users choose Claude Code or Codex CLI experience
- Update primary navigation description to "inset floating terminal tab bar"
- Detail core screens for Activity report and Settings preferences
- Refine content hierarchy for global inventory and screen-reader status
- Update visual language for color, typography, spacing, shape, and elevation
- Specify existing and new/changed components based on Brainless reference

This update reflects the current design direction, emphasizing a terminal-native
aesthetic and integrating Brainless components for a consistent user experience.
It clarifies the visual language and component usage across the application.
@coderabbitai

coderabbitai Bot commented Jul 22, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@tkhwang, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 9 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: e809d53c-fb9d-42dc-9148-5b628285a483

📥 Commits

Reviewing files that changed from the base of the PR and between ed0cdfe and fcc068b.

📒 Files selected for processing (8)
  • DESIGN.md
  • apps/companion/src/styles/base.css
  • apps/companion/src/ui/AgentHeader.tsx
  • apps/companion/src/ui/SettingsPanel.tsx
  • apps/companion/src/ui/TerminalPanel.tsx
  • apps/companion/tests/agent-primitives.test.tsx
  • apps/companion/tests/settings-panel.test.tsx
  • docs/plans/0045-companion-agent-shell-claude-codex-themes.md
📝 Walkthrough

Walkthrough

The Companion app now uses fixed-dark Claude and Codex themes, a shared agent header and floating tab bar, theme-aware terminal task primitives, migrated preference storage, updated Settings and Activity views, and expanded UI/CSS contract tests.

Changes

Companion agent shell migration

Layer / File(s) Summary
Fixed theme preference contract
apps/companion/src/application/preferences.ts, apps/companion/src/application/themePreferences.ts, apps/companion/tests/preferences.test.ts
Preferences now use { font, theme }, support legacy migration, default to Claude, and persist only the consolidated theme value.
Shared agent shell composition
apps/companion/src/App.tsx, apps/companion/src/ui/Agent*.tsx, apps/companion/src/ui/TerminalPanel.tsx, apps/companion/src/styles/agent-shell.css, apps/companion/src/styles/themes.css
The app uses shared AgentHeader and AgentTabs components, fixed Claude/Codex tokens, floating navigation, and accessible terminal-oriented primitives.
Theme-aware Main task rendering
apps/companion/src/ui/ProjectGroup.tsx, apps/companion/src/ui/TaskRow.tsx, apps/companion/src/styles/task-*.css, apps/companion/tests/task-row.test.tsx
Project groups and tasks render theme-specific terminal panels, prompt markers, status tokens, progress details, and simplified action buttons.
Settings theme picker
apps/companion/src/ui/SettingsPanel.tsx, apps/companion/src/ui/SettingsView.tsx, apps/companion/src/ui/AgentThemePicker.tsx, apps/companion/src/styles/settings.css, apps/companion/tests/settings-panel.test.tsx
Settings replaces system/theme-mode controls with Claude and Codex selection inside terminal panels.
Activity styling and contracts
apps/companion/src/activity/activity-calendar.css, apps/companion/src/styles/chrome.css, apps/companion/tests/activity-calendar.test.tsx, DESIGN.md
Activity surfaces use theme calendar tokens, compact radii, updated selection emphasis, and revised fixed-dark shell contracts.

Estimated code review effort: 4 (Complex) | ~60 minutes

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant CompanionApp
  participant AgentTabs
  participant SettingsPanel
  participant PreferenceStore

  User->>AgentTabs: Select Settings
  AgentTabs->>CompanionApp: Emit settings view
  CompanionApp->>SettingsPanel: Render current theme
  User->>SettingsPanel: Select Claude or Codex
  SettingsPanel->>CompanionApp: Emit theme preference update
  CompanionApp->>PreferenceStore: Persist font and theme
Loading

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately reflects the core design-spec update and is related to the broader UI changeset.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/ui-update-0720

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: ed0cdfe53e

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread docs/plans/0045-companion-agent-shell-claude-codex-themes.md Outdated

@coderabbitai coderabbitai 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.

Actionable comments posted: 7

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
apps/companion/tests/activity-calendar.test.tsx (1)

530-543: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Scope the CSS assertions to each theme and calendar selector.

The current checks can pass if --cal-bg-1 exists in only one theme, or if var(--cal-*) appears somewhere unrelated in the stylesheet. Assert both main[data-theme="claude"] and main[data-theme="codex"], and verify the .cal-chip/.cal-session mappings directly.

Also applies to: 554-569

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/companion/tests/activity-calendar.test.tsx` around lines 530 - 543,
Update the test around the theme and calendar fallback assertions to scope
checks to both main[data-theme="claude"] and main[data-theme="codex"]. Verify
each theme defines --cal-bg-1 and --cal-bg-2, and assert the .cal-chip and
.cal-session data-color mappings directly rather than matching unrelated
stylesheet content; apply the same scoping to the assertions in the additional
referenced block.
🧹 Nitpick comments (3)
apps/companion/tests/app-shell.test.tsx (1)

143-152: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Test doesn't actually verify the status stays visually hidden.

The title says "without a visible chip" but the assertions only check .agent-controls flex layout, not that .toolbar-status-sr is visually hidden (e.g. clip/sr-only rule). Consider adding an assertion against the .toolbar-status-sr rule itself so a future regression that makes the chip visible would be caught.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/companion/tests/app-shell.test.tsx` around lines 143 - 152, The test
named “keeps agent status available to assistive tech without a visible chip”
only verifies agent-controls layout. Extend it to inspect the
`.toolbar-status-sr` CSS rule and assert its screen-reader-only visual-hiding
properties, while preserving the existing flex-layout assertions.
apps/companion/src/styles/chrome.css (1)

13-22: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Hardcoded border-radius: 6px replaces the --radius token.

This drops the shared radius variable in favor of a magic number, compounding with the hardcoded 4px/6px values already scattered in agent-shell.css. Consider reintroducing a shared --radius custom property referenced from all component stylesheets to keep shape consistent as the design system evolves.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/companion/src/styles/chrome.css` around lines 13 - 22, Replace the
hardcoded 6px border radius in the button/select rule with the shared --radius
custom property, reusing the existing design-token definition rather than
introducing another value.
apps/companion/src/styles/themes.css (1)

15-16: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

claude's --current-step-bg duplicates --emphasis-soft's literal value instead of referencing it.

codex references var(--emphasis-soft) for the same property (line 68); claude could do the same for consistency.

 main[data-theme="claude"] {
 	...
 	--emphasis-soft: rgba(192, 202, 245, 0.08);
 	--task-selected-summary-bg: rgba(192, 202, 245, 0.06);
 	...
-	--current-step-bg: rgba(192, 202, 245, 0.08);
+	--current-step-bg: var(--emphasis-soft);

Also applies to: 27-27

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/companion/src/styles/themes.css` around lines 15 - 16, Update the claude
theme’s --current-step-bg declaration to reference var(--emphasis-soft) instead
of duplicating its rgba literal value, matching the existing codex theme
declaration and preserving the same appearance.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@apps/companion/src/styles/base.css`:
- Around line 4-6: Remove unnecessary quotation marks from the font-family names
SFMono-Regular, Menlo, Monaco, and Consolas in the base font stack, and apply
the same unquoted formatting to the duplicated --app-font-family declaration in
main. Keep Liberation Mono quoted because it contains whitespace.
- Around line 44-47: Reformat the padding-bottom calc expression in the base
stylesheet so the “+” operator starts the continued line rather than ending the
previous line, resolving the Stylelint formatting error without changing the
calculation.

In `@apps/companion/src/ui/AgentHeader.tsx`:
- Around line 12-18: Update AgentInventory to conditionally render singular or
plural labels for summary.projectCount and summary.taskCount, matching the
branching behavior used by ProjectGroup. Ensure counts of 1 display “project”
and “task”, while all other counts retain “projects” and “tasks”.

In `@DESIGN.md`:
- Line 106: Update the layout description in DESIGN.md to hyphenate “one-third”
in the phrase describing IDE, Terminal, and Finder occupying one-third of the
row; leave the surrounding wording unchanged.
- Line 66: Update the Codex secondary-text specification in DESIGN.md to use
`#949494`, matching the Codex --muted token defined in themes.css; keep the
existing theme implementation unchanged so the design contract and CSS share one
value.
- Line 95: Update the CSS architecture documentation around the token/component
ownership statement and the later style.css statement so they describe one
consistent ownership model. Clarify that style.css is the import manifest while
the imported files own the custom properties and component classes, or revise
both references to match the actual implementation.

In `@docs/plans/0045-companion-agent-shell-claude-codex-themes.md`:
- Line 788: Correct or defer all future-dated completion evidence in
docs/plans/0045-companion-agent-shell-claude-codex-themes.md: lines 788
(full-proof), 210 (system-mode cleanup), 800 (residue check), 821 (native visual
QA), 827 (migration proof), and 833 (archive readiness). Replace July 23, 2026
with the actual completion date where verified, or mark each entry pending until
its checks occur.

---

Outside diff comments:
In `@apps/companion/tests/activity-calendar.test.tsx`:
- Around line 530-543: Update the test around the theme and calendar fallback
assertions to scope checks to both main[data-theme="claude"] and
main[data-theme="codex"]. Verify each theme defines --cal-bg-1 and --cal-bg-2,
and assert the .cal-chip and .cal-session data-color mappings directly rather
than matching unrelated stylesheet content; apply the same scoping to the
assertions in the additional referenced block.

---

Nitpick comments:
In `@apps/companion/src/styles/chrome.css`:
- Around line 13-22: Replace the hardcoded 6px border radius in the
button/select rule with the shared --radius custom property, reusing the
existing design-token definition rather than introducing another value.

In `@apps/companion/src/styles/themes.css`:
- Around line 15-16: Update the claude theme’s --current-step-bg declaration to
reference var(--emphasis-soft) instead of duplicating its rgba literal value,
matching the existing codex theme declaration and preserving the same
appearance.

In `@apps/companion/tests/app-shell.test.tsx`:
- Around line 143-152: The test named “keeps agent status available to assistive
tech without a visible chip” only verifies agent-controls layout. Extend it to
inspect the `.toolbar-status-sr` CSS rule and assert its screen-reader-only
visual-hiding properties, while preserving the existing flex-layout assertions.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 6269c162-08fb-4f5f-aeba-a62ef38dc528

📥 Commits

Reviewing files that changed from the base of the PR and between b4546f6 and ed0cdfe.

📒 Files selected for processing (39)
  • .gitignore
  • DESIGN.md
  • apps/companion/src/App.tsx
  • apps/companion/src/activity/activity-calendar.css
  • apps/companion/src/application/preferences.ts
  • apps/companion/src/application/systemThemeMode.ts
  • apps/companion/src/application/themePreferences.ts
  • apps/companion/src/style.css
  • apps/companion/src/styles/agent-shell.css
  • apps/companion/src/styles/base.css
  • apps/companion/src/styles/chrome.css
  • apps/companion/src/styles/settings.css
  • apps/companion/src/styles/status-groups.css
  • apps/companion/src/styles/task-actions.css
  • apps/companion/src/styles/task-details.css
  • apps/companion/src/styles/themes.css
  • apps/companion/src/ui/AgentHeader.tsx
  • apps/companion/src/ui/AgentTabs.tsx
  • apps/companion/src/ui/AgentThemePicker.tsx
  • apps/companion/src/ui/AppSummary.tsx
  • apps/companion/src/ui/AppToolbar.tsx
  • apps/companion/src/ui/ProjectGroup.tsx
  • apps/companion/src/ui/PromptLine.tsx
  • apps/companion/src/ui/SettingsPanel.tsx
  • apps/companion/src/ui/SettingsView.tsx
  • apps/companion/src/ui/StatusToken.tsx
  • apps/companion/src/ui/TaskActionIcon.tsx
  • apps/companion/src/ui/TaskRow.tsx
  • apps/companion/src/ui/TerminalPanel.tsx
  • apps/companion/src/ui/ViewNav.tsx
  • apps/companion/tests/activity-calendar.test.tsx
  • apps/companion/tests/agent-primitives.test.tsx
  • apps/companion/tests/agent-tabs.test.tsx
  • apps/companion/tests/app-shell.test.tsx
  • apps/companion/tests/preferences.test.ts
  • apps/companion/tests/project-group.test.tsx
  • apps/companion/tests/settings-panel.test.tsx
  • apps/companion/tests/task-row.test.tsx
  • docs/plans/0045-companion-agent-shell-claude-codex-themes.md
💤 Files with no reviewable changes (5)
  • apps/companion/src/ui/AppToolbar.tsx
  • apps/companion/src/application/systemThemeMode.ts
  • apps/companion/src/ui/TaskActionIcon.tsx
  • apps/companion/src/ui/ViewNav.tsx
  • apps/companion/src/ui/AppSummary.tsx

Comment thread apps/companion/src/styles/base.css Outdated
Comment thread apps/companion/src/styles/base.css
Comment thread apps/companion/src/ui/AgentHeader.tsx
Comment thread DESIGN.md Outdated
Comment thread DESIGN.md
Comment thread DESIGN.md Outdated
Comment thread docs/plans/0045-companion-agent-shell-claude-codex-themes.md Outdated
- Standardize Settings panel sections to use `fieldset`/`legend` anatomy
- Correct pluralization for project and task counts in AgentHeader
- Update font family declarations in `base.css` to remove quotes
- Adjust `padding-bottom` calculation in `base.css` for clarity
- Update secondary text color for Codex in `DESIGN.md`
- Clarify layout adaptation description in `DESIGN.md`

This commit refines the UI for consistency and readability, ensuring
that the Settings panel adheres to a standardized structure and
improving the accuracy of text displayed in the AgentHeader.
Font declarations are cleaned up, and minor documentation updates
are included for better clarity.
@tkhwang
tkhwang merged commit 3cdb018 into main Jul 22, 2026
4 checks passed
@tkhwang
tkhwang deleted the feat/ui-update-0720 branch July 22, 2026 23:08
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