Skip to content

feat(dashboard): relocate local-source pills to the tabbar with branded host icons - #121

Merged
pacphi merged 1 commit into
mainfrom
feat/usage-source-pills-branded-icons
Aug 6, 2026
Merged

pacphi merged 1 commit into
mainfrom
feat/usage-source-pills-branded-icons

Conversation

@pacphi

@pacphi pacphi commented Aug 6, 2026

Copy link
Copy Markdown
Owner

Summary

  • Relocated the local-source health indicator from inside the Usage panel into the sticky <nav class="tabbar">, right-aligned to the window edge — same line as Overview/Usage/Observability, visible across tab switches once Usage data has loaded once.
  • Icon over text label — each pill now leads with the same branded host mark used in the Observability Live view (live/client.mjs's hostIcon(), reused verbatim: Anthropic asterisk, OpenAI Blossom, OpenCode square) instead of a "Claude"/"Codex"/"OpenCode" text label.
  • Restored the circular badge background (var(--bg) fill + 1px border) from the Live view — without it the marks had no contrast to read against. Landed on 32px badge / 20px glyph after two smaller passes proved illegible against real screenshots.
  • Pill redesign — solid var(--panel-2) background matching the segmented tab control (no outline; state shown via status-text color/weight), divider between icon and status dropped (padding alone reads as enough separation), and the static "local sources" text prefix dropped.

Iterated through several rounds against live screenshots of the running dashboard before landing here — see the commit body for the full size/contrast progression.

Test plan

  • pnpm run check (typecheck + lint + markdown lint + build + full test suite) green after every revision
  • Verified against a live local instance via Lightpanda: served-bundle parses (new Function(JS) gate), DOM structure inspected directly, zero console errors
  • CI green on this PR

🤖 Generated with Claude Code

…ed host icons

The local-source health pills (previously three text chips, "Claude: ok" /
"Codex: transcripts: ok · ledger: ok" / "OpenCode: ok") lived inside the Usage
panel content, only visible on that one tab, and read as a redundant
claude/codex/opencode text label sitting next to an already-labeled status
word.

* Relocated to the sticky tabbar, right-aligned
  - Moved #u-source-health out of panel-usage into <nav class="tabbar">,
    right-aligned via margin-left:auto in the flex row — same line as
    Overview/Usage/Observability, at the window edge.
  - It now persists across tab switches once Usage data has loaded once,
    instead of disappearing outside the Usage panel.

* Icon over text label, matching the Observability Live view
  - Added sourceHostIcon() to client.mjs, reusing the exact brand marks from
    live/client.mjs's hostIcon() (Anthropic asterisk, OpenAI Blossom, OpenCode
    square) — a host now reads as the same glyph everywhere in the dashboard.
  - Restored the circular badge treatment from the Live view (var(--bg) fill,
    1px border, 32px badge / 20px glyph) rather than a bare floating icon —
    without a background the marks had nothing to contrast against and were
    unreadable at any size tried.
  - Went through three size passes against the user's own screenshots before
    landing here: 18/11 (icons invisible) -> 24/19 flat, no badge (still too
    small/low-contrast) -> 32/20 with the restored badge (confirmed legible).

* Pill redesign
  - Solid var(--panel-2) background matching the segmented tab control's own
    look, no border — state shown via status-text color/weight (green/amber/
    dim) rather than a colored outline, consistent with how the active tab
    itself is indicated.
  - Dropped the vertical divider between icon and status: icon/status padding
    alone (10px+10px) already reads as enough separation without it.
  - Dropped the static "local sources" text prefix — three branded icons need
    no group label.
  - Codex's combined transcripts+ledger detail (two sourceHealth fields
    folded into one pill, per the prior PR) moved fully into the status
    side's title tooltip; the visible pill just shows the worse status word.

Verified with `pnpm run check` after every pass (typecheck/lint/build/full
test suite green throughout) and against the running local dashboard via
Lightpanda (served-bundle parse gate, live DOM inspection, zero console
errors) before each round of user feedback.
@pacphi
pacphi merged commit b9ffc9a into main Aug 6, 2026
11 checks passed
@pacphi
pacphi deleted the feat/usage-source-pills-branded-icons branch August 6, 2026 09:13
pacphi added a commit that referenced this pull request Aug 6, 2026
…122)

#121 relocated the local-source health indicator from text chips inside the
Usage panel to branded icon pills in the dashboard's persistent tabbar, but
shipped with no doc updates — three spots still described the old design
(text chips, "above every Usage view", colored-outline styling), which would
mislead anyone reading them after the fact rather than looking at the code.

* USAGE-SCORECARD-METRICS.md: describes the new tabbar placement, the
  branded-icon-over-text-label design, and the icon-vs-status tooltip split
  (icon hover = what it monitors, status hover = full per-field detail).
* TROUBLESHOOTING.md: "Inspect the local-source chips at the top of the
  dashboard Usage area" -> "Inspect the branded host-icon pills in the
  dashboard's tabbar (top of every view, right-aligned)".
* ADR-0023 §7: rewritten for the pill/tabbar design; added a paragraph
  documenting the icon choice (reused verbatim from the Observability Live
  view's hostIcon()) and the size/contrast iteration that got there — two
  smaller, badge-less passes proved illegible against live screenshots
  before landing on the Live view's own 32px badge/20px glyph scale. Update
  note extended to cover this revision. One stray "chip" -> "pill" in
  Consequences.

Verified: doc-citations test still passes (no file:line citations moved),
markdown lint clean, `pnpm run check` green.
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