Motivation
Burnbar's durable archive naturally accumulates streaks and thresholds (days tracked, total spend milestones). A small celebratory animation when the user hits one — surfaced only in the dashboard, not as a tray interruption — adds delight without compromising the app's quiet, tray-only posture.
Proposal
Detect simple milestones (e.g. "30 days tracked", round-number total-spend thresholds like "$100 burned") and play a subtle celebration animation (confetti/sparkle burst) in the dashboard the next time it's opened after the milestone is crossed.
Feasibility notes
- Milestone detection is a pure function over existing archive totals (
derive.ts territory) — no new archive fields needed if milestones are computed from already-derived totals, though tracking "already celebrated" milestones to avoid repeat animations needs a small piece of persisted state (a natural fit alongside settings.ts's existing persisted preferences).
- Explicitly dashboard-only, not tray/notification-based — keeps it consistent with Burnbar's best-effort, non-interruptive design (
CaptureService, update flow) where nothing surfaces without the user opening something.
Acceptance criteria
Motivation
Burnbar's durable archive naturally accumulates streaks and thresholds (days tracked, total spend milestones). A small celebratory animation when the user hits one — surfaced only in the dashboard, not as a tray interruption — adds delight without compromising the app's quiet, tray-only posture.
Proposal
Detect simple milestones (e.g. "30 days tracked", round-number total-spend thresholds like "$100 burned") and play a subtle celebration animation (confetti/sparkle burst) in the dashboard the next time it's opened after the milestone is crossed.
Feasibility notes
derive.tsterritory) — no new archive fields needed if milestones are computed from already-derived totals, though tracking "already celebrated" milestones to avoid repeat animations needs a small piece of persisted state (a natural fit alongsidesettings.ts's existing persisted preferences).CaptureService, update flow) where nothing surfaces without the user opening something.Acceptance criteria