Skip to content

DebateOwl owls at intensity B: the logo plus one owl per key screen - #232

Merged
Programcode merged 3 commits into
design/debateowl-restylefrom
design/debateowl-owls
Oct 24, 2026
Merged

Programcode merged 3 commits into
design/debateowl-restylefrom
design/debateowl-owls

Conversation

@Programcode

@Programcode Programcode commented Oct 24, 2026 •

Copy link
Copy Markdown
Owner

What this is

This adds owl intensity B from ~/debateowl-owl-assets (decisions.md item 11), which is the logo plus one owl on each key screen. It stacks on the DebateOwl restyle (#228, which now includes #229) and targets design/debateowl-restyle, not main.

This is a draft. Nothing is merged or deployed. No feature, route or label changes; the only new strings are alt text for the coach and opponent avatars.

Placements

  • App logo: the owl mark, unchanged from DebateOwl visual restyle: tokens, fonts, tactile buttons and the owl #228. public/owl-mark.svg uses the same c-icon art as mark.svg.
  • Home with no current debate: pointing, mirrored so it points across the card at Start debate.
  • Generate while it writes: thinking, on the run status and the live-draft avatar.
  • Generate after a failed run: surprised. The "Ready to Generate" owl under the error panel switches to surprised, and the panel keeps its alert icon.
  • History when empty: sleepy, on every empty tab and on the no-debate list.
  • Library, No Sources Yet: reading.
  • 404: surprised, already there in DebateOwl visual restyle: tokens, fonts, tactile buttons and the owl #228.
  • Sparring opponent: arguing, on the speech avatars, the "opponent is thinking" owl, the setup card and the scorecard.
  • Ask coach avatar: coach, in the header, on replies and on the waiting line.
  • Debate Timer header: timekeeper, beside the title.
  • Case Saved: celebrating, beside the mint check in the toast.
  • Won ballot: celebrating, already there in DebateOwl visual restyle: tokens, fonts, tactile buttons and the owl #228.

Tool icons are untouched. There's no owl pattern and no corner owls.

The SVGs

Every owl is now a hand-written SVG; the 26 glossy WebP cutouts are deleted. The five existing poses are the c-trace files. The six new ones were traced from poses/new-*.png in the same style. They share the body, glasses, beak, feet and palette, and only the wings, eyes and prop change.

  • thinking (new), 14.1 kB
  • reading (new), 15.0 kB
  • timekeeper (new), 15.1 kB
  • arguing (new), 15.6 kB
  • coach (new), 15.3 kB
  • sleepy (new), 13.4 kB
  • point, idea, skeptical, surprised and celebrating (c-trace), 13.0 to 21.4 kB each

All 11 poses total 164 kB. OwlAvatar zooms the full pose onto the head instead of shipping bust files. The offline precache now lists the six poses the offline pages show (point, reading, sleepy, timekeeper, idea, surprised); npm run test:sw passes with them.

Every pose on light and dark

Accessibility and motion

  • Owls beside text are decorative (aria-hidden).
  • The coach and opponent avatars are role="img" with alt text in English, Hungarian and Spanish, "The owl, your debate coach" / "A bagoly, a vitaedződ" / "El búho, tu coach de debate", and "The owl, your AI opponent" / "A bagoly, az MI-ellenfeled" / "El búho, tu oponente de IA". Spanish is there because the catalogs have to match.
  • The Ask "Working…" avatar stays decorative because it sits inside an aria-live status, where a label would be read out on every update.
  • No new motion. The existing pose crossfade and bob already follow reduced motion.

Screenshots

Each image shows before on top and after below, with light on the left and dark on the right. Every placement was captured at 375, 430, 768x1024, 1024x768 and 1440x900 in both themes (220 shots), on the local verify stack with the fake provider. The full set, the raw captures and per-shot metrics are on the owls-screenshots branch. Delete that branch when this PR closes.

Checks on every shot: no horizontal overflow, no owl box leaving the viewport. Cumulative layout shift matches before and after on every screen (max 0.039, all from existing page behaviour). One run showed Sparring at 1440 going from 0.011 to 0.018; a rerun gave 0.011 again, the same as before. Every owl box has a fixed width and height, so the images can't shift layout as they load.

App logo

App logo at 1440: before and after

375 px phone, and the other widths

App logo at 375: before and after

Other widths: 430 · 768x1024 · 1024x768

Home, Start debate

Home, Start debate at 1440: before and after

375 px phone, and the other widths

Home, Start debate at 375: before and after

Other widths: 430 · 768x1024 · 1024x768

Generate, writing

Generate, writing at 1440: before and after

375 px phone, and the other widths

Generate, writing at 375: before and after

Other widths: 430 · 768x1024 · 1024x768

Generate, failed

Generate, failed at 1440: before and after

375 px phone, and the other widths

Generate, failed at 375: before and after

Other widths: 430 · 768x1024 · 1024x768

History, empty

History, empty at 1440: before and after

375 px phone, and the other widths

History, empty at 375: before and after

Other widths: 430 · 768x1024 · 1024x768

Library, No Sources Yet

Library, No Sources Yet at 1440: before and after

375 px phone, and the other widths

Library, No Sources Yet at 375: before and after

Other widths: 430 · 768x1024 · 1024x768

404

404 at 1440: before and after

375 px phone, and the other widths

404 at 375: before and after

Other widths: 430 · 768x1024 · 1024x768

Sparring opponent

Sparring opponent at 1440: before and after

375 px phone, and the other widths

Sparring opponent at 375: before and after

Other widths: 430 · 768x1024 · 1024x768

Won ballot

Won ballot at 1440: before and after

375 px phone, and the other widths

Won ballot at 375: before and after

Other widths: 430 · 768x1024 · 1024x768

Ask coach

Ask coach at 1440: before and after

375 px phone, and the other widths

Ask coach at 375: before and after

Other widths: 430 · 768x1024 · 1024x768

Debate Timer

Debate Timer at 1440: before and after

375 px phone, and the other widths

Debate Timer at 375: before and after

Other widths: 430 · 768x1024 · 1024x768

Case Saved

Case Saved at 1440: before and after

375 px phone, and the other widths

Case Saved at 375: before and after

Other widths: 430 · 768x1024 · 1024x768

Checks

  • npm run verify passes at 42cb530 (the last commit after it only changes one Spanish alt string; the i18n tests pass on it). That covers docs, lint (with knip and repo rules), typecheck, 651 unit tests, 30 collaboration, 470 edge, build, the offline service-worker test, and 47 smoke e2e.
  • Full npm run test:e2e on desktop and mobile Chromium: 278 passed, 5 skipped, 6 failed. The six failures are the three known failures that also fail on main, once per project: loading-performance.spec.ts:63, navigation-performance.spec.ts:344, search-quality.spec.ts:7. Five mobile tests needed a retry during the 12-minute run; all five pass with retries off when run again alone.
  • Recipes driven on the verify stack, desktop and mobile Chromium: practice (Sparring and Crossfire), case-generation, ai-tools (Ask), library and current-debate all pass: 32 tests per project, 64 in total. The recipes weren't changed; nothing they select on moved.
  • GitHub Actions is billing-blocked, so CI shows red without running. These are local results, not a CI pass.

Not settled

  • Owls outside the list. DebateOwl visual restyle: tokens, fonts, tactile buttons and the owl #228 already had owls in places that aren't on the B list: the empty states and loaders of the other tools (point and idea), the landing hero, the Ask empty state, the route error page, Library's "No matching sources" search miss, and the Sparring loss verdict. I left them as they were, only now drawn from the SVGs. If B should mean only the listed screens, they come out in a follow-up.
  • Generation failed. The owl is the one already under the error panel, not a new owl inside the panel. At 375 px the panel's text column is about 150 px wide and an owl there would squeeze it further.
  • Logo. The header keeps DebateOwl visual restyle: tokens, fonts, tactile buttons and the owl #228's rounded-square owl tile. mark.svg in the assets is the round badge version of the same art; I didn't swap the shape.
  • Case Saved. The toast changed from the default kind to success so its check is mint, as decisions.md asks for success.
  • The traced poses simplify the raster art in places, the way the c-trace set does: fewer feather tips, simpler hands, and a small gap under the coach's hip wing.

🤖 Generated with Claude Code

Programcode and others added 2 commits October 24, 2026 18:32
The five existing poses come from the c-trace set and six new ones are
hand-traced in the same style: thinking, reading, timekeeper, arguing,
coach and sleepy. Each file is 13 to 21 kB and replaces the 26 glossy
WebP cutouts. The avatar crops the full pose with CSS instead of
shipping separate bust files. The offline precache picks up the poses
that the offline pages show.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Home points at Start debate. Generate thinks while it writes and looks
surprised when the run fails. History's empty states sleep, the Library
reads, and the Debate Timer title holds a stopwatch. The Sparring
opponent argues, and the Ask coach gives a thumbs-up. Case Saved
celebrates beside its check. The 404 and the won ballot already had the
right pose.

Owls beside text stay decorative. The coach and opponent avatars get alt
text in English, Hungarian and Spanish. No other copy changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Oct 24, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

Run configuration

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Note

🎁 Summarized by CodeRabbit Free

Your organization is on the Free plan. CodeRabbit will generate a high-level summary and a walkthrough for each pull request. For a comprehensive line-by-line review, please upgrade your subscription to CodeRabbit Essentials by visiting https://app.coderabbit.ai/settings/billing.

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

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Programcode
Programcode marked this pull request as ready for review October 24, 2026 19:06
Copilot AI balanced review requested due to automatic review settings October 24, 2026 19:06
@Programcode
Programcode merged commit 613b2c7 into design/debateowl-restyle Oct 24, 2026
3 of 10 checks passed

Copilot AI 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.

Copilot was unable to review this pull request because the user who requested the review has insufficient remaining quota.

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.

2 participants