← Back to PRs

#16445: fix(ui): consistent visual styling across all views

by jasonkneen open 2026-02-14 19:13 View on GitHub →
app: web-ui stale size: M
## Summary Describe the problem and fix in 2–5 bullets: - Problem: Status chips across channel views had inconsistent widths and colors, making status hard to scan - Why it matters: Visual consistency improves usability and reduces cognitive load when managing multiple channels - What changed: Standardized chip widths to 80px, green chips for positive states (Connected/Enabled/YES) - What did NOT change (scope boundary): No functional changes, no API changes, only visual styling ## Change Type (select all) - [x] Bug fix - [ ] Feature - [x] Refactor - [ ] Docs - [ ] Security hardening - [ ] Chore/infra ## Scope (select all touched areas) - [ ] Gateway / orchestration - [ ] Skills / tool execution - [ ] Auth / tokens - [ ] Memory / storage - [ ] Integrations - [ ] API / contracts - [x] UI / DX - [ ] CI/CD / infra ## Linked Issue/PR - Closes: None - Related: None ## User-visible / Behavior Changes - All status chips now use consistent 80px width across all views - Positive states (Connected/Enabled/YES) now use green color - Neutral/inactive states use gray - Error/warning states use red/orange (unchanged) - Affected views: all channel integrations (Discord, Telegram, Signal, WhatsApp, Slack, iMessage, Google Chat, Nostr), Overview dashboard, Agent panels ## Security Impact (required) - New permissions/capabilities? No - Secrets/tokens handling changed? No - New/changed network calls? No - Command/tool execution surface changed? No - Data access scope changed? No ## Repro + Verification ### Environment - OS: macOS - Runtime: Node v22 - Model/provider: n/a (UI only) ### Steps 1. Open Control UI 2. Navigate to Channels view 3. Observe status chips for each channel integration 4. Navigate to Overview dashboard 5. Check Agent panels status indicators 6. Verify all chips are same width and colors are semantic ## Evidence - Screenshots to follow — testing on dev gateway ## Human Verification (required) - Verified scenarios: - Status chips display correctly across all channel types - Green chips appear for Connected/Enabled states - Chip widths are consistent (80px) - Text doesn't overflow or get cut off - Edge cases checked: - Long status text handles truncation - Different viewport widths maintain layout - What you did not verify: - High contrast mode / accessibility color contrast ratios - Color blindness simulation ## Compatibility / Migration - Backward compatible? Yes - Config/env changes? No - Migration needed? No ## Failure Recovery - How to revert: revert the commits - Known bad symptoms: Chips misaligned, wrong colors, layout broken ## Risks and Mitigations - Risk: Color change might confuse existing users expecting old colors - Mitigation: Green for positive is standard UI convention; change is intuitive - Risk: Fixed width might not work well with future longer status labels - Mitigation: 80px tested with current labels; can adjust CSS if needed - Risk: CSS changes might affect custom stylesheets - Mitigation: Used scoped classes and CSS variables <!-- greptile_comment --> <h3>Greptile Summary</h3> This PR standardizes status chip styling across channel views with fixed widths and semantic colors (green for positive states). However, it introduces a **critical bug** that will prevent compilation. **Key changes:** - Added `.log-level.ok` CSS class for green positive-state chips - Created `statusChip()` helper in `channels.shared.ts` for consistent rendering - Applied status chips across Google Chat, iMessage, Nostr, and Agent panels - Refactored card layouts with consistent padding and borders **Issues found:** - **Critical**: `overview.ts` imports non-existent `AppMode` type from `navigation.ts` - **Inconsistency**: Cron status uses blue (`"info"`) for enabled state instead of green (`"ok"`) - **Previous comments unaddressed**: Inline width styles (54px) not extracted to CSS classes - **Discrepancy**: PR description claims 80px width, but code uses 54px **Scope concern:** `overview.ts` includes significant functional changes beyond visual styling (Basic/Advanced mode logic, removed `isTrustedProxy` handling). The PR description states "No functional changes" but these appear to alter behavior. <h3>Confidence Score: 0/5</h3> - This PR cannot be merged due to a critical TypeScript compilation error - The missing `AppMode` type will cause immediate build failure. Additionally, the scope expansion in `overview.ts` contradicts the PR description's claim of "No functional changes" - `ui/src/ui/views/overview.ts` requires critical fixes before merge - missing type import will break compilation <sub>Last reviewed commit: ce56b0a</sub> <!-- greptile_other_comments_section --> <!-- /greptile_comment -->

Most Similar PRs