✨ New Features
- Tennis support (ATP/WTA) — per-match event channels, tournament court/round day-feed matching, and player template variables (
{player1}/{player2}) - Official NASCAR provider — cf.nascar.com schedule API for Cup / O'Reilly Auto Parts / Craftsman Truck series with full race-weekend sessions, no key required — thanks @tomwinterrose (#263)
- FIBA Basketball World Cup (M/W) via TheSportsDB (premium tier) and Australian NBL via ESPN — thanks @lpukatch (#272, closes #271)
- Channel numbering stability modes — gapped/strict sticky numbering so live channels keep their numbers, with on-demand and auto-armed re-grid — thanks @lpukatch (#255)
- PWA installability — home-screen icons and installable manifest — thanks @lpukatch (#243)
🐛 Bug Fixes
- Broken channel/team logos: stray
/prepended to logo URLs and template variables; existing templates are repaired automatically on upgrade (#275) - Identically named streams from multiple M3U accounts now all attach to the channel — thanks @lpukatch (#269, fixes #264)
- Channels get their profile assignment when only one Dispatcharr profile exists — thanks @lpukatch (#268, fixes #267)
- Slow stream-source adds fixed: M3U account-groups endpoint no longer walks every channel group — thanks @lpukatch (#270, fixes #265)
- Stream date parsing hardened against reversed date tails and month abbreviations inside team names — thanks @lpukatch (#266)
- Team names with spaces (e.g. "EE. UU.") translate correctly; alias log spam removed (#256)
- Regex Test Patterns highlighting works on combat/event-card fields (#257)
- Racing/tennis guide-data fallbacks tightened; provider 404 storms stopped via negative event caching; direct-match cache writes no longer rejected
⚡ Enhancements
- Dashboard All-Time Totals are now genuinely lifetime — they survive run-history pruning and clearing
- 240 template variables across 20 categories
🔧 Under the Hood
- Code-health overhaul: declarative settings registry, decomposed backend packages, shared frontend primitives, test suite 1,369 tests in ~7s, and a hardened CI/release pipeline (Docker publish gated on tests + tag/version check)
- Schema v78 (automatic migrations on first startup)