Add Rep, a tappable strongman mascot on the coach chat bar - #14
Draft
lemmy-winks wants to merge 3 commits into
Draft
Add Rep, a tappable strongman mascot on the coach chat bar#14lemmy-winks wants to merge 3 commits into
lemmy-winks wants to merge 3 commits into
Conversation
A chunky Void×Volt strongman who sometimes pops up onto the chat composer and bounces there. Tapping him plays a randomized mini workout — squats, presses, curls, jumping jacks or pushups, with rep count and tempo re-rolled each time — then a double-bicep flex and a one-liner quip. Purely cosmetic: CSS keyframes drive all motion, the component only schedules appearances and picks the next set. - appears by dice roll (55% on opening Coach, re-rolls while you linger), wanders off if ignored; localStorage 'forge-mascot' = 'always'/'never' overrides - perches on the new .chatfoot wrapper so he stands on top of the proposal bar / context chip when those are showing - all colors come from the token families, so every palette and both themes carry through; hidden under prefers-reduced-motion Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FAjB4fJdTfPupJFcLwfHTT
Swap the rounded vector blob for pixel art on a 4px grid with crispEdges: one square slab for head+torso, ear nubs, detached stub arms and legs, square eyes and a pixel mouth. Equipment goes flat and blocky too (no strokes). Same animations and behavior; barbell rack / press offsets retuned for the new geometry. Colors stay in the token families so themes and accent palettes carry through. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FAjB4fJdTfPupJFcLwfHTT
New row in Settings → Appearance ('Rep, the chat mascot' ON/OFF)
backed by prefs.mascot (default on, synced through /api/prefs like
theme and palette, so it follows the user across devices). The
component gates all scheduling and rendering on the pref; the
localStorage dev knob still forces appearances for demos but never
overrides an explicit off.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FAjB4fJdTfPupJFcLwfHTT
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.
A cute chunky strongman (Super-Meat-Boy energy, Void×Volt colors) who sometimes hops up onto the coach chat composer and bounces there. Tap him and he busts out a mini workout — squat, overhead press, curls, jumping jacks or pushups — with the move, rep count and tempo re-rolled every time, then a double-bicep flex and a random one-liner ("light weight!", "do NOT skip leg day", …).
How it works
web/src/mascot.tsx— newCoachMascotcomponent. Purely cosmetic: it only schedules appearances and picks the next set; all motion is CSS keyframes in the new.mascotblock ofstyles.css.localStorage 'forge-mascot' = 'always' | 'never'overrides the dice (handy for demos, or for turning him off).--reps×--spdCSS vars); itsanimationendtells React the set is done, triggering the flex + quip. Never repeats the previous move..chatfootband so he perches on top of whatever is uppermost (he even does pushups lying on the proposal bar). The wrapper stays inside the.appchildren pattern, so the desktop 700px column cap applies automatically.--volt/--on-voltbody, neutral grays for the barbell/dumbbells), so both themes and every accent palette carry through. Hidden entirely underprefers-reduced-motion.Testing
cd server && python -m pytest tests/ -q— 43 passed.cd web && npm run build— clean.🤖 Generated with Claude Code
https://claude.ai/code/session_01FAjB4fJdTfPupJFcLwfHTT
Generated by Claude Code