You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
v0.4.0 - XP and karma delta display on all leaderboards, stability fixes
Added XP and karma delta to every leaderboard entry — each card other than your own shows how far ahead (green) or behind (red) you are. Shown on the extension's Top All-Time Learners panel, all three Personal Leaderboards boards (daily XP, all-time XP, karma), and all four native boot.dev boards: League Top Daily Learners, League Top League Learners, Global Top Daily Learners, and Global Top Community Members. (Recent Archmages is left untouched — it lists no XP or karma.)
Each delta is aligned with the value it compares against: native deltas are appended into the card's text column directly beneath the native value, and the extension panels' deltas sit with their own value. Dropped the redundant " today" suffix from daily deltas.
Intercepted /v1/leaderboard_karma/alltime and /v1/league_leaderboard_xp/{day,alltime}. Each board is matched to the API response that feeds it, and the current user's own value is read from that same response (XPEarned for league/daily, Karma for community, XP for all-time), so deltas always match the displayed numbers; getMyValue prefers these responses and falls back to the saved personal record only when absent.
Scoped native cards by document position between known section titles, so the dynamic "You are in position N…" subtitle (an <h3> in the Global boards) no longer truncates a section's card range and blanks its deltas.
Eliminated leaderboard flicker: each panel is rendered once and then reconciled in place keyed by handle instead of replacing innerHTML, so the current-user card and its gold glow are never destroyed and recreated, unchanged rows are untouched, and only changed values patch a single text node (native deltas included). Supporting changes: a 50 ms debounced render scheduler, a fast-path and version-guarded waitFor so stale resolutions can't overwrite a newer render, a persistent Personal Leaderboards skeleton that keeps the input's value and focus, and a compareDocumentPosition check that repositions the personal panel without re-rendering.
Stabilized current-user identity, the deeper cause of the residual glow flicker and intermittently wrong deltas. boot.dev's leaderboard cards are not inside <main>, so the nav-link heuristic could match a scrolled-past profile card and overwrite the stored handle mid-scroll. The handle is now sticky once known and taken authoritatively from the native gold-glow highlight (which only ever marks your own cards); the nav heuristic can no longer overwrite a known handle.
Corrected the avatar role-frame tier map using confirmed API data: added the missing Mage tier (level 90–99), restored the Archmage index (level 100+), and shifted the level formula down one step so all tiers render the correct frame; entries with no recognized role and a level below 10 (or no level) show no frame.
Matched the current-user card glow to the native site value (0 0 15px 1px #e5a012) on both the all-time and personal rows.
Matched the boss panel minimized-state title font size to the expanded title (both 16 px) and widened the panel to prevent title truncation at maximum aura length.
Infrastructure
Split src/content.js (2059 lines) into feature modules: utils.js, leaderboard.js, profile.js, boss.js, nextLesson.js, and a slim router-only content.js.
Created CLAUDE.md with agent guidance, file responsibilities, architecture rules, and quick-check commands.