Skip to content

CHANGELOG.md

3.1.0 (2025-12-24)

🎨 UI/UX Improvements

ArrActivity Page Enhancements β€’ Enhanced download table β—¦ Added Quality and Protocol columns for better download visibility β—¦ Moved Progress column to end for consistent layout with VOD monitor β—¦ Added episode info display for Sonarr (S01E05 format with episode title) β—¦ Removed icons from title columns for cleaner appearance

β€’ Activity status badges β—¦ Replaced plain text status with colored badges matching VOD monitor style β—¦ Downloading (green), Importing (blue), Completed (green), Warning (yellow), Failed (red), Queued (gray) β—¦ First letter capitalized for consistent presentation

β€’ Progress bar standardization β—¦ Changed all progress bars to green across ArrActivity, VODStreams, and Uploader β—¦ Unified progress bar layout: label, percentage, and bar consistently styled β—¦ Protocol badge now uses blue color scheme for visual consistency

Settings Page Improvements β€’ Section reorganization β—¦ Reordered settings cards: Auth β†’ General β†’ Plex β†’ Overseerr β†’ *arr β†’ Uploader β†’ API β—¦ Logical grouping for better user experience

β€’ Auto-test on load β—¦ Added automatic connection testing for Uploader service on settings page load β—¦ Added automatic connection testing for all *arr instances on settings page load β—¦ Feature parity with Plex and Overseerr connection testing β—¦ Immediate feedback on service health without manual testing

β€’ Unsaved changes warning β—¦ Removed auto-save functionality for better user control β—¦ Added browser warning when leaving page with unsaved changes β—¦ Save button shows warning message and disabled state when no changes pending β—¦ Prevents accidental data loss

πŸ› Bug Fixes

β€’ Fixed icon mismatch in Settings page (*arr and Uploader sections) β€’ Fixed missing closing brace in validateArrInstancesOnLoad function β€’ Resolved syntax errors preventing frontend compilation

3.0.0 (2025-12-19)

⚑ Caching & Performance

β€’ Redis coverage expanded β—¦ Plex sessions cached with 10s TTL to reduce repeated /status/sessions calls β—¦ Live stats cached for 30s and standard stats cached for 60s to avoid redundant Plex hits β—¦ Recent media cached for 5 minutes to cut expensive library fetches β—¦ Cache warming now preloads sessions, stats, live stats, and recent media

β€’ Cache transparency & control β—¦ /api/plex/cache/stats reports the expected Redis keys for quick verification β—¦ Cache clear/warm endpoints now manage the new Redis keys alongside in-memory caches β—¦ Manual watch-history sync clears its Redis entry to prevent stale data

🧭 Release & Versioning

β€’ Bumped project version to 3.0.0 across backend, frontend, and release metadata

2.5.0 (2025-12-15)

πŸš€ Performance: Enterprise-Grade Caching System

Phase 1: Plex Activities Cache

β€’ activities-cache: In-memory caching with 5s TTL β—¦ Reduces Plex API calls by 83% during active monitoring β—¦ Module-level cache dictionary with timestamp-based expiry β—¦ Automatic stale cache fallback on API errors β—¦ Hit/miss tracking for cache performance monitoring β—¦ Cache age reporting for debugging

Phase 2: Watch History & Library Caching

β€’ watch-history-cache: 5-minute database query cache β—¦ Reduces database queries by 80% for watch history endpoint β—¦ Automatic invalidation on manual sync operations β—¦ Prevents redundant database scans during dashboard loads

β€’ library-cache: 5-minute library type cache β—¦ Caches Plex library sections by server URL + token β—¦ Eliminates repeated library API calls during invite workflows β—¦ Improves invite creation and library selection performance

Phase 3: Background Stats & Cache Warming

β€’ stats-aggregation: Background statistics service β—¦ Pre-calculates dashboard stats every 60 seconds β—¦ /api/plex/stats/dashboard returns instant cached results β—¦ Aggregates service health, Plex library counts, and traffic stats β—¦ Eliminates expensive multi-database queries on dashboard loads β—¦ Background asyncio task integrated into FastAPI lifespan

β€’ cache-warming: Automatic cache refresh service β—¦ Proactively refreshes caches at 80% TTL threshold β—¦ Prevents cold cache states during normal operation β—¦ Checks every 2 seconds for stale caches β—¦ Warms activities and watch history caches automatically β—¦ Ensures consistent sub-second response times

β€’ redis-support: Optional distributed cache layer β—¦ Redis integration for multi-instance deployments β—¦ Automatic fallback to in-memory cache if Redis unavailable β—¦ Graceful degradation maintains system reliability β—¦ Configurable via REDIS_ENABLED environment variable β—¦ Full CRUD operations: set, get, delete, clear

Cache Management Endpoints

β€’ GET /api/plex/cache/stats - Enhanced cache statistics β—¦ Per-cache hit/miss rates and TTL information β—¦ Background stats service status and last update time β—¦ Redis connection status and key count β—¦ Cache age tracking for debugging

β€’ POST /api/plex/cache/clear - Clear all caches β—¦ Invalidates activities, watch history, and library caches β—¦ Resets hit/miss counters for fresh metrics β—¦ Useful for testing and troubleshooting

β€’ POST /api/plex/cache/warm - Manual cache warming β—¦ Force-refreshes all cache layers on demand β—¦ Useful after Plex server changes or updates β—¦ Ensures caches contain latest data

β€’ GET /api/plex/stats/dashboard - Pre-calculated stats β—¦ Returns dashboard stats from background aggregation β—¦ Sub-second response time vs 2-5s without caching β—¦ Services online/offline counts β—¦ Plex library totals (movies, shows, episodes, seasons) β—¦ Traffic statistics (30-day total)

Performance Impact

β€’ Plex activities endpoint: 5s β†’ sub-second response (80% hit rate) β€’ Watch history endpoint: 2-3s β†’ sub-second response (cached) β€’ Dashboard stats: 3-5s β†’ <100ms response (pre-calculated) β€’ API call reduction: 83% fewer Plex API requests β€’ Database query reduction: 80% fewer watch history queries β€’ Cache hit rates: 80% during normal operation with rapid requests

πŸ“š Documentation Updates

β€’ CACHE_IMPLEMENTATION.md - Complete implementation details β—¦ All three phases documented with code examples β—¦ Architecture diagrams and data flow β—¦ Performance benchmarks and metrics

β€’ PHASE3_QUICKSTART.md - Quick start guide for Phase 3 β—¦ Redis setup instructions (optional) β—¦ Environment variable configuration β—¦ Testing procedures with curl examples β—¦ Troubleshooting common issues

β€’ API Documentation - New cache endpoints documented β—¦ Complete endpoint reference in docs/api/plex.md β—¦ Request/response examples β—¦ Cache statistics interpretation guide

πŸ”§ Technical Details

β€’ In-memory cache dictionaries at module level β€’ Datetime-based TTL checking (no external dependencies) β€’ Background asyncio tasks with proper lifecycle management β€’ Graceful shutdown with task cancellation β€’ Thread-safe cache operations β€’ Comprehensive error handling with stale cache fallback β€’ Optional Redis with automatic failover


2.4.1 (2025-12-07)

🎯 Invites Management Enhancements

New Features

β€’ invite-status: Multi-badge status system β—¦ Invites can now display multiple status badges simultaneously β—¦ "Redeemed" badge (green) shows when invite has active users β—¦ Additional "Expired" (red) and "Used Up" (orange) badges appear when applicable β—¦ Badge priority: Disabled > Redeemed (+ expired/used) > Expired/Used > Active β—¦ Better visual clarity of invite states at a glance

β€’ invite-filters: Redeemed filter tab β—¦ New "Redeemed" filter tab in invites manager β—¦ Shows all invites that have been claimed by users β—¦ Filter positioned between "Active" and "Expired" tabs β—¦ Active invites stat card now shows redeemed count: "X (Y redeemed)" β—¦ Redeemed status card removed in favor of filter tab

β€’ invite-redemption: Re-invitation support β—¦ Users can now be re-invited after being removed from Plex β—¦ OAuth flow skips "already a member" check β—¦ Allows seamless user re-additions without errors β—¦ Improved invite redemption flow for previously removed users

β€’ invite-cleanup: Automatic orphan deletion β—¦ Invites automatically deleted when last associated user is removed β—¦ Prevents orphaned invite codes cluttering the dashboard β—¦ Delete user action now checks for remaining users on invite β—¦ Cascade deletion keeps invite database clean

🎨 UI/UX Improvements

Navigation Updates

