INNER CODE UNIT · TypeScript
unlockAchievement
vibeeval/vibecosystem · hooks/src/achievement-tracker.ts:157
function unlockAchievement(
state: AchievementState,
id: string,
baseXp: number,
celebrations: string[]
): void {
if (state.unlocked[id]) return; // already unlocked
const multiplier = streakMultiplier(state.streak);
const earnedXp = Math.round(baseXp * multiplier);
state.unlocked[id] = { unlockedAt: new Date().toISOString(), xp: earnedXp };
state.xp += earnedXp;
state.level = calcLevel(state.xp);
const name = ACHIEVEMENT_NAMES[id] ?? id;
const bonusStr = multiplier > 1 ? ` (${multiplier}x streak bonus)` : '';
celebrations.push(