* All games will be linked
* feat: Add 'Add Game' button to Settings tab
- Added 'Add Game' button to Games to Watch section in Settings
- Implemented logic to add custom games via search input
- Fixed alignment issue with games filter search bar
- Added English translations for new UI elements
* fix PR 33 review issues
---------
Co-authored-by: ethanblazkowicz <wow990922@outlook.com>
Co-authored-by: LeonSparta <46887992+LeonSparta@users.noreply.github.com>
Co-authored-by: Fengqing Liu <fq_aaron@hotmail.com>
* fix(frontend): replace innerHTML with DOM API to prevent XSS
Replace all non-clearing .innerHTML assignments in app.js with safe DOM
construction using makeElement() and replaceChildren().
* fix frontend DOM rendering regressions
---------
Co-authored-by: Fengqing Liu <fq_aaron@hotmail.com>
* Add footer with app version and GitHub update check
- Add GET /api/version endpoint returning current_version, latest_version, update_available and download_url (checks rangermix/TwitchDropsMiner releases via GitHub API).
- Add UI footer displaying current version and a visible update indicator with link.
- Add styles for footer and update alert; add client-side logic to fetch version on load.
- Update repository links to rangermix and replace favicon with transparent background.
See: web/index.html, web/static/app.js, web/static/styles.css, src/web/app.py
* - align footer width
- add (latest) indication if is latest version
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
- Implemented 'Benefit Type' filtering (Item, Badge, etc.) in backend and settings UI.
- Redesigned 'Wanted Drops Queue' as a card-based, masonry layout.
- Added 'Game Groups' to Wanted Queue for better organization.
- Added variable height support for Inventory cards.
- Added proxy support and verification logic (from previous steps).
- Added unit tests for new filters and UI logic.
- Display game box art icons (52x70px) next to game names in campaign headers
- Show contextual timing information below campaign status:
* Active campaigns display end time
* Upcoming campaigns display start time
* Expired campaigns display end time
- Use locale-aware date formatting via JavaScript toLocaleString()
- Utilize existing translation keys (starts/ends) with {time} placeholders
- Add flexbox layout for icon alignment and styling for timing text
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Add visual indicators showing account linking status for each campaign in the inventory tab. Campaigns now display either a "LINKED" (green) or "NOT LINKED" (orange) badge in the top right corner of each card. For unlinked campaigns, both the badge and a "Link Account" button provide direct access to the Twitch account linking page.
Backend changes:
- Add campaign_url property to DropsCampaign model
- Include both campaign_url and link_url in inventory API response
Frontend changes:
- Add LINKED/NOT LINKED badges positioned at top right of campaign cards
- Add "Link Account" button for unlinked campaigns
- Style badges with subtle green for linked and prominent orange for not linked
- Make NOT LINKED badge clickable to open account linking page
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Enhance the inventory tab with comprehensive filtering options to help users quickly find relevant campaigns. The new filter system supports status-based filtering (Active, Not Linked, Upcoming, Expired, Finished) and an advanced game selection dropdown with tag-based UI and keyboard navigation.
Key features:
- Status filters: Active, Not Linked (default), Upcoming (default), Expired, Finished
- Multi-select game dropdown with live search and keyboard navigation (arrows, Enter, Escape)
- Visual game tags with easy removal
- Persistent filter preferences across sessions
- Dual data source (combines games from campaigns and settings)
- OR logic for game selection, AND logic between filter types
- Clear filters button to reset all selections
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>