β€’ nav: Plex-specific naming β—¦ "VOD Activity" renamed to "Plex Activity" β—¦ "User Accounts" renamed to "Plex User Accounts" β—¦ "User History" renamed to "Plex User Stats" β—¦ Clearer indication of Plex integration throughout UI

Dashboard Refinements

β€’ traffic-cards: Carousel improvements β—¦ Removed green activity indicator dots from traffic cards β—¦ Fixed grid layout to prevent second row wrapping β—¦ Cards now properly overflow with horizontal scroll β—¦ Cleaner, more consistent visual presentation

β€’ invite-stats: Refined counter logic β—¦ Active invites counter properly filters expired/exhausted states β—¦ Stats endpoint returns accurate counts for dashboard β—¦ Redeemed count only includes active (non-expired, non-exhausted) invites

πŸ“š Documentation

API Documentation

β€’ swagger-ui: Dark mode with proper OpenAPI schema β—¦ Custom OpenAPI schema generation ensures version field β—¦ Swagger UI accessible at /docs endpoint β—¦ Vite proxy configured for /docs and /openapi.json β—¦ Dark mode theme with inverted colors for readability β—¦ Fixed "Unable to render this definition" error

β€’ about-page: Fixed API docs link β—¦ API Documentation link in About section now works correctly β—¦ Links to /docs with proper proxy routing β—¦ Removed favicon 404 error from Swagger HTML

🌐 Internationalization

Translation Updates

β€’ locales: New translation keys β—¦ Added "redeemed" status translations (EN: "Redeemed", DE: "EingelΓΆst") β—¦ Added "redeemed" filter translations β—¦ Updated "totalRedemptions" to just "Redemptions" (EN/DE) β—¦ Plex-specific navigation labels updated in both languages

πŸ”§ Technical Improvements

Backend

β€’ openapi: Custom schema generation β—¦ Explicit OpenAPI version "3.1.0" in schema β—¦ Custom custom_openapi() function ensures proper spec format β—¦ Swagger UI compatible with generated schema

Frontend

β€’ vite-config: Extended proxy configuration β—¦ Added /docs proxy for Swagger UI β—¦ Added /openapi.json proxy for OpenAPI schema β—¦ Ensures dev environment works with backend documentation

πŸ› Bug Fixes

β€’ invites: Fixed filter logic for redeemed invites β—¦ Redeemed count in stats card now excludes expired/used invites β—¦ Only active redeemed invites counted in stat display β—¦ Filter logic matches display logic for consistency

β€’ oauth: Fixed re-invitation blocking β—¦ Previously removed users can now redeem invites again β—¦ OAuth flow simplified to allow duplicate invitations β—¦ Plex handles duplicate prevention automatically

2.4.0 (2025-12-01)

πŸ“Š Watch History & User Analytics

New Features

β€’ watch-history: Complete Plex watch history tracking β—¦ New User History page with comprehensive viewing analytics β—¦ Real-time sync of Plex watch history to local database β—¦ Track movies, TV episodes, and music playback per user β—¦ View progress, duration, view count, and ratings for all content β—¦ Background sync service fetches up to 200 most recent history items β—¦ Automatic account mapping with Plex system accounts β—¦ Persistent storage in SQLite database (WatchHistoryDB model) β—¦ Support for thumbnails, studio, genres, and content ratings

β€’ user-analytics: Advanced filtering and search β—¦ Filter by time period: All Time, Today, This Week, This Month β—¦ Filter by content type: All, Movies, TV Episodes, Music β—¦ Search across username, email, and content titles β—¦ User statistics with total views, favorite content type, and last activity β—¦ Per-user detailed history with play progress indicators β—¦ Responsive card layout with media type icons and badges β—¦ Real-time data refresh with optimized caching (15-minute stale time)

β€’ api: Watch history endpoints β—¦ GET /api/plex/watch-history - Retrieve all watch history from database β—¦ Background service automatically syncs every 15 minutes β—¦ Efficient database queries with indexed lookups β—¦ Support for duplicate detection using rating_key + viewed_at

🎨 UI/UX Enhancements

New Features

β€’ carousel: Traffic and media carousel navigation β—¦ DashboardTrafficCards now displays traffic data in paginated carousel β—¦ Auto-scrolling carousel for top bandwidth consumers β—¦ Previous/Next navigation arrows with smooth transitions β—¦ Pagination dots showing current position β—¦ Configurable items per page (default: 5 services) β—¦ InviteRedemption page features auto-scrolling Plex media showcase β—¦ Horizontal scroll animation for poster images

β€’ badges: Enhanced visual indicators β—¦ Expiration badges on User Accounts cards showing time until expiry β—¦ "Expires in X days" display with color coding (red < 7 days, yellow < 30 days) β—¦ "Expired" badge for users past expiration date β—¦ Badge counters on Services tab showing active service count β—¦ User count badges in sidebar navigation

β€’ sidebar: Improved navigation β—¦ User History menu item with Activity icon β—¦ Dynamic badge counts for Services and User Accounts β—¦ Responsive collapsing on mobile devices β—¦ Active route highlighting with theme colors

πŸ”§ Invite System Improvements

New Features

β€’ invite-editing: Full CRUD operations for invites β—¦ Edit existing invites with modal dialog β—¦ Update usage limits, expiration dates, and permissions β—¦ Modify library access after invite creation β—¦ Real-time validation and error handling β—¦ Confirmation dialogs for destructive actions

β€’ library-selection: Enhanced library picker β—¦ Fixed individual library selection in multi-select dropdown β—¦ Support for Movies, TV Shows, Music, and All Libraries β—¦ Visual checkboxes for selected libraries β—¦ "All Libraries" option properly toggles individual selections

β€’ expiration-picker: Time selection for expiry dates β—¦ Added time picker to expiration date selector β—¦ Support for hour and minute precision on invite expiration β—¦ User expiration date editor with time selection β—¦ Default time set to end of day (23:59) for better UX

πŸš€ Traffic Agent Improvements

New Features

β€’ persistence: Traffic data persistence across restarts β—¦ State file saves total upload/download counters to disk β—¦ Automatic state restoration on agent startup β—¦ JSON-based state storage in traffic_state.json β—¦ Prevents data loss when agent restarts β—¦ load_state() and save_state() methods for state management β—¦ State file created automatically on first run

πŸ› Bug Fixes

β€’ refresh: Fixed user refresh button states β—¦ Individual refresh buttons now show loading spinner during operation β—¦ Disabled state prevents multiple concurrent refreshes β—¦ Proper error handling with toast notifications β—¦ RefreshCw icon animates during refresh

β€’ oauth: Improved Plex OAuth flow β—¦ Better error messages for OAuth failures β—¦ Automatic email collection for new users β—¦ Fixed account mapping with Plex system accounts

β€’ services: Service tab count accuracy β—¦ Fixed service count badge showing incorrect numbers β—¦ Real-time updates when services added/removed β—¦ Proper filtering of active vs inactive services

πŸ“š Documentation

β€’ localization: Updated translations β—¦ Added German translations for User History page β—¦ English translations for watch history features β—¦ Filter labels, time periods, and content types β—¦ Statistics and analytics terminology

πŸ”„ Database Schema Updates

β€’ models: New watch history schema β—¦ WatchHistoryDB table with comprehensive metadata β—¦ Fields: user_id, email, username, type, title, viewed_at, duration, progress β—¦ Support for TV show hierarchy (grandparent_title, parent_index, index) β—¦ Rating, year, thumb, content_rating, studio, summary, genres β—¦ Unique constraint on rating_key + viewed_at for duplicate prevention β—¦ Indexed columns for fast queries (user_id, email, viewed_at, type)


2.3.0 (2025-11-26)

🎭 Plex Invite Management System

New Features

β€’ invites: Complete Plex invitation system β—¦ Create custom invite codes with usage limits and expiration dates β—¦ Library-specific access control (Movies, TV Shows, Music, or All) β—¦ Permission management (Sync, Live TV/Channels, Plex Home) β—¦ OAuth-based redemption flow (Wizarr-style) β—¦ Automatic user provisioning to Plex Media Server β—¦ Support for both Plex Friends and Plex Home invitations

β€’ user-accounts: Advanced user management β—¦ View all redeemed Plex users with detailed information β—¦ User avatars/thumbnails from Plex profiles β—¦ Individual user expiration dates (independent from invite expiration) β—¦ Edit user expiration dates via modal dialog β—¦ Refresh user information from Plex server on-demand β—¦ Delete/remove users from Plex server β—¦ Library and permission badges for each user β—¦ Real-time statistics (Total Users, Redeemed Invites, Plex Server Name) β—¦ Search functionality across username, email, and invite codes β—¦ Skeleton loading states matching card layouts

