Skip to content

Port the mascot design: expressions, scan acts and finish reactions - #391

Merged
faratech merged 3 commits into
mainfrom
mascot-in-app
Oct 31, 2026
Merged

faratech merged 3 commits into
mainfrom
mascot-in-app

Conversation

@faratech

Copy link
Copy Markdown
Owner

Summary

  • Expressions: 15 faces (pupils with highlights, brows, mouths, cheeks). The idle face is a gentle smile; it used to be a downturned curve, which made him read as grumpy. The BSOD AI chat uses the same faces for its states.
  • Scan acts: each stage has a pool of acts (typing at the laptop, coffee, reading, paper plane, fishing, dancing, juggling, stacking blocks), one picked per scan and never the previous scan's. A stage running twice as long as usual brings the nap.
  • Finish reactions: chosen from how the report came out (utils/mascotReaction.ts): a third-party .sys is "found the driver", memory and hardware stop codes, a large kernel dump with a culprit, a recovered live dump is "all good". A forced crash (power button held, hotkey) and "no clear culprit" are "not sure", consistent with Tell the AI and the report that a power-button-hold crash does not document its cause #390.
  • Narrow layout: crops the box to him and drops the props beside him; the thought bubble goes above.
  • Bug fixed: the typing log and the thought bubble were cancelled and restarted about once a second. A container query that toggles display: none makes Chrome restart every animation inside it. Those rules hide with visibility now, and tests/mascotActs.test.mjs pins it.
  • The finished card is held for 2.8 s so the reaction is seen.

Includes the calm-motion commit from #389 (this supersedes it).

The act markup is static strings in utils/mascotActs.ts, rendered by components/Mascot.tsx; the .a-* rules are in styles.css. Checked in real Chrome at desktop and phone sizes: every act and face rendered, and animation restarts counted before and after.

npm run check passes (952 tests).

🤖 Generated with Claude Code

faratech and others added 3 commits October 31, 2026 01:10
Several loops ran at 0.4-0.8 s with wide swings, the look-around animation
snapped back at the end of every cycle, the log lines showed in full during
their delay and then erased and retyped forever, and antic changes snapped
between poses. Loops are now 1.2 s and up with smaller swings, the look
goes there and back, poses ease into each other, antics come every 14 s with
most slots left to the calm stage pose, and each log line types once per
stage and stays.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
The mascot now has a range of expressions (pupils with highlights, brows,
mouths, cheeks; the idle face is a gentle smile instead of a frown) and
does an act while a scan runs: a pool per stage, one pick per scan that
never repeats the previous scan's, and a nap when a stage runs twice as
long as usual. When the report lands he reacts to how it came out (found a
driver, memory, running hot, large kernel dump, all good, not sure; a forced
crash is "not sure" because it does not document its cause). The chat
avatar uses the same faces for its states. The narrow layout crops the box
to him and drops the props beside him.

Also fixes the cause of the card's text and bubble restarting about once a
second: a container query that toggles display:none makes Chrome cancel and
restart every animation inside it. Those rules hide with visibility now, and
a test pins it. The finished card is held for 2.8 s so the reaction shows.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
@faratech
faratech merged commit bf43b31 into main Oct 31, 2026
3 checks passed
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