feat(panel): editorial almanac visual redesign#255
Merged
Conversation
Repaint the default :root theme to a warm-ink editorial scheme; add a Newsreader serif token. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Serif display headings with small-caps labels; sections split by thin rules, not bordered cards. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Serif KPI numerals, small-caps headers, hairline separators across dashboard, tables and panels. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Load the editorial families in the document heads. Self-hosting woff2 via embed.FS is a follow-up. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Embed Newsreader, Geist and Geist Mono (latin) via embed.FS with @font-face; register woff2 MIME. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Panel and login heads stop hitting Google Fonts and the fontsource CDN; embedded faces suffice. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Almanac (warm editorial) becomes the :root default; Okabe-Ito returns as a selectable theme. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Align the panel design brief, components, screens, and architecture docs with the Almanac redesign. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Functional labels move from --text-3 to --text-2 so nav, table headers, and eyebrows pass WCAG AA. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The panel reset renders the Almanac default, not Colorblind. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Masthead headline, stat strip, Details disclosure, and a role-rail transcript for clearer scanning. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
No serif element uses weight 500 or 600; the woff2 files are removed and the faces dropped. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add formatUSD (thousands separators) and route profile token + spend totals through formatTokensCompact and formatUSD so big numbers read at a glance. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Group sessions by day with one quiet line each (agent color dot, message, subagent count, project, tokens, relative time) and collapse the filter wall behind a Filters disclosure. Replaces the wrapping-pill column table; rows are a single anchor that HTMX-swaps the side panel. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… pager Move the subagents list under the stats cluster and add a prev/next pager plus a back-to-parent link on subagent sessions, so children are easy to see and step through instead of buried at the end. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Each project row gets a sessions magnitude bar in place of the dead-space table. This commit's style.css changes also cap the main reading measure on wide screens, tame accent on data-table links across pages, and de-emphasize the Usage summary. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Fold Models and Tokens-&-cost into one model leaderboard (sessions, tokens, spend, bar). Humanize dashboard/insights totals, size the error-prone-model KPI as a label, render issues/delegator projects as non-link labels (projectLabel) to fix a nested-anchor break, condense chart legends to a horizontal strip, and drop the Across-the-day tokens line. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
almanac has been the default theme since 0f5821a; update the two stale data-theme assertions and the theme.go doc comment to match. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Return 204 for /favicon.ico so the request does not reset the pre-login CSRF token, and render the devices table and mobile sidepanel as labelled cards on narrow viewports. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Devbox auto-resolved the nodejs@24 plugin version. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Render raw model ids as compact human labels (claude-opus-4-8 -> "Opus 4.8", gpt-5.3-codex -> "GPT-5.3 Codex", trailing date stamps dropped). displayModel is display-only and registered as a template func; raw ids stay in links, filters, and map keys. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Heatmap fills the content width (one cell var scales every part); the hour-of-day chart grows to balance the Usage column; the Issues KPIs baseline-align so labels share a line; the KPI strip drops its bottom rule so the first card's top border is the only separator. Board, errors-per-model, and the error-prone-model KPI now read model names through displayModel (which also shrinks that KPI value); the orphaned cost-legend row type is removed. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Merge the stacked spend and tokens charts into one axis-mixed overlay, each series normalized to its own peak (real totals stay in the caption). Model share keeps the top-7 with humanized names so "other" shrinks; the punch card gains the heatmap's hover tooltip; and "Agentic session kinds" stacks under "By parent agent" so the delegation row is balanced. Across-the-day names are humanized too. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Replace the small donut and its redundant legend with one leaderboard: each profile row carries its token magnitude bar plus the estimated spend on the same line. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Align the sticky header's pills with the masthead, unify the byline to one size with mono time and model, render subagents as minimal feed rows instead of heavy cards, and give the subagents block a bottom rule so it no longer collides with the Details disclosure. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Collapse the trailing-comment spacing golangci-lint's gofumpt flagged. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Visual redesign of
prosa-panelin an Editorial Almanac direction: a warm-ink,printed-journal look that leans into the design brief's "airy, contemplative digital
notebook" intent with a distinctive typographic point of view. Chosen from five full
prototypes built in parallel and compared on real data.
The look
Geist for body, tables, and prose; Geist Mono for IDs, timestamps, costs, raw.
#15140f) with a single petrol accent(
#2f8f7f).serif KPI numerals; folio-style topbar; generous page margins.
Themes
The editorial layout and type are global, so every theme gets them; each named theme
stays a distinct color skin. Almanac (warm editorial) is the new default in
:root; the original Colorblind (Okabe-Ito) palette returns as a selectable[data-theme="colorblind"]theme so the colorblind-safe option is kept.Session detail (side panel)
Restructured from a chat-bubble layout into an editorial dossier:
project, time, and model.
small-caps role label per turn (user input on a subtle surface, assistant prose
bare, tool output as a monospace block), under a toolbar with search, turn count,
and collapse-all. All HTMX (subagent drilldown, raw pagination) and Alpine
(collapse, search) wiring is preserved.
Reviewer pass
Ran
prosa-panel-ui-reviewerand addressed the findings:panel labels, transcript meta) moved from
--text-3to--text-2so they passWCAG AA on the default theme.
backgrounddeclaration in the side-panel header.colorblinddefault-theme reference in the architecture doc.Remaining nits (pre-existing, tracked for a follow-on):
--text-3timestamps onsolarized-light and nord are low-contrast for tertiary text; a couple of
:focusvs:focus-visiblecleanups; one#ffffffliteral in acolor-mix.Refinement pass
Desktop polish and a light information-architecture pass on top of the visual
redesign:
message · subagent count · project · tokens · time), grouped under Today /
Yesterday / dated headers, with the filter wall collapsed behind a Filters
disclosure. Replaces the agent/kind pill table whose rows wrapped to uneven heights.
stats, and subagent sessions get a prev/next sibling pager plus a back-to-parent
link instead of a list buried at the end.
dead-space table is gone.
Models leaderboard (sessions · tokens · spend · bar); chart legends collapse to a
horizontal labels-only strip; and the Across-the-day card drops its duplicate
tokens line.
26.5b) and spend gains thousandsseparators (
$17,436.35); accent is reserved for links and hover instead of wholedata columns; the content reading measure is capped on wide screens; the
error-prone-model KPI renders as a label rather than a 44px headline; and a
nested-anchor break in the Issues / Top-delegators lists is fixed.
Also folds in the earlier responsive pass (favicon-safe dev-login, card layouts for
the devices table and the mobile side panel) and aligns the preference tests with the
almanac default.
Annotated polish pass
A second review pass driven by annotated screenshots, plus a global model-name cleanup:
displayModelnormalizer renders raw ids as compactlabels (
claude-opus-4-8→ "Opus 4.8",claude-haiku-4-5-20251001→ "Haiku 4.5",gpt-5.3-codex→ "GPT-5.3 Codex") across the model board, errors-per-model, theerror-prone-model KPI, model share, across-the-day, and the session byline. Display-only —
raw ids still drive links and filters.
balance the Usage column; the Issues KPIs baseline-align; and the KPI strip's doubled
hairline collapses to a single rule (shared fix across Home, Insights, and Profiles).
its own peak, real totals kept in the caption); model share widens to the top 7 so
"other" shrinks; the punch card gains the heatmap's hover tooltip; and "Agentic session
kinds" stacks under "By parent agent" to balance the row.
a token magnitude bar plus the est. spend on each profile row.
(mono time + model), subagents render as minimal feed rows instead of heavy cards, and
the subagents block no longer collides with the Details disclosure.
Scope
The stack is unchanged — server-rendered
html/template+ HTMX + Frappe charts, asingle binary with no build step, everything flowing through the existing CSS tokens.
The refinement pass does touch panel handlers and templates (feed grouping, subagent
sibling lookup, the project/model leaderboards, number formatting), but the server
API, OAuth/CSRF, and the chart library are untouched.
Fonts are self-hosted: Newsreader, Geist, and Geist Mono ship as latin-subset
woff2embedded viaembed.FSand served from the binary asfont/woff2. Noexternal font requests.
Preview
Pick Almanac in Settings to see the default editorial palette, then open a session
from the Sessions table to see the redesigned detail panel.
🤖 Generated with Claude Code