β€’ invites-manager: Comprehensive invite administration β—¦ Create invites with library selection (multi-select dropdown) β—¦ Set usage limits (1-100 or unlimited) β—¦ Configure expiration dates for invites β—¦ Toggle permissions: Allow Sync, Allow Channels/Live TV, Plex Home β—¦ View invite statistics and redemption status β—¦ Copy invite links with one click β—¦ Active/Expired/Exhausted status indicators β—¦ Batch delete and edit capabilities β—¦ Real-time invite validation

β€’ oauth: Wizarr-style Plex OAuth flow β—¦ Secure OAuth PIN-based authentication β—¦ Automatic Plex account detection β—¦ Email collection for new users β—¦ Seamless invitation acceptance β—¦ Success/failure redirect handling

β€’ api: RESTful invite endpoints β—¦ POST /api/invites/ - Create new invite β—¦ GET /api/invites/ - List all invites with users β—¦ GET /api/invites/{id} - Get specific invite details β—¦ PUT /api/invites/{id} - Update invite settings β—¦ DELETE /api/invites/{id} - Delete invite β—¦ POST /api/invites/validate - Validate invite code β—¦ POST /api/invites/redeem - Redeem invite (OAuth) β—¦ GET /api/invites/stats - Invite statistics β—¦ GET /api/invites/plex/config - Plex server config & libraries β—¦ GET /api/invites/users - List all Plex users β—¦ POST /api/invites/users/{id}/refresh - Refresh user info from Plex β—¦ DELETE /api/invites/users/{id} - Remove user from Plex β—¦ PUT /api/invites/users/{id}/expiration - Update user expiration

🎨 UI/UX Improvements

β€’ skeleton-loading: Enhanced loading states β—¦ Replaced spinner loaders with skeleton cards across UserAccounts page β—¦ Skeleton cards match actual card layouts (avatar, text, badges, buttons) β—¦ Smooth pulse animation for better perceived performance β—¦ Consistent with loading patterns in other pages

β€’ user-cards: Beautiful user display β—¦ Plex-themed background watermark on user cards β—¦ Color-coded library badges (Movies=blue, TV=purple, Music=pink, All=cyan) β—¦ Permission badges with icons (Sync, Channels, Plex Home) β—¦ Active status indicators with green pulse animation β—¦ Hover effects and smooth transitions β—¦ Responsive grid layout (½/3 columns)

β€’ invite-cards: Rich invite visualization β—¦ Usage progress bars showing redemption percentage β—¦ Status badges (Active, Expired, Exhausted, Inactive) β—¦ Library icons and names displayed inline β—¦ Copy invite link button with success feedback β—¦ Edit and delete actions with confirmation dialogs

πŸ”§ Backend Enhancements

β€’ database: Extended schema for invites β—¦ InviteDB model with SQLite storage β—¦ PlexUserDB model with user metadata β—¦ Foreign key relationships between invites and users β—¦ User expiration field (expires_at) separate from invite expiration β—¦ Thumbnail/avatar storage for user profiles β—¦ Last seen tracking for user activity

β€’ plex-integration: PlexAPI utilities β—¦ invite_plex_friend() - Invite users as Plex Friends β—¦ invite_plex_home() - Invite users to Plex Home β—¦ remove_plex_user() - Remove users from Plex server β—¦ get_plex_libraries() - Fetch available libraries β—¦ refresh_plex_user() - Update user info from Plex API β—¦ Library access control via library IDs β—¦ Permission flags (sync, channels, camera upload)

πŸ“š Documentation

β€’ invites: New invite system documentation β—¦ Complete guide for creating and managing invites β—¦ OAuth redemption flow explanation β—¦ Library and permission configuration β—¦ API endpoint reference β—¦ Troubleshooting common issues

β€’ README: Updated feature list β—¦ Added Plex Invite Management section β—¦ User Accounts management description β—¦ OAuth flow documentation β—¦ Updated technology stack

πŸ› Bug Fixes

β€’ user-refresh: Fixed concurrent refresh operations β—¦ Added refreshingUsers state to track in-progress refreshes β—¦ Disabled refresh button during operation β—¦ Proper loading spinner on individual user refresh

β€’ event-propagation: Fixed copy button click handling β—¦ Prevented card navigation when copying invite links β—¦ Added stopPropagation to copy button clicks β—¦ Success feedback with checkmark icon


2.2.0 (2025-11-25)

🎨 Traffic Visualization Enhancement

New Features

β€’ dashboard: Circular progress traffic cards β—¦ Complete redesign of traffic visualization with circular progress indicators β—¦ Top 5 services by bandwidth displayed with 200px diameter circular progress rings β—¦ Percentage calculated using configured MAX_BANDWIDTH (realistic 3 Gbps = 375 MB/s) β—¦ Color-coded service cards: pink, violet, cyan, emerald, amber rotation β—¦ Removed line charts in favor of cleaner circular progress design β—¦ Active indicator: green pulsing dot on top-right of cards β—¦ Centered layout using flexbox (flex flex-wrap justify-center gap-8) β—¦ Responsive grid fallback for smaller screens

β€’ traffic: Enhanced bandwidth display box β—¦ Two-row layout showing both real-time speeds AND cumulative data β—¦ Row 1: Current speeds (Upload: blue, Download: green, Total: purple) β—¦ Row 2: Total transferred (Uploaded: orange, Downloaded: cyan, Combined: amber) β—¦ formatBandwidth(): Handles MB/s and KB/s for current speeds β—¦ formatData(): Displays GB with automatic TB conversion for values β‰₯1000 GB β—¦ Mono font for consistent number alignment β—¦ Border separator between speed and data rows

β€’ traffic-agent: MAX_BANDWIDTH configuration β—¦ Added MAX_BANDWIDTH = 375.0 (3 Gbps connection = 375 MB/s) β—¦ Backend stores max_bandwidth from agent updates β—¦ TrafficMetrics model includes max_bandwidth field β—¦ Percentage calculation: (serviceBandwidth / max_bandwidth) Γ— 100 β—¦ Fallback to relative percentages if max_bandwidth not configured β—¦ Comment guide: 125 MB/s = 1 Gbps, 1250 MB/s = 10 Gbps, 12.5 MB/s = 100 Mbps

Bug Fixes

β€’ services: Fixed copy button interaction β—¦ Service card copy button now properly stops event propagation β—¦ handleCopyClick uses e.preventDefault() and e.stopPropagation() β—¦ Prevents card link navigation when copying service ID β—¦ Copy feedback shows Check icon for 2 seconds after successful copy

πŸ“š Documentation

β€’ traffic: Updated monitoring documentation β—¦ Documented circular progress visualization approach β—¦ Added MAX_BANDWIDTH configuration examples β—¦ Bandwidth calculation formulas and percentage logic β—¦ Color scheme documentation for service cards


2.1.0 (2025-11-24)

βš™οΈ Configuration Management

New Features

β€’ config: Unified configuration system β—¦ Simplified configuration to two-tier system (environment variables + config.json) β—¦ Removed .env file complexity - only HOST, PORT, DEBUG, CORS_ORIGINS needed β—¦ All application settings (auth, logging, timezone, API tokens, Plex) managed via config.json β—¦ Settings UI provides unified interface for runtime configuration changes β—¦ Created comprehensive CONFIGURATION.md documentation β—¦ Priority order: config.json > environment variables > hardcoded defaults

β€’ config: Settings API with Plex integration β—¦ Added /api/settings endpoint with GET/POST operations β—¦ Pydantic models for LoggingSettings, GeneralSettings, APISettings, PlexSettings β—¦ Moved Plex configuration from database to config.json (server_url, server_token, server_name) β—¦ Database now only stores peak_concurrent statistic β—¦ Live statistics (movies/shows/users) fetched directly from Plex API β—¦ Migration function handles automatic DB β†’ config.json transition

β€’ config: Enhanced Settings UI β—¦ Unified Settings page with single "Save Settings" button β—¦ Sections for Auth, Plex, Logging, General, and API configuration β—¦ Added GitHub token and TMDB API key fields for invite redemption flow β—¦ Plex validation button to test server connection β—¦ All settings load from /api/settings endpoint β—¦ Removed separate Plex save - integrated into main settings save

Bug Fixes

β€’ plex: Fixed OAuth redemption flow β—¦ Updated invite_plex_user_oauth to use settings instead of database β—¦ Fixed 'PlexStatsDB' object has no attribute 'server_url' errors β—¦ Removed all database field references (server_url, server_token, server_name) β—¦ Invites endpoints now use settings.PLEX_SERVER_NAME instead of database query β—¦ get_plex_stats endpoint loads config from config.json and fetches live stats

