Release v2.1.0 - Dynamic UI and Portability Update

iv3jdv
Mon, 27 Apr 2026 19:07:53 +0200

This major release introduces a more intelligent user interface, removes legacy hardcoded paths, and significantly improves system security and deployment flexibility across both the Central Console and the Remote Agent.

✨ New Features
Dynamic Node Profiles: Replaced the static "Profile A/B" system with a fully dynamic rendering engine. The dashboard now automatically generates control buttons based on the profiles dictionary defined in each node's node_config.json. If no profiles are defined, the section is automatically hidden to maintain a clean UI.

Smart Node Recognition (Hotspot vs. Repeater): The dashboard now parses the Duplex parameter from the MMDVMHost payload.

Nodes are automatically tagged with a color-coded badge (HOTSPOT or REPEATER) next to their ID.

Simplex Auto-Optimization: For nodes identified as Hotspots (Duplex: 0), the TimeSlot 1 interface is automatically hidden, as it is not applicable in simplex mode.

Configurable MQTT Topics: Subscription topics in the Central Console are no longer hardcoded in the source code. They can now be fully customized via the topics array in config.json, with a built-in fallback to standard defaults.

🛠️ Improvements & Refactoring
Absolute Path Portability: Removed all hardcoded /opt/ paths from the system_monitor.py agent. The script now uses dynamic path resolution via file. The agent can now be installed and executed from any directory without requiring code changes.

UI Layout Optimization: Fixed a Flexbox rendering issue where administration buttons (Service, File, Hat, Reboot) would stretch unnaturally when wrapping to a new line. They are now contained within a dedicated flex-group to maintain consistent proportions.

Project Documentation: Introduced "Step 0: Root Privileges" in README.md and install.txt for both the Server and Agent repositories. This ensures users elevate privileges (sudo su) before creating virtual environments or configuring systemd services, preventing common "Permission Denied" errors.

🔒 Security & Bug Fixes
Access Control for Telegram Commands: Fixed a UI vulnerability where Telegram ON/OFF buttons were visible to unauthorized or unlogged users. These controls are now strictly protected by the canControl permission logic.

JSON Parser Robustness: Improved the Agent's configuration loader to handle empty profile sets and prevent crashes during JSON parsing.

📦 Component Updates
Backend (app.py): Updated MQTT logic for dynamic subscriptions and duplex data extraction.

Frontend (index.html): Implemented new NOC-style badges and conditional rendering for profiles/timeslots.

Agent (system_monitor.py): Updated with dynamic pathing and improved logging.