Fixes from your 1.5.3 feedback
Toast spam during Scan Watch History
Backfill now runs silently. Each scanned playback sets Silent=true, which causes EvaluateBadges to skip the webhook + audit log AND use the item's original played date as UnlockedAt. The toast poller compares UnlockedAt > LAST_SEEN (always "now or later"), so historical unlocks never match — no more flood.
Profile card says "Failed to load"
Root cause: the profile card tab has no access to your X-Emby-Token, so its client-side fetches to /summary, /rank, /equipped all 401'd. Fix: server-side render. The controller now pre-fetches all the data and bakes it into the HTML template before sending it. No more client fetches, no more 401.
Achievement ribbon under each episode/movie
Disabled by default. You can re-enable it from Plugin Settings → UI features if you ever want it back.
Only 1 quest per period
Now 3 daily + 3 weekly concurrent quests. Rotated deterministically so everyone on the server gets the same 3 quests per day and per week. Completing any of them pays into your score bank.
No points shown per badge
Each badge card now has a +X pts chip in the header showing exactly how much score it's worth. Scaled by your prestige level — Prestige 1 = 1.5x, Prestige 2 = 2.0x, etc.
Prestige button was lackluster
Restyled with an animated gradient (purple → pink → orange), gold border, shine sweep on hover, and glow shadow. Disabled state has a muted look. Contextual text shows current progress: "Reach 12000 score" or "Reset to earn prestige 2 and unlock 2.0x multiplier".
Heatmap range too short
Added an inline dropdown: 30 / 90 / 180 / 365 days. Cell size auto-scales so larger ranges still fit.
README outdated
Full overhaul with:
- Every feature listed (150+ badges, rank system, score economy, prestige, quests, stats, UI, admin)
- All API endpoints documented
- Prerequisites table matching each feature to its required metadata (TMDb scrape, library folders, etc.)
- Changelog summary from 1.4.7 through 1.5.4
Scan all users explanation
The startup auto-evaluation runs 8 seconds after plugin load. If you update the plugin and Jellyfin restarts, new badges should automatically unlock against your existing counter data. You shouldn't need Scan All Users unless:
- You want to re-pull new metadata fields (People, genres, runtime) from freshly-scraped items
- Your server didn't fully restart after update (Docker hot-reload etc.)
- You want counters themselves re-derived from current IsPlayed flags
For everything else — a restart alone is enough.
Test checklist
- Update to 1.5.4 → restart Jellyfin
- Scan Watch History — should run silently. No toast spam, no badges popping up while you wait.
- Click "Open shareable profile card" — should load a styled HTML card with your rank, score, stats, equipped showcase. Not "Failed to load".
- Navigate to any episode/movie detail page — achievement ribbon should NOT appear (opt-in now).
- Quests tab — should show 3 daily quests and 3 weekly quests.
- My Badges tab — each card should show
+X ptsin the top-right. - Stats tab → heatmap has a range selector, test 30/90/180/365 days.
- Stats tab → Prestige button — should look shiny with gradient + glow. Disabled (muted) if you're under 12000 score, fancy if you're over.
- Play a new item past 80% — only THAT unlock should trigger a toast (if any), not random old ones.
- GitHub repo — readme now shows the full feature set.