β€’ docker: Cleaned up environment variables β—¦ Removed application settings from docker-compose.yml (LOG_LEVEL, CORS_ORIGINS, etc.) β—¦ Kept only essential container params (PGID, PUID, TZ, TERM, HOST, PORT, DEBUG) β—¦ CORS moved back to environment variables (deployment-level security setting) β—¦ Simplified .env.example to server parameters only with migration comments

🎨 UI/UX Improvements

New Features

β€’ monitor: Clickable service cards β—¦ Service cards now link directly to service URLs β—¦ Removed separate URL badge - entire card is clickable β—¦ Added hover effects: border highlights to theme-primary color β—¦ Service name changes color on hover for visual feedback β—¦ Maintained target="_blank" for security

β€’ dashboard/services/traffic: Consistent hover effects β—¦ Applied clickable card pattern across all pages β—¦ DashboardServiceCard, ServiceCard, and Traffic cards now clickable β—¦ Unified hover styling: border-theme-primary + shadow-lg β—¦ Action buttons preventDefault to avoid navigation conflicts β—¦ Consistent user experience across the application

πŸ”’ Authentication & Security Improvements

Bug Fixes

β€’ auth: fixed Basic Auth popup with ENABLE_AUTH=false β—¦ Added HTTPBasic(auto_error=False) to prevent automatic authentication challenge β—¦ Changed credentials parameter to Optional[HTTPBasicCredentials] in require_auth dependency β—¦ Fixed browser Basic Auth popup appearing on /api/invites/plex/config endpoint β—¦ Authentication now properly skips when ENABLE_AUTH=false without triggering login prompts β—¦ Added proper credential validation check when auth is enabled

β€’ ui: authentication settings always visible β—¦ Removed conditional rendering of auth settings based on ENABLE_AUTH state β—¦ Auth toggle and credentials form now always visible in Settings page β—¦ Allows dual-layer security: Authelia/Traefik + optional Komandorr Basic Auth β—¦ Dynamic warning message adapts based on auth enabled/disabled state β—¦ Users can enable additional security layer on top of external authentication

Documentation

β€’ authelia: reference configuration β—¦ Created complete Authelia configuration file (authelia-config.yml) β—¦ Proper access control rule ordering (specific domains before wildcards) β—¦ API endpoint bypass rules for /api/_ paths β—¦ Public invite page bypass rules for /invite/_, /invites, /redeem β—¦ NTP time synchronization configuration β—¦ Complete session, regulation, storage, and notifier settings

β€’ traefik: docker-compose labels β—¦ Updated docker-compose.yml with Traefik routing configuration β—¦ Three-router setup: API (priority 100), public invites (priority 90), main app (priority 10) β—¦ API routes bypass Authelia for frontend functionality β—¦ Public invite redemption pages accessible without authentication β—¦ Main application protected by Authelia middleware


2.0.0 (2025-11-23)

πŸŽ‰ Major Release - VOD Invites System

New Features

β€’ invites: Complete VOD invite management system β—¦ New InvitesManager component with full CRUD operations β—¦ Create invite codes with customizable settings (usage limits, expiration, permissions) β—¦ Copy invite links with one-click feedback toast notifications β—¦ Real-time invite statistics: total invites, active invites, total users, active users β—¦ Permission control: allow_sync, allow_camera_upload, allow_channels toggles β—¦ iOS-style toggle switches for permission settings in create modal β—¦ Library selection support (all libraries or specific ones) β—¦ 24-hour time format for all timestamps β—¦ Permission badges display on invite cards (shows "None" when no permissions set)

β€’ invites: Backend API endpoints β—¦ POST /api/invites/ - Create new invite with validation β—¦ GET /api/invites/ - List all invites with users β—¦ GET /api/invites/{invite_id} - Get single invite details β—¦ PUT /api/invites/{invite_id} - Update invite settings β—¦ DELETE /api/invites/{invite_id} - Delete invite β—¦ POST /api/invites/redeem - Redeem invite code and create Plex user β—¦ POST /api/invites/validate - Validate invite code before redemption β—¦ GET /api/invites/stats - Get aggregate invite statistics β—¦ Plex server name integration from PlexStatsDB

β€’ invites: Database schema β—¦ New invites table with code, expiration, usage limits, permissions β—¦ New plex_users table for tracking invited users β—¦ Foreign key relationships between invites and users β—¦ Automatic invite code generation (8-character alphanumeric) β—¦ Soft delete support with is_active flag

β€’ ui: Unified stats card styling β—¦ Traffic page style applied to Dashboard and Invites pages β—¦ Consistent layout: small icon + label on left, large icon on right β—¦ Left-aligned values for better readability β—¦ Rounded-lg borders with shadow-sm hover effects β—¦ Theme-consistent colors and spacing

β€’ plex: Server name display β—¦ Fetch Plex server name from /api/plex/stats endpoint β—¦ Display real server name (e.g., "StreamNet VOD") on invite cards β—¦ Fallback to "Plex Server" if name not available β—¦ Automatic server name fetching on component mount

β€’ navigation: VOD Invites menu item β—¦ New sidebar navigation entry: "VOD Invites" β—¦ Accessible at /invites route β—¦ Film icon for visual consistency

Technical Improvements

β€’ backend: Enhanced Pydantic models β—¦ Invite, InviteCreate, InviteUpdate, InviteWithUsers models β—¦ PlexUser model for user tracking β—¦ RedeemInviteRequest and ValidateInviteResponse models β—¦ Proper serialization with model_dump() support

β€’ frontend: Component architecture β—¦ Reusable toast notifications via ToastContext β—¦ API service abstraction for invite endpoints β—¦ Real-time data fetching and state management β—¦ Internationalization ready with i18next integration

β€’ security: Invite validation β—¦ Expiration checking (date-based) β—¦ Usage limit enforcement β—¦ Active status validation β—¦ Duplicate email prevention

Bug Fixes

β€’ Fixed Pydantic model serialization excluding plex_server field β€’ Fixed console logging showing undefined plex_server values β€’ Fixed stats card alignment issues across different pages β€’ Fixed permission badges not showing when no permissions selected β€’ Fixed JSX syntax errors from duplicate code blocks


1.8.0 (2025-11-21)

Features

β€’ ui: modern premium card design β—¦ Complete visual redesign of DashboardServiceCard and ServiceCard components β—¦ Gradient backgrounds: from-theme-card via-theme-card to-theme-hover β—¦ Enhanced shadows with colored glows on hover (shadow-theme-primary/10) β—¦ Rounded-xl corners (12px) for modern aesthetic β—¦ Icon glow effects with scale animations on hover β—¦ Smooth 300ms transitions throughout

β€’ ui: redesigned service cards β—¦ Clickable card containers linking directly to service URLs β—¦ Removed URL section for cleaner layout β—¦ Action buttons (Check, Edit, Delete) moved to header, right-aligned below status badges β—¦ All buttons use consistent theming with hover effects β—¦ Stats displayed in responsive grid (4 columns with traffic, 2 columns without) β—¦ Enhanced typography: bold headings, semibold badges, uppercase labels

β€’ ui: enhanced status badges β—¦ Gradient backgrounds for status indicators β—¦ Shadow colors matching status (green/red/yellow with 20% opacity) β—¦ Improved text contrast with -400 color variants β—¦ Larger padding and font sizes for better readability

β€’ ui: modern traffic chart β—¦ Complete redesign of DashboardTrafficChart component β—¦ SVG glow filters for chart lines β—¦ Grid background pattern with 20px squares β—¦ Animated pulse indicators on active services β—¦ Card-based legend layout with gradient backgrounds β—¦ Info overlay with animated Activity icon β—¦ Enhanced color scheme with primary/glow properties

β€’ ui: improved modal dropdowns β—¦ ServiceModal type dropdown now uses custom styled dropdown β—¦ Matches group dropdown theme: bg-theme-card, border-theme, shadow-lg β—¦ Selected items highlighted with theme-primary background β—¦ Check icon for selected item, hover effects on options β—¦ Click outside to close functionality

β€’ database: Plex configuration migration β—¦ Created PlexStatsDB table with server_url, server_token, server_name, peak_concurrent fields β—¦ Migrated Plex config from JSON file to SQLite database β—¦ New API endpoints: GET /api/plex/stats, POST /api/plex/stats/peak, POST /api/plex/stats/reset β—¦ Migration script (migrate_plex_to_db.py) created for one-time data transfer β—¦ Automatic migration on server startup checks for JSON file and migrates to database β—¦ Backup created during migration process

