Intercepts the Done form submit, plays a two-note ding via Web Audio
API (no audio file), animates the card with a white glow + scale, then
submits after 680ms. Only fires for completion, not abandon or delete.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace hardcoded id-based section lookup with declarative rules:
- data-show-category="games|books|films" on sections
- data-hide-status="unending" on individual fields
JS now has a single updateVisibility() that evaluates attributes.
Adding new conditions only requires touching HTML, not JS.
Also hides Progress and Total Hours for unending items.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Unending belongs in STATUS_CHOICES alongside completed/abandoned.
Adds an Unending shelf tab and an ∞ button on active game cards.
Reverts the incorrect category addition from the previous commit.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
For games like Dota 2 that have no completion state — shows hours
played on the card, reuses the games fields in the form (hours played
/ total hours), and gets its own cyan badge. No DB column change,
only choices metadata update.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Items can be moved to Completed or Abandoned via card buttons.
Only active items appear in the default/category tabs; completed and
abandoned items are visible only in their respective shelf tabs.
Restore button moves items back to active.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Fetch HLTB main/extra/completionist hours when a game item is saved
- Re-fetch only when name or category changes on edit
- Steam imports also fetch HLTB for each selected game
- Cards show compact HLTB row: "HLTB: 40h · +extra 60h · 100% 100h"
- Edit form shows HLTB breakdown as a hint next to Total hours field
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Steam OpenID flow: user authenticates with Steam, we get their Steam ID
- Server-side API key fetches their owned games with playtime
- Import page shows full library, marks already-imported games
- Imported games land in backlog as GAMES items with hours_played set
- STEAM_API_KEY env var plumbed into both prod and dev containers
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Django app with Item model (games/books/films/other categories), CRUD
views, and login-required access. Login page at /accounts/login/ uses
custom dark-themed template consistent with the site design.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>