Skip to content

The logo at work: classic icon, thinking ring, busy pulse, watermark - #268

Merged
Randomname653 merged 2 commits into
mainfrom
claude/brand-stage2
Oct 29, 2026
Merged

Randomname653 merged 2 commits into
mainfrom
claude/brand-stage2

Conversation

@Randomname653

Copy link
Copy Markdown
Owner

Stage 2 of the new logo (#267).

What

  • Classic, per device. Settings → Account → This device → App icon: Modern / Classic (localStorage curatarr_icon). It switches the favicon (/icons/favicon-classic.svg) and the top-bar and login logos. Those are [data-brand-slot], swapped from <template id="brand-logo-classic">; the modern one is kept in memory to switch back. The tray has its own "Classic icon" menu item (data/tray.json) because it runs outside the browser. The PWA manifest stays fixed: an installed app keeps its icon.
  • Thinking ring. The chat's placeholder is the classic ring (<template id="brand-ring">). Its four segments brand-ring-1..4 light up clockwise, one per pillar of the judge, around a ruby diamond. It replaces the three dots and keeps role="img" aria-label="Thinking".
  • Busy pulse. body.model-busy makes the top-bar diamond pulse ruby. Two sources set it: a reply streaming in this tab (modelWorkStarted/Ended around the stream, ended in finally), and the server's model_busy in /api/processes/status. That is true while a curator call holds a lane's gate or enrichment_running is set, and it arrives with the existing 30 s poll.
  • Watermark. The wrap-up summary card (.wu-mark in the eyebrow) and every story slide (.wus-mark, bottom left) carry the mark. It is decorative: aria-hidden.
  • Reduced motion. The ring stands lit and the pulse is a steady ruby.

New module: frontend/js/brand.js. New token: --brand-spark, the classic mark's white diamond.

Tests

  • tests/test_brand.py, now 23 checks. New in this PR:
    • the templates, and the classic favicon twin
    • the ring numbered clockwise
    • the settings radio and its persistence
    • the slots switching
    • the busy wiring (chat, poll, server)
    • reduced motion
    • the watermarks
    • the tray switch round trip (saves, swaps the icon, and back)
  • tests/test_a11y_nav.py: the thinking placeholder is still a labelled img.
  • Previews were checked in the demo copy: the ring GIF, the pulse, classic in the top bar, and the story watermark.

🤖 Generated with Claude Code

Randomname653 and others added 2 commits October 29, 2026 20:43
Settings -> This device -> App icon (Modern / Classic) switches favicon
and the top-bar/login logos; the tray has its own "Classic icon" menu
switch. The chat's thinking placeholder is the classic ring, its four
segments lit clockwise around a ruby diamond. The top-bar diamond pulses
ruby while a model works (a streaming reply, or model_busy from
/api/processes/status). The wrap-up summary card and story slides carry
the mark. Reduced motion: lit ring, steady ruby.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
_renderLaneBadge stays a pure render (a test runs it on its own).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Randomname653
Randomname653 merged commit 9196004 into main Oct 29, 2026
9 checks passed
@Randomname653
Randomname653 deleted the claude/brand-stage2 branch October 29, 2026 19:56
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