Replace level-up text modal with confetti glass popover (L2+) #335
Labels
No labels
agent:fix_bugfix
agent:fix_conflicts
agent:fix_security
agent:gap_analysis
agent:implement
agent:open_issues
agents
agent:security_audit
agent:verify
area
timecurve
arena
arena-v2
audit
block:feature_review
block:security
bug
contracts
design
devops
docs
documentation
enhancement
epic
feature
frontend
indexer
low priority
megaeth
operations
ops
performance
QA
qa checklist
referrals
removal
security
smart-contracts
tech-debt
testing
time-arena
timecurve
visual-qa
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
code/yieldomega#335
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Parent
Gap analysis follow-up from #331.
Current codebase
ArenaSimplePage.tsx(useEffectonplayerLevelRaw) opensFeatureMechanicModalwhen level crosses 2–5 and tutorial not seen.FeatureMechanicModal(frontend/src/components/FeatureMechanicModal.tsx) is a text-heavy<dialog>with multi-paragraph copy frompodiumFeatureMechanicCopy.featureKeyForUnlockLevelmaps L2→time_booster, L3→defended_streak, L4→warbow, L5→warbow_flag.Why needed
Approved replacement: confetti burst popover with concise "Level Up" headline and one short line naming the unlocked feature — only for Level 2+. Reduces modal fatigue while preserving progression feedback.
Constraints / guardrails
INV-FRONTEND-290,frontend/src/index.cssglass tokens). Confetti must be subtle — match sparse motion policy (INV-FRONTEND-297-ART-MOTION-AUDIO).prefers-reduced-motion: confetti off, popover remains.openFeatureHelp) — do not delete long-form education entirely.markFeatureTutorialSeenbehavior preserved so repeats do not spam.Relevant files
frontend/src/components/FeatureMechanicModal.tsxfrontend/src/pages/arena/ArenaSimplePage.tsxfrontend/src/pages/arena/ArenaProtocolPage.tsxFeatureMechanicModalfrontend/src/lib/arenaProgression.tsfrontend/src/pages/arena/podiumCopy.tsfrontend/src/index.cssRecommended direction
LevelUpCelebrationPopover(or evolveFeatureMechanicModalwithvariant="celebration") — glass popover, confetti burst (CSS/canvas, ≤2s), title "Level Up", body ≤80 chars from feature short label.FeatureMechanicModal(text) for explicit help clicks, or consolidate with amodeprop.data-testidhooks for unit/E2E follow-ups.Acceptance criteria
cd frontend && npm run typecheck && npm run lint && npm testpasses.Test plan
cd frontend && npm run typecheck && npm run lint && npm testArenaSimplePagelevel-up effect testscd frontend && CI=1 npm run test:e2e -- --workers=5 e2e/anvil-arena-03-wallet-writes.spec.tsVitest: mock level transition 1→2 triggers popover; 1→1 does not; reduced-motion disables confetti class.
Attack / abuse test plan
Verification criteria
mentioned in issue #331
mentioned in commit
859b4a9ff1mentioned in merge request !508
Implementation note — MR !508
Auto level-up feedback on play
/now uses a glass confetti popover (L2+ only). Full mechanic education remains on explicit?help viaFeatureMechanicModal.Screenshots (desktop / tablet / mobile)
Verification
cd frontend && npm run typecheck && npm run lint && npm testnode frontend/scripts/capture-level-up-celebration-screenshots.mjsarenaLevelUpCelebration.test.tsLevelUpCelebrationPopover.test.tsxFeatureMechanicModalstill wired toopenFeatureHelpMR: https://gitlab.com/PlasticDigits/yieldomega/-/merge_requests/138
mentioned in commit
0fdf405b4ementioned in merge request !511
Verification — issue #335 (agent:verify)
Verified MR !508 on
main(1411dc49). No additional repo changes required.Results
:8545+ native Postgres indexer:3100+ANVIL_E2E=1preview:4173; mock wallet CRED buy →data-testid="level-up-celebration"visible with panel copy "Level Up / Time Booster unlocked" and confetti canvas presentfrontend/src/lib/arenaLevelUpCelebration.test.ts—detectUnseenLevelUpFeature(undefined,1)and(1,1)return nullprefers-reduced-motion: no confetti, popover remainsfrontend/src/components/LevelUpCelebrationPopover.test.tsx— omits confetti canvas, setsdata-reduced-motion="true"LevelUpCelebrationPopoverusesGlassPanel tone="gold"+.level-up-celebrationtokens inindex.csslevel-up-celebration-{desktop,tablet,mobile}.png)cd frontend && npm run typecheck && npm run lint && npm testArenaSimplePagekeepsopenFeatureHelp→FeatureMechanicModal; auto path usesLevelUpCelebrationPopoveronlymarkFeatureTutorialSeenpreserved (no repeat spam)LevelUpCelebrationPopover) and help modal (FeatureMechanicModal)e2e/anvil-arena-03-wallet-writes.spec.tsNotes
useArenaPlayerLevel(INV-FRONTEND-301); Anvil manual verification needsVITE_INDEXER_URL+ running indexer (matchescapture-level-up-celebration-screenshots.mjs/ MR verification).ArenaProtocolPageretains help-onlyFeatureMechanicModal(no auto celebration) — expected; play route/is the auto-trigger surface.mentioned in merge request !514
mentioned in issue #339
mentioned in merge request !515
mentioned in issue #340
mentioned in issue #342
mentioned in issue #343
mentioned in issue #365
mentioned in commit
c4e9e34529