- discover available locale files dynamically instead of relying on a hardcoded language list
- make config JSON decoding more defensive to avoid null-state failures on invalid or empty data
- improve startup resilience when configuration files are missing or malformed
- replace fragile Docker file bind mount with persistent /data storage
- add container entrypoint to link config.json from persistent storage
- tighten Docker image permissions and add a basic healthcheck
- add .dockerignore to keep git metadata and runtime files out of the image
- bundle hls.js locally instead of loading it from a CDN
- download and serve UI/theme fonts locally instead of Google Fonts
- update service worker cache entries for local assets
- refresh README to reflect local bundled assets and cleaner deployment docs
- setup.php: dynamic EPG source fields (+ Add source button)
- setup.php: toggle to allow personal EPG for visitors
- index.php: auto-migrates old epg_url/m3u_url to epg_sources[] on first load
- index.php: EPG_SOURCES array injected from PHP into JS
- Backward compatible: single-source instances migrate silently