#598 Add Confetti On Application Submission And Acceptance - #600
Merged
cielbellerose merged 2 commits intoAug 26, 2026
Merged
Conversation
Shared fireConfetti() helper owns its own canvas so the burst survives the stepper's redirect, respects prefers-reduced-motion, and disables the worker to satisfy the app's CSP. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
cielbellerose
commented
Aug 25, 2026
cielbellerose
left a comment
Collaborator
Author
There was a problem hiding this comment.
Code Review — Cycle 1 · needs revision
3 open — 1 🟠 Medium, 1 🟡 Low, 1 ⚪ Nit (see inline)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Collaborator
Author
Revision — Cycle 1fixed R1-M1, R1-L1, R1-N1 · b89d2b4 |
cielbellerose
commented
Aug 25, 2026
cielbellerose
left a comment
Collaborator
Author
There was a problem hiding this comment.
Code Review — Cycle 2 · approved
0 open — clean
cielbellerose
deleted the
598-confetti-on-application-submission-and-acceptance
branch
August 26, 2026 01:34
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.
Closes #598
Summary
accepted(PM-11 / PM-14).Changes
lib/confetti.ts— new'use client'module exportingfireConfetti(). Gates onprefers-reduced-motion,typeof window, and an in-flight flag before ever downloading thecanvas-confettichunk; owns its own<canvas>appended todocument.body(outside the React root, so it survives the stepper'srouter.replace); lazilyimport()scanvas-confetti; fires withuseWorker: false(the app's CSP has noworker-src) andresize: true; derives its palette from the--chart-1…--chart-5design tokens (falls back to library defaults if fewer than two parse); swallows any failure silently (decorative effect, degrading beats throwing).components/features/application-stepper.tsx— fires on thesubmitApplicationsuccess branch, right after the "Application submitted"/"Application resubmitted" toast and before the redirect.components/features/use-application-status-move.ts— fires inperformMove, after the "Moved to Accepted" toast, only whentarget === 'accepted'. This is the single choke point behind the header quick action, the status-override dialog, and the queue-table row menu, so one call covers all three reviewer entry points.package.json/package-lock.json— addscanvas-confettiand@types/canvas-confetti(dev).docs/WORKFLOWS.md— one clause each in AP-9, PM-11, and PM-14 happy paths, plus a note in PM-12 that bulk accept deliberately does not fire.Testing plan
/my-applications/[id]./applications/[id], use the header Accept quick action → confirm → confetti fires with "Moved to Accepted".⋯status dialog, pick Accepted in the Select → Apply → confirm → confetti fires while the dialog is still open and is not hidden behind the overlay./applicationsqueue row menu, Accept → confetti fires there too./applicationsand Accept via the bulk bar → toast only, no confetti (deliberately out of scope).prefers-reduced-motion: reduce, repeat one submit and one accept → toasts appear, no confetti, and nocanvas-confettichunk in the Network tab.<canvas>is gone (document.querySelectorAll('canvas')) and clicking through the area still works during the animation.--chart-*values, not the light ones.Automated checks
npm run prettier:check— passnpm run eslint:check— passnpm run tsc:check— passnpm run test:unit— 227 passed (Postgres unavailable locally, so thedbproject was not run; no DB-touching code changed)Notes
environment: 'node'and no DOM harness; adding jsdom for a decorative effect isn't worth it, per the plan's risk note. Verified manually per the checklist above.confetti()export: it defaults touseWorker: true(blocked by this app's CSP) and its canvas has noaria-hidden. Owning the canvas avoided both.