β€’ vod: enhanced peak concurrent tracking β—¦ Peak concurrent counter now persists in database instead of localStorage β—¦ Uses React refs to prevent stale closure issues and decreasing values β—¦ Functional setState for accurate peak tracking β—¦ Database persistence enables multi-user sync and centralized stats

Changed

β€’ ui: dynamic stats grid β—¦ Response and Checked boxes take full width (2 columns) when no traffic data β—¦ Expands to 4 columns when upload/download traffic values are present β—¦ Better use of available space based on data availability

β€’ ui: card spacing adjustments β—¦ Increased spacing between service name and type/description badges (mb-2 β†’ mb-3) β—¦ Better visual hierarchy in card headers

Fixed

β€’ dashboard: traffic chart "ALL" tab filtering β—¦ Fixed chart not displaying data on "ALL" tab β—¦ Added special case check: if activeTab === "ALL" show all services β—¦ Previously tried to match "ALL" as a group name

β€’ docs: changelog edit link redirect β—¦ Fixed changelog page edit link to point to root CHANGELOG.md β—¦ Previously pointed to docs/changelog.md (copy) instead of source file β—¦ Added template override in docs/overrides/main.html

1.7.0 (2025-11-20)

Features

β€’ ui: 4-column grid layout β—¦ Service cards now display in 4 columns on large screens (xl:grid-cols-4) β—¦ Applied to Dashboard, Services, Monitor, and Traffic pages β—¦ Improved information density and screen space utilization

‒ ui: compact service cards ◦ Reduced padding, margins, and font sizes across all service cards ◦ ServiceCard: p-6→p-4, text-lg→text-base, optimized spacing ◦ Traffic cards: p-6→p-4, stats padding p-3→p-2, text-xl→text-base ◦ More services visible on screen with less scrolling

β€’ ui: problem badges on service cards β—¦ Added "Slow" badge to services with response_time > 1000ms β—¦ Yellow warning badge displays on Dashboard, Services, and Monitor pages β—¦ Visual indicator for performance issues alongside status badges

β€’ monitoring: average response time card β—¦ Added cumulative average response time stat card to Monitor page β—¦ Displays aggregated response time across all services β—¦ Blue color scheme with Zap icon, consistent with Dashboard

β€’ navigation: clickable stats cards β—¦ Dashboard stats cards now navigate to relevant pages on click β—¦ Upload/Download/Total Transfer β†’ Traffic page β—¦ Avg Response/Active (5min) β†’ Monitor page
β—¦ VOD Streams β†’ VOD Monitor page β—¦ All cards have cursor-pointer for better UX

β€’ i18n: updated navigation labels β—¦ "Services" β†’ "Servers" β—¦ "Monitor" β†’ "Response Monitor" β—¦ "Traffic" β†’ "Traffic Monitor" β—¦ "VOD Streams" β†’ "VOD Monitor" β—¦ Updated in both English and German translations

Changed

β€’ ui: download color scheme β—¦ Changed download traffic color from indigo to green β—¦ Upload remains blue for better visual distinction β—¦ Applied across Dashboard total transfer card

β€’ settings: removed duplicate controls β—¦ Removed theme and language settings from Settings page β—¦ Settings now accessible only via navbar dropdowns β—¦ Cleaner settings page focused on core configuration

Fixed

β€’ dashboard: problem card filtering β—¦ Fixed problem filter to correctly check response_time > 1000ms β—¦ Previously only checked status === "problem" β—¦ Now properly filters services with slow response times

β€’ traffic: tab filtering β—¦ Added "ALL" tab to Traffic, Monitor, Services, and Dashboard β—¦ Fixed tab filtering to actually filter services by selected tab β—¦ Tab counts now accurate and filtering works as expected

β€’ services: missing variable errors β—¦ Fixed groupedServices undefined error in Services.jsx β—¦ Added missing servicesInActiveGroup calculation in Traffic.jsx β—¦ Resolved all console errors related to undefined variables

1.6.0 (2025-11-14)

Features

β€’ backend: SQLite database storage β—¦ Migrated from JSON file storage to SQLite database for better scalability β—¦ Implemented SQLAlchemy ORM with three tables: services, response_history, traffic_history β—¦ Automatic database initialization on first run β—¦ Stores up to 1000 historical data points per service (vs 100 in memory) β—¦ Single database file: backend/data/komandorr.db

β€’ migration: automatic JSON to SQLite import β—¦ Created migration script migrate_to_sqlite.py to import existing services β—¦ Preserves all service data including status, history, and traffic metrics β—¦ Automatically backs up original JSON file as .json.backup β—¦ Smooth upgrade path for existing installations

β€’ database: efficient history management β—¦ Keeps last 100 data points in memory for fast API responses β—¦ Stores up to 1000 points in database for long-term history β—¦ Automatic cleanup of old data points to prevent database bloat β—¦ Timezone-aware datetime handling with naive UTC storage

Changed

β€’ storage: replaced JSON with SQLite β—¦ Services no longer stored in services.json file β—¦ All service data now persisted in komandorr.db database β—¦ Improved query performance for historical data β—¦ Better concurrent access handling

β€’ dependencies: added SQLAlchemy β—¦ Added sqlalchemy>=2.0.0 to requirements.txt β—¦ Updated documentation with SQLite information β—¦ Added database schema documentation

β€’ docs: updated for SQLite β—¦ README now mentions SQLite storage location β—¦ Added migration instructions for existing JSON users β—¦ Updated configuration guide with database details β—¦ Added database schema explanation

Fixed

β€’ type checking: SQLAlchemy ORM type hints β—¦ Added # type: ignore comments for SQLAlchemy ORM operations β—¦ Updated pyrightconfig.json to suppress false positive type errors β—¦ Resolved Pylance warnings about Column type assignments

1.5.8 (2025-11-13)

Features

β€’ ui: clickable stats card filters β—¦ Stats cards now act as filter buttons on Dashboard, Services, and Monitor pages β—¦ Click Total/Online/Offline/Problem cards to filter services by status β—¦ Active filters show colored borders (green/red/yellow) without shadow effects β—¦ All three pages have consistent filtering behavior

β€’ ui: improved empty states β—¦ Added contextual empty state messages when filtering shows no results β—¦ Different icons per state: 🟒 for no online services, βœ“ for no offline/problem β—¦ Themed messages using theme-primary color for better visibility β—¦ Clear, reassuring messages like "All services are operational!"

β€’ ui: redesigned stats cards β—¦ Compact horizontal layout with labels and numbers side-by-side β—¦ Large SVG icons on the right side of each card β—¦ Uppercase labels with wider tracking for better readability β—¦ Fully theme-aware design that adapts to light/dark modes β—¦ Hover effects with shadow transitions

β€’ docs: bootswatch slate theme β—¦ Switched from MkDocs Material to mkdocs-bootswatch slate theme β—¦ Dark theme with Bootstrap 4 styling β—¦ Updated GitHub Actions workflow to use new theme β—¦ Modern, clean design with better readability

Changed

β€’ ui: stats cards are now interactive buttons β—¦ Converted static stats displays to clickable filter controls β—¦ Reduced gap spacing for more compact layout (gap-4) β—¦ Removed hover scale effects in favor of cleaner interactions

β€’ docs: theme dependencies β—¦ Replaced mkdocs-material with mkdocs-bootswatch in requirements β—¦ Updated docs deployment workflow with new theme package

1.5.7 (2025-11-13)

Features

β€’ logging: enhanced logging system with colorama β—¦ Implemented cross-platform colored console output using colorama library β—¦ Added beautiful color-coded log levels (DEBUG=cyan, INFO=green, WARNING=yellow, ERROR=red, CRITICAL=magenta) β—¦ Colored log messages that match their severity level for better readability β—¦ Separate formatters for console (colored) and file (plain text) output β—¦ Enhanced file logging with detailed timestamps and optional module/function/line tracking β—¦ New logger.exception() method for automatic traceback logging β—¦ New logger.set_level() method for dynamic log level changes at runtime β—¦ Auto-delete log file on restart for fresh logging sessions

β€’ configuration: extensive logging customization β—¦ Added LOG_TO_FILE setting to enable/disable file logging (default: true) β—¦ Added LOG_SHOW_TIMESTAMP setting for console timestamps (default: false) β—¦ Added LOG_FILE_INCLUDE_LOCATION setting for module/function info in files (default: true) β—¦ Improved Settings model to include all new logging configuration options β—¦ Logger now reads from Pydantic Settings instead of raw environment variables β—¦ Updated .env.example with comprehensive logging documentation

