Dashboard (dashboard/src/dashboard.tsx, settings.tsx, apiAcademicPeriods.ts): - Refactor loadHolidayStatus to useCallback with stable empty-deps reference; removes location.pathname dependency that caused overlapping API calls at mount and left the banner unresolved via request-sequence cancellation - Add key prop derived from severity:text to Syncfusion MessageComponent to force remount on state change, fixing stale banner that ignored React prop/children updates - Correct German transliterated text to proper Umlauts throughout visible UI strings (fuer -> für, oe -> ö, ae -> ä etc. across dashboard and settings views) Backend (server/init_academic_periods.py): - Refactor to idempotent two-phase flow: seed default periods only when table is empty; on every run activate exactly the non-archived period covering date.today() - Enforces single-active invariant by deactivating all periods before promoting match - Emits explicit warning when no period covers current date instead of doing nothing Deployment (docker-compose.prod.yml): - Add init_academic_periods.py to server startup chain after migrations and defaults; eliminates manual post-deploy step to set an active academic period Release docs: - program-info.json: bump to 2026.1.0-alpha.16; fix JSON parse error caused by typographic curly quotes in the new changelog entry - TECH-CHANGELOG.md: detailed alpha.16 section with root-cause motivation for both dashboard refactoring decisions (unstable callback ref + Syncfusion stale render) - DEV-CHANGELOG.md: document dashboard refactor, Syncfusion key fix, Umlaut changes, and program-info JSON regression and fix - README.md: add Latest Release Highlights section for alpha.16 - .github/copilot-instructions.md: sync file map, prod bootstrap note, backend and frontend pattern additions for academic period init and Syncfusion remount pattern
196 lines
10 KiB
JSON
196 lines
10 KiB
JSON
{
|
||
"appName": "Infoscreen-Management",
|
||
"version": "2026.1.0-alpha.16",
|
||
"copyright": "© 2026 Third-Age-Applications",
|
||
"supportContact": "support@third-age-applications.com",
|
||
"description": "Eine zentrale Verwaltungsoberfläche für digitale Informationsbildschirme.",
|
||
"techStack": {
|
||
"Frontend": "React, Vite, TypeScript, Syncfusion UI Components (Material 3)",
|
||
"Backend": "Python (Flask), SQLAlchemy",
|
||
"Database": "MariaDB",
|
||
"Realtime": "Mosquitto (MQTT)",
|
||
"Containerization": "Docker"
|
||
},
|
||
"openSourceComponents": {
|
||
"frontend": [
|
||
{ "name": "React", "license": "MIT" },
|
||
{ "name": "Vite", "license": "MIT" },
|
||
{ "name": "Lucide Icons", "license": "ISC" },
|
||
{ "name": "Syncfusion UI Components", "license": "Kommerziell / Community" }
|
||
],
|
||
"backend": [
|
||
{ "name": "Flask", "license": "BSD" },
|
||
{ "name": "SQLAlchemy", "license": "MIT" },
|
||
{ "name": "Paho-MQTT", "license": "EPL/EDL" },
|
||
{ "name": "Alembic", "license": "MIT" }
|
||
]
|
||
},
|
||
"buildInfo": {
|
||
"buildDate": "2025-12-29T12:00:00Z",
|
||
"commitId": "9f2ae8b44c3a"
|
||
},
|
||
"changelog": [
|
||
{
|
||
"version": "2026.1.0-alpha.16",
|
||
"date": "2026-04-02",
|
||
"changes": [
|
||
"✅ Dashboard: Der Ferienstatus-Banner zeigt die aktive akademische Periode jetzt zuverlässig nach Hard-Refresh und beim Wechsel zwischen Dashboard und Einstellungen.",
|
||
"🧭 Navigation: Der Link vom Ferienstatus-Banner zu den Einstellungen bleibt stabil und funktioniert konsistent für Admin-Rollen.",
|
||
"🚀 Deployment: Akademische Perioden werden nach Initialisierung automatisch für das aktuelle Datum aktiviert (kein manueller Aktivierungsschritt direkt nach Rollout mehr nötig).",
|
||
"🔤 Sprache: Mehrere deutsche UI-Texte im Dashboard wurden auf korrekte Umlaute umgestellt (zum Beispiel für, prüfen, Vorfälle und Ausfälle)."
|
||
]
|
||
},
|
||
{
|
||
"version": "2026.1.0-alpha.15",
|
||
"date": "2026-03-31",
|
||
"changes": [
|
||
"✨ Einstellungen: Ferienverwaltung pro akademischer Periode verbessert (Import/Anzeige an ausgewählte Periode gebunden).",
|
||
"➕ Ferienkalender: Manuelle Ferienpflege mit Erstellen, Bearbeiten und Löschen direkt im gleichen Bereich.",
|
||
"✅ Validierung: Ferien-Datumsbereiche werden bei Import und manueller Erfassung gegen die gewählte Periode geprüft.",
|
||
"🧠 Ferienlogik: Doppelte Einträge werden verhindert; identische Überschneidungen (Name+Region) werden automatisch zusammengeführt.",
|
||
"⚠️ Import: Konfliktfälle bei überlappenden, unterschiedlichen Feiertags-Identitäten werden übersichtlich ausgewiesen.",
|
||
"🎯 UX: Dateiauswahl im Ferien-Import zeigt den gewählten Dateinamen zuverlässig an.",
|
||
"🎨 UI: Ferien-Tab und Dialoge an die definierten Syncfusion-Designregeln angeglichen."
|
||
]
|
||
},
|
||
{
|
||
"version": "2026.1.0-alpha.14",
|
||
"date": "2026-01-28",
|
||
"changes": [
|
||
"✨ UI: Neue 'Ressourcen'-Seite mit Timeline-Ansicht zeigt aktive Events für alle Raumgruppen parallel.",
|
||
"📊 Ressourcen: Kompakte Zeitachsen-Darstellung.",
|
||
"🎯 Ressourcen: Zeigt aktuell laufende Events mit Typ, Titel und Zeitfenster in Echtzeit.",
|
||
"🔄 Ressourcen: Gruppensortierung anpassbar mit visueller Reihenfolgen-Verwaltung.",
|
||
"🎨 Ressourcen: Farbcodierte Event-Balken entsprechend dem Gruppen-Theme."
|
||
]
|
||
},
|
||
{
|
||
"version": "2025.1.0-alpha.13",
|
||
"date": "2025-12-29",
|
||
"changes": [
|
||
"👥 UI: Neue 'Benutzer'-Seite mit vollständiger Benutzerverwaltung (CRUD) für Admins und Superadmins.",
|
||
"🔐 Benutzer-Seite: Sortierbare Gitter-Tabelle mit Benutzer-ID, Benutzername und Rolle; 20 Einträge pro Seite.",
|
||
"📊 Benutzer-Seite: Statistik-Karten zeigen Gesamtanzahl, aktive und inaktive Benutzer.",
|
||
"➕ Benutzer-Seite: Dialog zum Erstellen neuer Benutzer (Benutzername, Passwort, Rolle, Status).",
|
||
"✏️ Benutzer-Seite: Dialog zum Bearbeiten von Benutzer-Details mit Schutz vor Selbst-Änderungen.",
|
||
"🔑 Benutzer-Seite: Dialog zum Zurücksetzen von Passwörtern durch Admins (ohne alte Passwort-Anfrage).",
|
||
"❌ Benutzer-Seite: Dialog zum Löschen von Benutzern (nur für Superadmins; verhindert Selbst-Löschung).",
|
||
"📋 Benutzer-Seite: Details-Modal zeigt Audit-Informationen (letzte Anmeldung, Passwort-Änderung, Abmeldungen).",
|
||
"🎨 Benutzer-Seite: Rollen-Abzeichen mit Farb-Kodierung (Benutzer: grau, Editor: blau, Admin: grün, Superadmin: rot).",
|
||
"🔒 Header-Menü: Neue 'Passwort ändern'-Option im Benutzer-Dropdown für Selbstbedienung (alle Benutzer).",
|
||
"🔐 Passwort-Dialog: Authentifizierung mit aktuellem Passwort erforderlich (min. 6 Zeichen für neues Passwort).",
|
||
"🎯 Rollenbasiert: Menu-Einträge werden basierend auf Benutzer-Rolle gefiltert (z.B. 'Benutzer' nur für Admin+)."
|
||
]
|
||
},
|
||
{
|
||
"version": "2025.1.0-alpha.12",
|
||
"date": "2025-11-27",
|
||
"changes": [
|
||
"✨ Dashboard: Komplett überarbeitetes Dashboard mit Karten-Design für alle Raumgruppen.",
|
||
"📊 Dashboard: Globale Statistik-Übersicht zeigt Gesamt-Infoscreens, Online/Offline-Anzahl und Warnungen.",
|
||
"🔍 Dashboard: Filter-Buttons (Alle, Online, Offline, Warnungen) mit dynamischen Zählern.",
|
||
"🎯 Dashboard: Anzeige des aktuell laufenden Events pro Gruppe (Titel, Typ, Datum, Uhrzeit in lokaler Zeitzone).",
|
||
"📈 Dashboard: Farbcodierte Health-Bars zeigen Online/Offline-Verhältnis je Gruppe.",
|
||
"👥 Dashboard: Ausklappbare Client-Details mit 'Zeit seit letztem Lebenszeichen' (z.B. 'vor 5 Min.').",
|
||
"🔄 Dashboard: Sammel-Neustart-Funktion für alle offline Clients einer Gruppe.",
|
||
"⏱️ Dashboard: Auto-Aktualisierung alle 15 Sekunden; manueller Aktualisierungs-Button verfügbar."
|
||
]
|
||
},
|
||
{
|
||
"version": "2025.1.0-alpha.11",
|
||
"date": "2025-11-05",
|
||
"changes": [
|
||
"🎬 Client: Clients können jetzt Video-Events aus dem Terminplaner abspielen (Streaming mit Seek via Byte-Range).",
|
||
"🧭 Einstellungen: Neues verschachteltes Tab-Layout mit kontrollierter Tab-Auswahl (keine Sprünge in Unter-Tabs).",
|
||
"📅 Einstellungen › Akademischer Kalender: ‘Schulferien Import’ und ‘Liste’ zusammengeführt in ‘📥 Import & Liste’.",
|
||
"🗓️ Events-Modal: Video-Optionen erweitert (Autoplay, Loop, Lautstärke, Ton aus). Werte werden bei neuen Terminen aus System-Defaults initialisiert.",
|
||
"⚙️ Einstellungen › Events › Videos: Globale Defaults für Autoplay, Loop, Lautstärke und Mute (Keys: video_autoplay, video_loop, video_volume, video_muted)."
|
||
]
|
||
},
|
||
{
|
||
"version": "2025.1.0-alpha.10",
|
||
"date": "2025-10-25",
|
||
"changes": [
|
||
"🎬 Client: Client kann jetzt Videos wiedergeben (Playback/UI surface) — Benutzerseitige Präsentation wurde ergänzt.",
|
||
"🧩 UI: Event-Modal ergänzt um Video-Auswahl und Wiedergabe-Optionen (Autoplay, Loop, Lautstärke).",
|
||
"📁 Medien-UI: FileManager erlaubt größere Uploads für Full-HD-Videos; Client-seitige Validierung begrenzt Videolänge auf 10 Minuten."
|
||
]
|
||
},
|
||
{
|
||
"version": "2025.1.0-alpha.9",
|
||
"date": "2025-10-19",
|
||
"changes": [
|
||
"🆕 Events: Darstellung für ‘WebUntis’ harmonisiert mit ‘Website’ (UI/representation).",
|
||
"🛠️ Einstellungen › Events: WebUntis verwendet jetzt die bestehende Supplement-Table-Einstellung (Settings UI updated)."
|
||
]
|
||
},
|
||
{
|
||
"version": "2025.1.0-alpha.8",
|
||
"date": "2025-10-18",
|
||
"changes": [
|
||
"✨ Einstellungen › Events › Präsentationen: Neue UI-Felder für Slide-Show Intervall, Page-Progress und Auto-Progress.",
|
||
"️ UI: Event-Modal lädt Präsentations-Einstellungen aus Global-Defaults bzw. Event-Daten (behaviour surfaced in UI)."
|
||
]
|
||
},
|
||
{
|
||
"version": "2025.1.0-alpha.7",
|
||
"date": "2025-10-16",
|
||
"changes": [
|
||
"✨ Einstellungen-Seite: Neues Tab-Layout (Syncfusion) mit rollenbasierter Sichtbarkeit.",
|
||
"🗓️ Einstellungen › Events: WebUntis/Vertretungsplan in Events-Tab (enable/preview in UI).",
|
||
"📅 UI: Akademische Periode kann in der Einstellungen-Seite direkt gesetzt werden."
|
||
]
|
||
},
|
||
{
|
||
"version": "2025.1.0-alpha.6",
|
||
"date": "2025-10-15",
|
||
"changes": [
|
||
"✨ UI: Benutzer-Menü (top-right) mit Name/Rolle und Einträgen 'Profil' und 'Abmelden'."
|
||
]
|
||
},
|
||
{
|
||
"version": "2025.1.0-alpha.5",
|
||
"date": "2025-10-14",
|
||
"changes": [
|
||
"✨ UI: Einheitlicher Lösch-Workflow für Termine mit benutzerfreundlichen Dialogen (Einzeltermin, Einzelinstanz, Serie).",
|
||
"🔧 Frontend: RecurrenceAlert/DeleteAlert werden abgefangen und durch eigene Dialoge ersetzt (Verbesserung der UX).",
|
||
"✅ Bugfix (UX): Keine doppelten oder verwirrenden Bestätigungsdialoge mehr beim Löschen von Serienterminen."
|
||
]
|
||
},
|
||
{
|
||
"version": "2025.1.0-alpha.4",
|
||
"date": "2025-10-11",
|
||
"changes": [
|
||
"🎨 Theme: Umstellung auf Syncfusion Material 3; zentrale CSS-Imports (UI theme update).",
|
||
"🧩 UI: Gruppenverwaltung ('infoscreen_groups') auf Syncfusion-Komponenten umgestellt.",
|
||
"🔔 UI: Vereinheitlichte Notifications / Toast-Texte für konsistente UX."
|
||
]
|
||
},
|
||
{
|
||
"version": "2025.1.0-alpha.3",
|
||
"date": "2025-09-21",
|
||
"changes": [
|
||
"🧭 UI: Periode-Auswahl (Syncfusion) neben Gruppenauswahl; kompakte Layout-Verbesserung.",
|
||
"✅ Anzeige: Abzeichen für vorhandenen Ferienplan + 'Ferien im Blick' Zähler (UI indicator).",
|
||
"📤 UI: Ferien-Upload (TXT/CSV) Benutzer-Workflow ergänzt."
|
||
]
|
||
},
|
||
{
|
||
"version": "2025.1.0-alpha.2",
|
||
"date": "2025-09-01",
|
||
"changes": [
|
||
"UI Fix: Fehler beim Umschalten der Ansicht auf der Medien-Seite behoben."
|
||
]
|
||
},
|
||
{
|
||
"version": "2025.1.0-alpha.1",
|
||
"date": "2025-08-30",
|
||
"changes": [
|
||
"🆕 UI: Programminfo-Seite mit dynamischen Daten, Build-Infos und Changelog.",
|
||
"✨ UI: Logout-Funktionalität (Frontend) implementiert.",
|
||
"🐛 UI Fix: Breite der Sidebar im eingeklappten Zustand korrigiert."
|
||
]
|
||
}
|
||
]
|
||
}
|