From 7046febd0010eebffd42ec899312b6fd74c392f1 Mon Sep 17 00:00:00 2001 From: Avery Felts Date: Sat, 31 Jan 2026 10:52:42 -0700 Subject: [PATCH] Fix Achievement Logic: Correct Fighter/Goal Crusher criteria and clarify celebration UI --- src/components/CelebrationAnimation.tsx | 4 ++++ src/lib/storage.ts | 6 ++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/components/CelebrationAnimation.tsx b/src/components/CelebrationAnimation.tsx index a918165..bc471f7 100644 --- a/src/components/CelebrationAnimation.tsx +++ b/src/components/CelebrationAnimation.tsx @@ -104,6 +104,10 @@ export function CelebrationAnimation({

{badge.name}

{badge.description}

+ {/* Substance indicator - Helps clarify which tracker triggered this */} +
+ For {badge.id === 'first_day' || badge.id === 'streak_7' ? 'tracking' : 'staying free from'} +
diff --git a/src/lib/storage.ts b/src/lib/storage.ts index 6f707fd..d631747 100644 --- a/src/lib/storage.ts +++ b/src/lib/storage.ts @@ -546,10 +546,12 @@ export function checkBadgeEligibility( case 'streak_3': return streak >= 3; case 'streak_7': return stats.totalDays >= 7; case 'fighter': - return getStreakFromMap(stats.nicotineMap) >= 7 && getStreakFromMap(stats.weedMap) >= 7; + // Fix: Check streak for the current substance, not both simultaneously + return streak >= 7; case 'one_month': return checkMonthlyReduction(); case 'goal_crusher': - return getStreakFromMap(stats.nicotineMap) >= 30 && getStreakFromMap(stats.weedMap) >= 30; + // Fix: Check streak for the current substance, not both simultaneously + return streak >= 30; default: return false; } }