β€’ traffic-agent: enhanced output formatting β—¦ Created AgentLogger class with colored output for traffic monitoring agent β—¦ Replaced all print statements with proper logging methods β—¦ Color-coded traffic statistics and error messages β—¦ Better visual separation with styled headers and separators

β€’ documentation: comprehensive logging guides β—¦ Created docs/configuration/logging.md with full logging documentation β—¦ Added demo_logger.py script for interactive logging demonstrations β—¦ Created LOGGER_IMPROVEMENTS.md with migration guide and examples β—¦ Created .env.logging.example with configuration templates β—¦ Documentation covers all log levels, configuration options, and best practices

Changed

β€’ dependencies: added colorama β—¦ Added colorama>=0.4.6 to backend/requirements.txt β—¦ Added colorama>=0.4.6 to traffic/requirements.txt β—¦ Cross-platform colored terminal support for Windows, macOS, and Linux

β€’ logging: improved uvicorn integration β—¦ Updated UvicornFormatter to use colorama instead of ANSI codes β—¦ Consistent color scheme between application and server logs β—¦ Better startup messages with styled output

β€’ backend: configuration enhancements β—¦ Settings class now includes LOG_TO_FILE, LOG_SHOW_TIMESTAMP, LOG_FILE_INCLUDE_LOCATION β—¦ Logger singleton pattern ensures consistent configuration across application β—¦ Backward compatible with existing logging code (100% compatibility)

Technical Details

β€’ architecture: enhanced logger class β—¦ ColoredConsoleFormatter class for terminal output with colorama β—¦ DetailedFileFormatter class for structured file logging β—¦ Singleton pattern prevents duplicate logger instances β—¦ Timezone-aware timestamps using ZoneInfo β—¦ UTF-8 encoding support for international characters β—¦ Automatic log directory creation β—¦ Graceful degradation to console-only if file logging fails

β€’ benefits β—¦ Easier debugging with color-coded severity levels β—¦ Professional-looking console output β—¦ Detailed file logs for troubleshooting and auditing β—¦ Highly configurable without code changes β—¦ Cross-platform consistency β—¦ Zero breaking changes - fully backward compatible

1.5.6 (2025-11-10)

Features

β€’ assets: upgraded logo and favicon to SVG format β—¦ Replaced PNG logo and favicon files with scalable SVG versions β—¦ Updated all frontend components to use SVG logo (/logo.svg) β—¦ Updated frontend HTML to use SVG favicon with proper MIME type (image/svg+xml) β—¦ Updated backend API documentation favicon reference to SVG β—¦ Updated MkDocs configuration to use SVG assets for documentation β—¦ Updated main README.md to reference SVG logo β—¦ Updated documentation index.md to use SVG logo β—¦ Copied SVG assets to all necessary directories (backend/icons/, docs/images/)

Changed

β€’ quality: improved visual assets β—¦ SVG format provides better scalability and quality at all sizes β—¦ Smaller file sizes compared to PNG equivalents β—¦ Vector graphics eliminate pixelation on high-DPI displays β—¦ Future-proof format compatible with all modern browsers β—¦ Maintained PNG versions as legacy backups

β€’ documentation: updated asset references β—¦ Updated docs/images/README.md to reflect both SVG and PNG versions β—¦ Updated docs/README.md structure documentation β—¦ All documentation now uses superior SVG format

1.5.5 (2025-11-09)

Features

β€’ ui: comprehensive mobile responsiveness β—¦ Optimized all pages for mobile devices with responsive layouts β—¦ Reduced padding and spacing on small screens (px-3 sm:px-4, py-4 sm:py-6) β—¦ Improved button layouts with proper flex wrapping and mobile-first sizing β—¦ Smaller text sizes on mobile (text-xs sm:text-sm, text-2xl sm:text-3xl) β—¦ Smaller icon sizes on mobile (size={16} to size={18}) β—¦ Full-width buttons on mobile that adapt to inline on larger screens β—¦ Responsive search inputs with proper mobile sizing β—¦ Updated all main pages: Dashboard, Services, Monitor, Traffic, VOD Streams β—¦ Updated Settings and About pages with mobile-optimized headers β—¦ TopNavbar padding reduced for mobile (px-3 sm:px-6) β—¦ Layout properly handles mobile width constraints

β€’ ux: improved mobile interactions β—¦ Buttons now use justify-center for better mobile alignment β—¦ Action buttons expand to full width on mobile, inline on desktop β—¦ Better touch targets with appropriate padding on mobile β—¦ Responsive gap spacing (gap-2 sm:gap-3, gap-3 sm:gap-4) β—¦ Proper text truncation on small screens β—¦ Flexible button groups that wrap on mobile

Changed

β€’ layout: mobile-first approach β—¦ All pages now use responsive spacing utilities β—¦ Consistent mobile breakpoint usage across all components β—¦ Better utilization of screen real estate on mobile devices β—¦ Improved readability with appropriate font scaling

1.5.1 (2025-11-09)

Features

β€’ ui: group-based filtering across all pages β—¦ Added group tabs to Monitor page with service filtering by selected group β—¦ Added group tabs to Traffic page with service filtering by selected group β—¦ Added group tabs to Services page with service filtering by selected group β—¦ Tabs display group name and service count for each group β—¦ Only visible when multiple groups exist β—¦ Consistent tab styling across Dashboard, Monitor, Traffic, and Services pages

β€’ ux: background refresh improvements β—¦ Dashboard now preserves scroll position during automatic 30-second updates β—¦ Dashboard maintains active group tab selection during background refresh β—¦ Monitor preserves scroll position during automatic 10-second updates β—¦ Monitor maintains active group tab selection during background refresh β—¦ Traffic preserves scroll position during automatic 10-second updates β—¦ Traffic maintains active group tab selection during background refresh β—¦ Services preserves scroll position during automatic 30-second updates β—¦ Services maintains active group tab selection during background refresh β—¦ All pages update seamlessly without disrupting user's current view or context β—¦ Loading states only shown on initial load, not during auto-refresh

Changed

β€’ navigation: improved user experience β—¦ All pages now support consistent group-based filtering β—¦ Auto-refresh intervals maintained: Dashboard/Services (30s), Monitor/Traffic (10s) β—¦ Scroll position and tab context preserved across all pages

1.5.0 (2025-11-09)

Features

β€’ dashboard: comprehensive UI/UX improvements β—¦ Created dedicated DashboardServiceCard component for dashboard-specific service display β—¦ Added horizontal stats bar layout with individual stat boxes (Response Time, Last Check, Upload/Download Speed) β—¦ Removed Service ID display from dashboard cards for cleaner appearance β—¦ Integrated real-time traffic data directly into dashboard service cards β—¦ Stats now display with proper labels above values for consistent card sizing β—¦ Added conditional rendering for traffic data (only shows when available) β—¦ Created DashboardTrafficChart component with enhanced multi-service bandwidth visualization

  • Traffic chart displays all active services with distinct colored wave lines
  • Toggle between upload/download bandwidth views with pill-style switcher
  • Last 60 data points with auto-scaling Y-axis and labeled values
  • Service legend with color indicators and current bandwidth values
  • 10 distinct colors for different services (blue, green, amber, red, violet, pink, cyan, emerald, orange, indigo)
  • Gradient area fills under each service line for better visibility
  • Auto-refresh every 30 seconds with dashboard traffic data
  • Dedicated refresh button with spinning animation
  • Total bandwidth display showing aggregate upload/download speed
  • Sleek dark theme with thinner lines (1.2px) for professional appearance
  • Subtle gradients (12% opacity) and minimal grid lines
  • Y-axis labels with compact spacing for easy value reading
  • Responsive legend grid layout (1-4 columns based on screen size)
  • Service cards with hover effects and smooth transitions
  • Group-based filtering: Chart positioned below group tabs and filters traffic by active group
  • Dynamic filtering shows only services in the selected group tab
  • Automatic refresh maintains group context
  • Ultra-thin lines: Reduced to 0.25px for sleek, modern appearance matching design specifications

β—¦ Dashboard Customization: Added comprehensive visibility and appearance controls

  • New "Customize" button with Settings icon in dashboard header
  • Modal popup interface with backdrop blur and smooth animations
  • Toggle visibility of Statistics Card, Traffic Chart, and Service Cards independently
  • Chart Line Thickness Control: Interactive slider to adjust traffic chart line width (0.1px - 2px)
  • Real-time preview with current value display
  • Color-coded slider progress bar
  • Dynamic drop shadow scaling based on thickness
  • Smooth transitions when changing values
  • Settings persist in localStorage across sessions
  • Eye/EyeOff icons indicate current visibility state (green/gray)
  • iOS-style toggle switches replace checkboxes for modern appearance
  • Organized layout with divider separating visibility and appearance settings
  • Fully translated (English/German) with dashboard.customize, dashboardVisibility, showStatsCard, showTrafficChart, showServiceCards, chartLineThickness, thin, thick keys

β€’ services: enhanced service card design β—¦ Redesigned ServiceCard component with modern badge-based layout β—¦ Added Service ID display with copy-to-clipboard functionality β—¦ Conditional icon display (only renders if service has custom icon) β—¦ Improved action button layout with primary "Check Now" button β—¦ Consistent badge styling across all service information

β€’ about: improved release section β—¦ Limited release display to 5 most recent releases for better performance β—¦ Added "View All Releases" button in section header (right-aligned) β—¦ Button only appears when more than 5 releases are available β—¦ Direct link to GitHub releases page for full release history β—¦ Added translations for "View All Releases" (English/German)

β€’ about: enhanced documentation access β—¦ Added direct link to documentation site (https://cyb3rgh05t.github.io/komandorr) β—¦ Separated "Documentation" and "API Documentation" links for clarity β—¦ Both links open in new tabs with proper external link icons

β€’ ui: improved consistency and polish β—¦ Added skeleton loading animations across all pages (Dashboard, Monitor, Traffic, Services) β—¦ Standardized content width across all pages (removed inconsistent max-width constraints) β—¦ All icons now use solid colors (removed opacity/fade effects) β—¦ Consistent badge styling: px-2.5 py-1 bg-theme-hover border border-theme rounded-md β—¦ Progress bars now use solid theme colors throughout

β€’ vodstreams: comprehensive timestamp tracking system β—¦ Implemented localStorage-based activity timestamp tracking with persistence β—¦ Added live timer badges showing elapsed time for active downloads β—¦ Smart tracking logic: starts immediately for new activities (<2%), waits for 1% progress change for in-progress activities β—¦ Timer states: undefined (new) β†’ null (waiting) β†’ number (tracking with timestamp) β—¦ Fixed timer reset issues on page refresh with proper state management β—¦ Added "Tracking..." state for activities waiting to start timing β—¦ Real-time timer updates with live elapsed time display

Bug Fixes

β€’ dashboard: fixed missing Search icon import β—¦ Re-added Search icon to imports after cleanup β—¦ Fixed ReferenceError when rendering search bar

β€’ traffic: fixed refresh button functionality β—¦ Updated fetchTrafficData to accept isManualRefresh parameter β—¦ Fixed refresh button not showing animation during manual refresh β—¦ Prevented automatic interval updates from clearing refresh state

β€’ backend: added traffic_history to API response β—¦ Modified /traffic/summary endpoint to include traffic_history field β—¦ Limited history to last 60 data points to optimize response size β—¦ Fixed dashboard traffic chart showing no data

Documentation

β€’ docs: improved styling and readability β—¦ Darkened primary navbar color from #e97b2e to #c05d1a for better contrast β—¦ Updated accent color from #ff8c42 to #d9681f for more professional appearance β—¦ Fixed badge rendering in documentation home page β—¦ Converted markdown badge syntax to proper HTML with alignment attributes β—¦ Added CSS improvements for center-aligned content and badge spacing β—¦ Better visual hierarchy and spacing throughout documentation

Internationalization

β€’ locales: added new translation keys β—¦ Added "documentation" key to English and German locales β—¦ Added "viewAllReleases" key for release section button β—¦ Added "trafficChart" key for dashboard traffic overview β—¦ Added "noData" and "noActiveTraffic" keys for traffic chart empty states β—¦ English: "Documentation", "View All Releases", "Traffic Overview", "No traffic data available", "No active traffic" β—¦ German: "Dokumentation", "Alle Releases anzeigen", "Traffic-Übersicht", "Keine Traffic-Daten verfΓΌgbar", "Kein aktiver Traffic"

1.4.2 (2025-11-08)

Bug Fixes

β€’ version: hardcoded fallback causing false update alerts β—¦ Removed hardcoded version fallback from '1.4.0' to 'unknown' β—¦ Fixed "Update Available" badge showing incorrectly when on latest version β—¦ Version now properly read from release.txt in Docker containers

β€’ monitoring: timezone issues in service check timestamps β—¦ Changed backend to use UTC timestamps (datetime.now(timezone.utc)) for all service checks β—¦ Fixed "Last Check" showing incorrect times (e.g., "1h ago" when just checked) β—¦ Improved formatDistanceToNow() with validation and edge case handling β—¦ Added null/undefined checks and invalid date handling β—¦ Timestamps now consistent across all timezones in Docker deployments

Features

β€’ debug: version troubleshooting endpoint β—¦ Added /api/version/debug endpoint for diagnosing version detection issues β—¦ Shows environment type (docker/local), file paths, existence, and content β—¦ Helps troubleshoot path issues in containerized deployments

Documentation

β€’ docs: cleaner appearance and proper branding β—¦ Removed all emoji characters from documentation files β—¦ Copied logo.png and favicon.png from frontend to docs/images β—¦ Updated mkdocs.yml to use separate favicon.png file β—¦ Replaced emoji bullets with plain text throughout documentation β—¦ Changed 'Made with ❀️' to 'Made with love'

1.4.1 (2025-11-08)

Bug Fixes

β€’ traffic: timestamp display and timezone handling β—¦ Fixed traffic last_updated timestamp not being loaded correctly from JSON storage β—¦ Added proper datetime deserialization for traffic metrics and history on service load β—¦ Changed backend to use UTC timestamps (datetime.now(timezone.utc)) for consistency β—¦ Updated frontend to display timestamps in 24-hour format (DD/MM/YYYY, HH:MM:SS) β—¦ Timestamps now automatically convert from UTC to user's local timezone β—¦ Added "Never" fallback when no traffic data has been received β—¦ Created formatDateTime() helper function for consistent datetime formatting across Traffic page

1.4.0 (2025-11-08)

Features

β€’ vod streams: plex integration β—¦ Added new "VOD Streams" sidebar tab for monitoring Plex Media Server activities β—¦ Implemented Plex server configuration in Settings page with URL and token input β—¦ Added validation for Plex server connection before saving configuration β—¦ Real-time display of Plex downloads, streams, and transcode activities β—¦ Activity cards show progress bars, type badges (download/stream/transcode/pause), and titles β—¦ Monitor-style header with search functionality, LIVE indicator, and refresh button β—¦ Auto-refresh every 10 seconds for real-time activity updates β—¦ Three stat cards: Total activities, Online (downloads), Problem (errors) β—¦ Pagination support (10 items per page) for large activity lists β—¦ "Not configured" state with direct link to Settings when Plex is not set up β—¦ Bilingual support (English/German) for all UI elements

β€’ plex backend: comprehensive api β—¦ Created /api/plex/config endpoints (GET/POST) for Plex server configuration management β—¦ Added /api/plex/validate endpoint for testing Plex connection before saving β—¦ Implemented /api/plex/activities endpoint fetching from both /activities (downloads) and /status/sessions (streams) β—¦ Added /api/downloads alias endpoint for compatibility β—¦ JSON file storage for Plex configuration at backend/data/plex_config.json β—¦ Debug endpoint /api/plex/debug/raw-activities for troubleshooting β—¦ Proper error handling and logging for all Plex operations

β€’ traffic monitoring: dashboard integration β—¦ Added traffic data display to Dashboard service cards β—¦ Shows upload/download speeds with color-coded icons (blue for upload, green for download) β—¦ Auto-refresh traffic data every 30 seconds β—¦ Traffic only displays when bandwidth > 0 for cleaner UI β—¦ Maintains separate layouts for Dashboard (inline cards) and Services page (ServiceCard component)

β€’ search functionality: vod streams β—¦ Implemented real-time search filtering for VOD activities β—¦ Search by title, subtitle, or activity type β—¦ Auto-reset to page 1 when search query changes β—¦ Clear search button when no results found β—¦ Different empty state messages for no activities vs. no search results

β€’ settings page: plex configuration β—¦ Added Plex Server Settings section below Authentication settings β—¦ Server URL and token input fields with validation β—¦ Visual feedback: green button for validated connection, red for failed β—¦ Loading spinner during validation process β—¦ Help text for finding Plex token β—¦ Theme-compatible button styling (smaller size, proper colors)

Fixed

β€’ timezone: configuration bug β—¦ Fixed timezone always showing UTC in About page β—¦ Removed conflicting @property timezone that was checking for TZ environment variable β—¦ Now correctly reads TIMEZONE from .env file (e.g., Europe/Berlin) β—¦ Backend properly returns configured timezone via /api/config endpoint β—¦ Frontend dateUtils correctly fetches and caches timezone for all date formatting

β€’ settings: duplicate authentication section β—¦ Removed duplicate Authentication Settings section that appeared after Plex settings β—¦ Proper order: Authentication β†’ Plex β†’ Language β†’ Theme

β€’ plex settings: button sizing β—¦ Changed buttons from flex-1 (full width) to fixed width with px-6 padding β—¦ Reduced button height (py-2 instead of py-3) and font size (text-sm) β—¦ Smaller icons (16px instead of 20px, h-4 w-4 spinner)

Changed

β€’ dateUtils: improved timezone fetching β—¦ Added caching mechanism to prevent multiple simultaneous timezone fetches β—¦ Console logging of loaded timezone for debugging β—¦ Proper async handling with promise reuse during concurrent requests

Technical

β€’ service layer: plex abstraction β—¦ Created frontend/src/services/plexService.js with clean API methods β—¦ Methods: testPlexConnection, getPlexConfig, savePlexConfig, fetchPlexActivities β—¦ Normalized data structure from different Plex endpoints β—¦ Proper error handling and user-friendly error messages

β€’ translations: comprehensive coverage β—¦ Added vodStreams section to en.json and de.json β—¦ Added plex section with server settings, validation, and status messages β—¦ All UI elements fully translated in English and German

β€’ dependencies: pydantic settings β—¦ Added pydantic-settings package for proper configuration management β—¦ Required for Pydantic v2 BaseSettings functionality

1.3.2 (2025-11-06)

Features

β€’ service types: added server type β—¦ Added "Server" as a new service type option in Add/Edit Service modal β—¦ Server type available for traffic monitoring without health checks β—¦ Added translations for server type in English and German

Changed

β€’ Updated service type dropdown to include server option β€’ Enhanced service type flexibility for different monitoring scenarios

1.3.1 (2025-11-06)

Features

β€’ ui: logo integration β—¦ Added Komandorr logo to sidebar, loading screen, and README β—¦ Integrated favicon.png for browser tabs β—¦ Sidebar logo displays at 48px height with auto-width β—¦ Loading screen logo displays at 64px height β—¦ README logo displays centered at 400px width

β€’ ui: refresh button improvements β—¦ Added smooth spin animation to all refresh buttons β—¦ Renamed "Check Now" buttons to "Refresh" across all pages β—¦ Added 500ms transition duration for smooth rotation β—¦ Implemented disabled state during refresh operations

β€’ ui: loading improvements β—¦ Replaced in-app LoadingScreen with themed Loader2 spinner β—¦ LoadingScreen now only used for initial app startup β—¦ Added minimum display time (1 second) for smooth UX β—¦ Implemented 300ms transition delay before hiding loading screen β—¦ Monitor and Services pages now use simple Loader2 component

β€’ ui: consistent page padding β—¦ Unified all page containers to use px-4 py-6 space-y-6 β—¦ Removed inconsistent padding across Dashboard, Traffic, and other pages β—¦ All pages now have uniform spacing and alignment

β€’ logging: colored and consistent output β—¦ Implemented ColoredFormatter with ANSI color codes for different log levels β—¦ Removed timestamps from console output for cleaner formatting β—¦ All log messages now follow format: LEVELNAME - message β—¦ Color scheme: DEBUG (Cyan), INFO (Green), WARNING (Yellow), ERROR (Red), CRITICAL (Magenta) β—¦ Created custom UvicornFormatter to match application logging style β—¦ Unified all uvicorn logs (startup, requests, errors) with consistent formatting

Changed

β€’ traffic: header removal β—¦ Removed header section from Traffic page for cleaner layout β—¦ Traffic page now directly displays summary cards

β€’ translations: updated labels β—¦ Updated German translation: "Jetzt prΓΌfen" β†’ "Aktualisieren" β—¦ Updated English translation: "Check Now" β†’ "Refresh"

Fixed

β€’ ui: width consistency β—¦ Fixed inconsistent page widths between Dashboard and other pages β—¦ Standardized container padding across all page components

1.3.0 (2025-11-06)

Features

β€’ ui: improved service card styling β—¦ Redesigned service cards with cleaner, more cohesive theme-based appearance β—¦ Removed gradient-style colored backgrounds and borders β—¦ Unified styling using bg-theme-card for consistent look across all themes β—¦ Added subtle shadows for better depth perception β—¦ Improved button hover states with theme-consistent backgrounds β—¦ Reduced icon sizes (18px to 16px) for cleaner appearance β—¦ Tightened button spacing for more compact design

β€’ themes: enhanced theme consistency β—¦ Fixed theme variable inconsistencies between :root and [data-theme="dark"] β—¦ Unified background gradient application across default and dark themes β—¦ Improved theme variable definitions for better cross-theme compatibility

Changed

β€’ dashboard: service grouping improvements β—¦ Enhanced service grouping with tabbed interface for multiple groups β—¦ Single group displays in simple grid layout without tabs β—¦ Improved group header styling and count badges β—¦ Better visual separation between grouped and ungrouped services

β€’ services: consistent card styling β—¦ Applied unified styling to ServiceCard component β—¦ Improved icon container presentation with borders β—¦ Enhanced badge styling for service descriptions and types β—¦ Better visual hierarchy in service information display

1.2.2 (2025-11-06)

Documentation

β€’ changelog: adopt vodwisharr format β—¦ Reformatted changelog to match vodwisharr style β—¦ Added compare links in version headers β—¦ Changed to bullet point format with β€’ and β—¦ symbols β—¦ Categorized sections with prefixes (settings:, auth:, docker:, etc.)

β€’ traffic: improve agent documentation β—¦ Clarified systemd service WorkingDirectory configuration β—¦ Added recommended directory structure examples β—¦ Included common installation paths and best practices

1.2.1 (2025-11-06)

Changed

β€’ settings: default theme and language β—¦ Default theme changed from Dark to Plex β—¦ Default language set to English β—¦ Authentication disabled by default

β€’ version: improved version management β—¦ Improved version reading from release.txt β—¦ Fixed path resolution for both Docker and local development environments β—¦ Better version comparison and update detection

Fixed

β€’ auth: fix authentication bypass issues β—¦ Fixed login screen appearing briefly when authentication is disabled β—¦ Frontend now checks auth status before showing login screen β—¦ Proper auth bypass when ENABLE_AUTH=false

β€’ docker: container and deployment fixes β—¦ Removed problematic USER directive that caused permission errors β—¦ Made logger fault-tolerant for permission issues β—¦ Fixed release.txt copy in Docker build process β—¦ Corrected path resolution in containerized environment

β€’ settings: timezone configuration β—¦ Unified timezone configuration (removed duplicate TIMEZONE variable) β—¦ Backend now reads TZ environment variable directly β—¦ Fixed UTC display issue in About page

1.2.0 (2025-11-05)

Features

β€’ traffic: complete traffic monitoring system β—¦ New Traffic page in sidebar with real-time bandwidth monitoring β—¦ Traffic summary cards showing active services and current bandwidth usage β—¦ Service-level traffic statistics with upload/download speeds β—¦ Traffic monitoring agent script for remote servers (traffic_agent.py) β—¦ API endpoints for traffic data collection and retrieval β—¦ Traffic metrics models (TrafficMetrics, TrafficDataPoint, TrafficUpdate) β—¦ Complete documentation (TRAFFIC_AGENT.md, TRAFFIC_SETUP.md, TRAFFIC_IMPLEMENTATION.md)

β€’ services: service ID management β—¦ Service ID display with copy-to-clipboard functionality in service cards β—¦ Service ID visibility for easy agent configuration

1.1.1 (2024-XX-XX)

Bug Fixes

β€’ version: version check improvements (commit)

1.1.0 (2024-XX-XX)

Features

β€’ releases: add version check functionality (commit) β—¦ Release and version check functionality

1.0.0 (2024-XX-XX)

Features

β€’ dashboard: initial release β—¦ Dashboard with service overview β—¦ Service management (add, edit, delete services) β—¦ Service monitoring with real-time status checks

β€’ docker: container support β—¦ Docker container support with compose configuration

β€’ ui: theme and language support β—¦ Multi-theme support (Dark, Plex, Jellyfin, Emby, etc.) β—¦ Multi-language support (English, German)

β€’ auth: authentication system β—¦ Basic authentication support

β€’ settings: configuration management β—¦ Settings management interface β—¦ About page with version information

β€’ github: integration β—¦ GitHub integration for update checks