TASKMATE - CHANGELOG ==================== ================================================================================ 03.01.2025 - GIT-INTEGRATION CODING-KACHELN ================================================================================ ✅ Git-Repository-Erkennung für TaskMate-Kachel repariert ✅ Docker-Pfad-Mapping: /home/claude-dev/TaskMate → /app/taskmate-source ✅ Git-Status und Commit-Funktionen funktionieren wieder ✅ Debug-Logging für Git-Operationen hinzugefügt Technische Details: - windowsToContainerPath() Funktion erweitert - Spezialfall für TaskMate-Repository implementiert - Container-Volume-Mapping berücksichtigt - Cache-Version auf 189 erhöht ================================================================================ 03.01.2025 - SICHERHEITSVERBESSERUNGEN PHASE 1 ================================================================================ SCHRITT 1: HARTCODIERTE CREDENTIALS ENTFERNT -------------------------------------------------------------------------------- - Hartcodierte Credentials aus CLAUDE.md entfernt - Admin-Passwort aus ANWENDUNGSBESCHREIBUNG.txt entfernt - Gitea-Token nicht mehr im Klartext in Dokumentation - JWT_SECRET Mindestlänge von 32 Zeichen erzwungen - Fallback für unsicheres JWT_SECRET entfernt SCHRITT 2: TOKEN-ROTATION & REFRESH-TOKENS -------------------------------------------------------------------------------- - Refresh-Token System implementiert (7 Tage Gültigkeit) - Access-Tokens haben nur noch 15 Minuten Gültigkeit - Neue Datenbank-Tabelle refresh_tokens - Automatische Bereinigung abgelaufener Tokens - Logout widerruft alle Refresh-Tokens des Benutzers TECHNISCHE ÄNDERUNGEN -------------------------------------------------------------------------------- - dotenv Package zum Backend hinzugefügt - server.js lädt nun .env Datei beim Start - Dockerfile angepasst (npm install statt npm ci) - auth.js erweitert um Refresh-Token Funktionen - Frontend API-Client unterstützt Refresh-Tokens - Service Worker Version: 181 → 182 SICHERHEITSVERBESSERUNGEN -------------------------------------------------------------------------------- - Kürzere Token-Lebensdauer reduziert Angriffsfenster - Refresh-Tokens ermöglichen sichere lange Sessions - Token-Rotation bei jedem Refresh - IP und User-Agent werden geloggt AUTOMATISCHES TOKEN-REFRESH IMPLEMENTIERT -------------------------------------------------------------------------------- - Proaktiver Token-Refresh nach 10 Minuten (bevor 15min Limit erreicht) - Automatischer Fallback-Refresh bei 401-Fehlern - Benutzer bleiben 7 Tage eingeloggt ohne Unterbrechung - Nahtlose Erneuerung im Hintergrund - keine Logout-Unterbrechungen API-ÄNDERUNGEN (Rückwärtskompatibel) -------------------------------------------------------------------------------- - POST /api/auth/login gibt zusätzlich refreshToken zurück - POST /api/auth/refresh akzeptiert refreshToken im Body - Legacy-Support für alte Clients ohne Breaking Changes SCHRITT 3: XSS-SCHUTZ & EINGABEVALIDIERUNG VERSTÄRKT -------------------------------------------------------------------------------- - Erweiterte Content Security Policy (CSP) implementiert - DOMPurify für doppelte Markdown-Bereinigung hinzugefügt - Strikte File-Upload Validierung gegen gefährliche Dateien - URL-Validierung gegen SSRF und JavaScript-Injection - Automatisches Input-Sanitizing für alle API-Requests - Zusätzliche Security Headers (HSTS, Referrer Policy, etc.) NEUE SICHERHEITS-FEATURES -------------------------------------------------------------------------------- - Executable Dateien (.exe, .bat, etc.) werden komplett blockiert - Doppelte Dateiendungen (.txt.exe) werden abgelehnt - Lokale URLs (localhost, 192.168.x.x) sind nicht erlaubt (SSRF-Schutz) - Gefährliche Dateinamen mit Pfad-Traversal werden blockiert - MIME-Type Validierung gegen Spoofing-Angriffe SECURITY HEADERS -------------------------------------------------------------------------------- - Content-Security-Policy mit strict-dynamic - HTTP Strict Transport Security (HSTS) - X-Content-Type-Options: nosniff - Referrer-Policy: strict-origin-when-cross-origin - Permissions-Policy: Kamera/Mikrofon deaktiviert FRONTEND-VERBESSERUNGEN -------------------------------------------------------------------------------- - Automatisches Token-Management im API-Client - Retry-Logic für abgelaufene Tokens - Service Worker Version: 183 → 184 PHASE 2: DATENBANK UND BACKUP-VERSCHLÜSSELUNG IMPLEMENTIERT -------------------------------------------------------------------------------- - Vollständige Backup-Verschlüsselung mit AES-256-CBC implementiert - Neue encryption.js Bibliothek für sichere Verschlüsselung - Automatische verschlüsselte Backups (.enc Dateien) - 256-bit Verschlüsselungsschlüssel über Umgebungsvariablen - Kompatible Backups: sowohl verschlüsselt als auch unverschlüsselt - Sichere Wiederherstellung mit Entschlüsselung - PBKDF2 Key-Derivation für passwort-basierte Verschlüsselung NEUE VERSCHLÜSSELUNGS-FEATURES -------------------------------------------------------------------------------- - Header-basiertes Dateiformat für Versionierung (TMENC001) - Salt und IV für jede Verschlüsselung einzigartig - Automatisches Fallback bei fehlgeschlagener Verschlüsselung - Admin-Endpunkte für manuelle Backup-Erstellung (/api/admin/backup) - Backup-Liste mit verschlüsselten Dateien anzeigen DOCKER UND INFRASTRUKTUR -------------------------------------------------------------------------------- - Docker-Container mit Verschlüsselungsunterstützung neu gebaut - ENCRYPTION_KEY über docker-compose.yml Umgebungsvariablen - Korrekte Portmapping (3001 extern → 3000 intern) - Automatische Backup-Erstellung beim Server-Start getestet ================================================================================ 03.01.2025 - CLAUDE.MD NEUSTRUKTURIERUNG & DATENSCHUTZ ================================================================================ DOKUMENTATION -------------------------------------------------------------------------------- CLAUDE.md komplett neu strukturiert für bessere Entwickler-Erfahrung. WICHTIGER HINWEIS FÜR KI-ASSISTENTEN -------------------------------------------------------------------------------- - Prominenter Hinweis: Anwender hat KEINE Programmierkenntnisse - Klare Anweisung: KI übernimmt ALLE technischen Aufgaben - Kommunikations-Regeln mit Richtig/Falsch Beispielen - Arbeitsweise-Sektion für nicht-technische Anwender NEUE STRUKTUR -------------------------------------------------------------------------------- - Quick Start Sektion mit wichtigsten Befehlen ganz oben - Kritische Regeln prominent am Anfang platziert - Klare Gliederung nach typischen Entwicklungsaufgaben - Erweiterte Troubleshooting-Sektion mit Lösungen - Code-Patterns und Best Practices hinzugefügt - Performance- und Sicherheitshinweise dokumentiert DATENSCHUTZ & PROJEKTSICHERHEIT -------------------------------------------------------------------------------- - Neue Sektion für Schutz von Produktivdaten hinzugefügt - Warnung: Projekt "AegisSight" niemals beeinträchtigen - Warnung: Bestehende Benutzer niemals ändern/löschen - Backup-Anweisung vor Datenbank-Arbeiten - Rollback-Strategie für Live-System dokumentiert - Anforderung: JEDE Änderung muss umkehrbar sein - Docker-Image Backup-Befehle hinzugefügt - Änderungs-Workflow für Live-Betrieb definiert HIGHLIGHTS -------------------------------------------------------------------------------- - Docker-Befehle direkt im Quick Start - Echtzeit-Update Patterns mit Code-Beispielen - Datums-Formatierung mit richtig/falsch Beispielen - Deployment-Checkliste als Copy&Paste Template - Debug-Tipps für Frontend und Backend ================================================================================ 03.01.2026 - LISTE: MEHRERE AVATARE FÜR MEHRFACHZUWEISUNG ================================================================================ FEATURE ENHANCEMENT -------------------------------------------------------------------------------- Listen-Ansicht zeigt jetzt alle zugewiesenen Benutzer als separate Avatare an. NEUE FUNKTIONEN -------------------------------------------------------------------------------- - Mehrere Avatar-Symbole nebeneinander bei Mehrfachzuweisung - Avatare werden aus task_assignees Tabelle und assignedTo kombiniert - Container für mehrere Avatare mit 2px Abstand - Hover-Effekt: Avatare vergrößern sich bei Mouse-Over - Alle Avatare sind klickbar für Bearbeitung TECHNISCHE DETAILS -------------------------------------------------------------------------------- - JavaScript: Sammelt User-IDs aus task.assignees Array - CSS: .avatar-container für Flexbox-Layout mehrerer Avatare - Backend nutzt bereits vorhandene getFullTask() Funktion - Service Worker Cache-Version: 178 -> 179 VERHALTEN -------------------------------------------------------------------------------- - Task mit User 1 + 4: Zeigt 2 Avatare nebeneinander - Task mit nur User 1: Zeigt 1 Avatar - Task ohne Zuweisung: Zeigt "?" Placeholder - Klick auf beliebigen Avatar: Öffnet Bearbeitung-Dropdown ================================================================================ 03.01.2026 - LISTE: NUR AVATAR-SYMBOLE BEI ZUGEWIESEN ================================================================================ UX-VERBESSERUNG -------------------------------------------------------------------------------- In der Listen-Ansicht werden bei der Spalte "Zugewiesen" nur noch Symbole angezeigt. ÄNDERUNGEN -------------------------------------------------------------------------------- - Benutzernamen werden nicht mehr neben Avataren angezeigt - Nur noch farbige Avatar-Symbole mit Initialen sichtbar - Tooltip zeigt Namen beim Hover über Avatar - Platzhalter "?" für nicht zugewiesene Aufgaben - Klick auf Avatar öffnet Dropdown zur Bearbeitung TECHNISCHE DETAILS -------------------------------------------------------------------------------- - list.js: Dropdown standardmäßig versteckt (display: none) - CSS: Neue Klassen für avatar-empty und editing-Modus - JavaScript: Avatar-Click-Handler für Bearbeitung - Service Worker Cache-Version: 177 -> 178 BEDIENUNG -------------------------------------------------------------------------------- 1. In Listen-Ansicht sind nur Avatar-Symbole sichtbar 2. Hover zeigt Namen als Tooltip 3. Klick auf Avatar öffnet Benutzer-Dropdown 4. Auswahl ändert Zuweisung und versteckt Dropdown wieder ================================================================================ 03.01.2026 - BACKUP MIT AEGISSIGHT-PROJEKT ERSTELLT ================================================================================ BACKUP-WIEDERHERSTELLUNG -------------------------------------------------------------------------------- Erfolgreiches Backup mit allen wiederhergestellten AegisSight-Daten erstellt. BACKUP-DETAILS -------------------------------------------------------------------------------- - Datei: backup_2026-01-03T00-38-47-492Z.db - Inhalt: AegisSight-Projekt mit 22 Aufgaben - Benutzer: 3 (HG, MH, admin) - Status: Vollständig und verifiziert TECHNICAL -------------------------------------------------------------------------------- - Docker-Container mit korrekten Volume-Mounts neu gestartet - Datenbank-Paths korrekt gemappt: /home/claude-dev/TaskMate/data → /app/data - WAL-Dateien korrekt synchronisiert ERGEBNIS -------------------------------------------------------------------------------- Alle AegisSight-Projektdaten sind wiederhergestellt und gesichert. ================================================================================ 02.01.2026 - ADMIN: PASSWORT-BEARBEITUNG IMPLEMENTIERT ================================================================================ NEUE FUNKTION -------------------------------------------------------------------------------- Admins können jetzt Benutzer-Passwörter im Admin-Bereich bearbeiten. FUNKTIONEN -------------------------------------------------------------------------------- - Passwort-Bearbeitung: Klick auf Stift-Symbol aktiviert Bearbeitungsmodus - Passwort-Generator: Klick auf Refresh-Symbol generiert starkes Passwort - Beim Bearbeiten von Benutzern: Passwort optional ändern oder leer lassen - Automatische Validierung: Mindestens 8 Zeichen erforderlich TECHNISCHE DETAILS -------------------------------------------------------------------------------- - HTML: Neue Button-Gruppe für Passwort-Eingabe hinzugefügt - CSS: Styling für password-input-group implementiert - JavaScript: togglePasswordEdit() und generatePassword() Methoden - Backend: Nutzt vorhandene PUT /api/admin/users/:id Route - Service Worker Cache-Version: 176 -> 177 BEDIENUNG -------------------------------------------------------------------------------- 1. Benutzer im Admin-Bereich bearbeiten 2. Stift-Symbol bei Passwort klicken → Eingabefeld wird bearbeitbar 3. Neues Passwort eingeben ODER Generator-Button für zufälliges Passwort 4. Formular speichern → Passwort wird sofort aktualisiert ================================================================================ 02.01.2026 - DATENBANK WIEDERHERGESTELLT ================================================================================ KRITISCHER BUGFIX -------------------------------------------------------------------------------- Datenbank-Verlust durch Container-Neustart behoben - alle Daten wiederhergestellt. PROBLEM -------------------------------------------------------------------------------- - Beim Docker-Container Neustart wurde eine neue, leere Datenbank erstellt - Alle Benutzer, Aufgaben, Board-Einträge und Einstellungen waren verloren - Nur Standard-Benutzer (HG, MH) vorhanden LÖSUNG -------------------------------------------------------------------------------- - Backup vom 02.01.2026 23:46 Uhr wiederhergestellt - Originale Benutzerdaten und Inhalte sind wieder verfügbar - Login mit ursprünglichen Benutzerkonten funktioniert wieder ERGEBNIS -------------------------------------------------------------------------------- Alle Daten sind wieder da - Login mit ursprünglichen Credentials möglich. ================================================================================ 02.01.2026 - BUGFIX: LOGIN-FEHLER BEHOBEN ================================================================================ BUGFIX -------------------------------------------------------------------------------- Login-Problem behoben: NotificationManager-Fehler beim Login korrigiert. TECHNISCHE DETAILS -------------------------------------------------------------------------------- - notifications.js: Sicherheitscheck für this.badge hinzugefügt - Verhindert "Cannot read properties of undefined (reading 'classList')" Fehler - Service Worker Cache-Version: 175 -> 176 AUSWIRKUNG -------------------------------------------------------------------------------- Login funktioniert wieder korrekt ohne JavaScript-Fehler. ================================================================================ 02.01.2026 - CODING-TAB: GITEA INTEGRATION CACHE-FIX ================================================================================ BUGFIX -------------------------------------------------------------------------------- Browser-Cache Problem behoben: Gitea Repository-Dropdown zeigt wieder Repos an. TECHNISCHE DETAILS -------------------------------------------------------------------------------- - Service Worker Cache-Version: 170 -> 175 (aggressiver Cache-Bust) - Docker Container komplett neu gebaut und gestartet - getGiteaRepositories() API-Fix wird jetzt geladen ERGEBNIS -------------------------------------------------------------------------------- Repository-Dropdown in Coding-Anwendungen funktioniert wieder korrekt. ================================================================================ 02.01.2026 - CODING-TAB: CLAUDE.MD ALS POPUP MODAL ================================================================================ NEUE FUNKTION -------------------------------------------------------------------------------- CLAUDE.md wird jetzt in einem separaten Vollbild-Modal angezeigt: VERBESSERUNGEN -------------------------------------------------------------------------------- - Klickbarer Link statt kleine Box - Vollbild-Modal mit 70% Viewport-Höhe - Zeigt Dateigröße im Link (z.B. "7KB") - Bessere Lesbarkeit für längere Dokumentation - ESC-Taste zum Schließen - Service Worker Cache-Version: 168 -> 169 BEDIENUNG -------------------------------------------------------------------------------- 1. Klick auf "CLAUDE.md anzeigen (XKB)" öffnet Modal 2. ESC oder X schließt Modal 3. Klick außerhalb schließt Modal ================================================================================ 02.01.2026 - CODING-TAB: CLAUDE.MD ANZEIGE FINAL BEHOBEN ================================================================================ BUGFIX -------------------------------------------------------------------------------- Problem mit unsichtbarer CLAUDE.md endgültig gelöst: BEHOBENE PROBLEME -------------------------------------------------------------------------------- - Backend: Fallback-Pfad für TaskMate (/app/taskmate-source) implementiert - CSS: claude-content war standardmäßig versteckt (display: none) - HTML: Überflüssige Hinweistexte entfernt - Service Worker Cache-Version: 167 -> 168 ERGEBNIS -------------------------------------------------------------------------------- CLAUDE.md wird jetzt korrekt angezeigt mit "Test für TaskMate" am Ende. Nur-Lesen-Modus funktioniert wie gewünscht. ================================================================================ 02.01.2026 - CODING-TAB: UX VERBESSERUNGEN ================================================================================ UX-VERBESSERUNGEN -------------------------------------------------------------------------------- - Kacheln sind jetzt direkt klickbar (ohne Drei-Punkte-Menü) - Drei-Punkte-Menü entfernt - weniger Verwirrung - Cursor zeigt Klickbarkeit an - CLAUDE.md Badge korrigiert - zeigt jetzt wieder CLAUDE.md an - Service Worker Cache-Version: 164 -> 165 ================================================================================ 02.01.2026 - CODING-TAB: CLAUDE.MD NUR NOCH READONLY ================================================================================ ÄNDERUNG -------------------------------------------------------------------------------- CLAUDE.md im Coding-Bereich ist jetzt nur noch lesbar (readonly). DETAILS -------------------------------------------------------------------------------- - Bearbeiten-Tab entfernt - nur noch Ansicht verfügbar - CLAUDE.md kann nicht mehr über TaskMate bearbeitet werden - Zeigt immer die aktuellen Inhalte aus dem Dateisystem - Verhindert versehentliches Überschreiben wichtiger Projektanweisungen - Service Worker Cache-Version: 163 -> 164 BEGRÜNDUNG -------------------------------------------------------------------------------- - Sicherheit: Keine Schreibrechte-Konflikte mehr - Klarheit: CLAUDE.md sollte außerhalb von TaskMate gepflegt werden - Konsistenz: Immer aktuelle Inhalte aus dem Dateisystem ================================================================================ 02.01.2026 - CODING-TAB: CLAUDE.MD ANZEIGE BEHOBEN ================================================================================ BUGFIX -------------------------------------------------------------------------------- Problem behoben: CLAUDE.md wird im Coding-Bereich jetzt korrekt angezeigt. TECHNISCHE DETAILS -------------------------------------------------------------------------------- - Backend PUT/POST-Routes erweitert: claudeMdFromDisk in Antworten - CLAUDE.md wird nach dem Speichern aus dem Dateisystem gelesen - Service Worker Cache-Version: 162 -> 163 AUSWIRKUNG -------------------------------------------------------------------------------- Im Coding-Bereich werden alle bisherigen Änderungen der CLAUDE.md nun korrekt im Editor-Fenster angezeigt. ================================================================================ 02.01.2026 - CLAUDE.MD DOKUMENTATION ERWEITERT ================================================================================ DOKUMENTATION -------------------------------------------------------------------------------- Erweiterte CLAUDE.md mit hilfreichen Informationen für effizientere Entwicklung: NEUE ABSCHNITTE -------------------------------------------------------------------------------- - Projektübersicht: Kurzbeschreibung und Hauptfunktionen - Architektur-Kurzübersicht: Technologie-Stack auf einen Blick - Wichtige Dateien & Einstiegspunkte: Zentrale Dateien für schnellen Einstieg - Häufige Entwicklungsaufgaben: Schritt-für-Schritt Anleitungen - Testing & Debugging: Logs, häufige Probleme und Lösungen - Deployment-Checkliste: Strukturierte Schritte für sicheres Deployment ZWECK -------------------------------------------------------------------------------- - Schnelleres Verständnis der Projektstruktur - Effizientere Entwicklung durch klare Anleitungen - Weniger Fehler durch dokumentierte Best Practices ================================================================================ 02.01.2026 - CODING-TAB IMPLEMENTIERUNG ================================================================================ NEUE FEATURES -------------------------------------------------------------------------------- Neuer "Coding"-Tab ersetzt den bisherigen "Gitea"-Tab mit erweiterter Funktionalitaet zur Verwaltung von Entwicklungsverzeichnissen. CODING-TAB -------------------------------------------------------------------------------- - Projektubergreifende Verwaltung von Entwicklungsverzeichnissen - Kachel-basiertes Grid-Layout - Claude Code Button (orange) - Startet Claude Code im Verzeichnis - Codex Button (gruen) - Startet OpenAI Codex im Verzeichnis - Server-Pfade: Direkte Ausfuehrung auf dem Linux-Server - Windows-Pfade: Befehl zum manuellen Kopieren fuer WSL - Optionale Gitea-Repository-Verknuepfung pro Verzeichnis - Git-Operationen (Fetch, Pull, Push, Commit) bei Verknuepfung - Auto-Refresh des Git-Status alle 30 Sekunden - Farbauswahl pro Verzeichnis BACKEND -------------------------------------------------------------------------------- - Neue Datenbank-Tabelle: coding_directories - Neue Route: /api/coding mit 12 Endpunkten - Terminal-Start-Logik fuer Claude/Codex FRONTEND -------------------------------------------------------------------------------- - Neuer Manager: coding.js - Neues Styling: coding.css - Modals: Verzeichnis-Verwaltung, Befehl-Anzeige - Service Worker Cache-Version: 154 -> 155 ================================================================================ 31.12.2025 - MOBILE OPTIMIERUNG ================================================================================ NEUE FEATURES -------------------------------------------------------------------------------- Vollstaendige Mobile-Optimierung der Anwendung mit Touch-Unterstuetzung. HAMBURGER-MENU -------------------------------------------------------------------------------- - Slide-in Navigation von links - Projekt-Auswahl im Menu - Alle Views ueber Menu erreichbar - Benutzer-Info und Logout - Smooth Animation (Hamburger zu X) SWIPE-GESTEN -------------------------------------------------------------------------------- - Horizontal wischen zum View-Wechsel - Swipe rechts: vorheriger View - Swipe links: naechster View - Visuelle Indikatoren am Bildschirmrand TOUCH DRAG & DROP -------------------------------------------------------------------------------- - Long-Press (300ms) startet Task-Drag - Visuelles Feedback beim Ziehen - Auto-Scroll am Bildschirmrand - Drop-Zonen werden hervorgehoben BOARD-ANSICHT -------------------------------------------------------------------------------- - Horizontal Scroll mit Scroll-Snap - Spalten snappen am Viewport BETROFFENE DATEIEN -------------------------------------------------------------------------------- - frontend/css/mobile.css (NEU) - frontend/js/mobile.js (NEU) - frontend/index.html: Hamburger-Button, Mobile-Menu, Swipe-Indikatoren - frontend/js/app.js: Mobile-Modul Integration - frontend/sw.js: Cache-Version auf 154 ================================================================================ 30.12.2025 - BUGFIX: HTML-Entity-Encoding in Textfeldern ================================================================================ PROBLEM -------------------------------------------------------------------------------- Sonderzeichen wie "&" wurden beim Speichern zu "&" konvertiert. Beispiel: "Claude&Codex" wurde zu "Claude&Codex" gespeichert. URSACHE -------------------------------------------------------------------------------- Die sanitize-html Bibliothek encoded HTML-Entities auch wenn alle Tags entfernt werden (allowedTags: []). Dies führte zu unerwünschter Konvertierung von & zu &, < zu <, etc. LÖSUNG -------------------------------------------------------------------------------- - Neue Funktion decodeHtmlEntities() in validation.js - stripHtml() dekodiert nun Entities nach der Bereinigung - Ampersand (&), Klammern (<>), Anführungszeichen bleiben erhalten BETROFFENE DATEIEN -------------------------------------------------------------------------------- - backend/middleware/validation.js: decodeHtmlEntities() hinzugefügt ================================================================================ 30.12.2025 - ADMINBEREICH: Dateiendungen frei definierbar ================================================================================ NEUES FEATURE -------------------------------------------------------------------------------- Vereinfachtes System zur Verwaltung erlaubter Dateiendungen im Adminbereich. Das bisherige komplexe Kategorien-System (Bilder, Dokumente, Office, etc.) wurde durch eine einfache, flexible Dateiendungs-Verwaltung ersetzt. FUNKTIONSWEISE -------------------------------------------------------------------------------- - Standard-Endungen: pdf, docx, txt (können geändert werden) - Tags-System: Aktive Endungen werden als Tags mit ×-Button angezeigt - Freifeld: Beliebige Endungen manuell hinzufügen (z.B. xlsx, png, zip) - Vorschläge: Schnellauswahl häufiger Endungen per Klick - Validierung: Backend prüft Dateiendung UND MIME-Type VORGESCHLAGENE ENDUNGEN -------------------------------------------------------------------------------- Office: xlsx, pptx, doc, xls, ppt, odt, ods, rtf Bilder: png, jpg, gif, svg, webp Daten: csv, json, xml, md Archive: zip, rar, 7z BETROFFENE DATEIEN -------------------------------------------------------------------------------- - backend/routes/admin.js: Neues Format (allowedExtensions statt allowedTypes) - backend/middleware/upload.js: Extension-basierte Validierung, MIME-Mapping - frontend/index.html: Neues UI mit Tags, Input, Vorschläge - frontend/js/admin.js: Neue Render- und Event-Logik - frontend/css/admin.css: Styles für Extension-Tags und Vorschläge - frontend/sw.js: Cache-Version auf 153 erhöht ================================================================================ 30.12.2025 - BUGFIX: Login-Problem behoben (Sofort-Logout nach Login) ================================================================================ PROBLEM -------------------------------------------------------------------------------- Nach erfolgreichem Login wurde der Benutzer sofort wieder zum Login-Screen zurückgeleitet. Dies war ein Race-Condition-Problem mit mehrfachen WebSocket- Verbindungen und fehlenden Token-Prüfungen. URSACHE -------------------------------------------------------------------------------- 1. syncManager.connect() wurde doppelt aufgerufen (einmal in sync.js Event- Listener und einmal in app.js initializeApp()) 2. Der Socket-Error-Handler in sync.js löste auth:logout aus OHNE zu prüfen, ob sich der Token in der Zwischenzeit geändert hatte LÖSUNG -------------------------------------------------------------------------------- 1. Doppelten syncManager.connect() Aufruf entfernt (nur noch in app.js) 2. Socket-Error-Handler prüft nun, ob ein gültiger Token existiert, bevor logout ausgelöst wird 3. syncManager.connect() prüft jetzt ob Socket bereits existiert (nicht nur ob er verbunden ist), um Race Conditions während des Verbindungsaufbaus zu verhindern BETROFFENE DATEIEN -------------------------------------------------------------------------------- - frontend/js/sync.js: Doppelten Connect-Aufruf entfernt, Token-Check hinzugefügt, verbesserte Socket-Existenz-Prüfung - frontend/sw.js: Cache-Version auf 151 erhöht ================================================================================ 30.12.2025 - UI-REDESIGN: Wissensmanagement-Tab komplett überarbeitet ================================================================================ NEUES LAYOUT: SIDEBAR + HAUPTBEREICH -------------------------------------------------------------------------------- Der Wissensmanagement-Tab wurde komplett überarbeitet mit einem neuen 2-Spalten-Layout für bessere Übersicht und Bedienbarkeit. NEUE FEATURES -------------------------------------------------------------------------------- - Sidebar-Layout: Kategorien links, Einträge rechts - beide gleichzeitig sichtbar - Drag & Drop Sortierung: Kategorien UND Einträge per Drag & Drop sortierbar - Kompakte Ansicht: Einträge zeigen nur Titel, Details per Klick aufklappbar - Aktive Kategorie: Farbiger linker Rand zeigt die ausgewählte Kategorie - Indikatoren: Icons zeigen auf einen Blick ob Link, Notizen oder Anhänge vorhanden - Responsive Design: Auf Mobile werden Kategorien als horizontale Chips angezeigt UI-VERBESSERUNGEN -------------------------------------------------------------------------------- - Aufklappbare Einträge (▶/▼) für bessere Platznutzung - Drag-Handles (⋮⋮) für intuitive Sortierung - Hover-Aktionen (Bearbeiten, Löschen) erscheinen bei Mausbewegung - Sanfte Animationen für Expand/Collapse BETROFFENE DATEIEN -------------------------------------------------------------------------------- - frontend/index.html: Komplette Neustrukturierung des Knowledge-Views (Sidebar + Main Layout, Mobile Chips) - frontend/css/knowledge.css: Komplett neu geschrieben für das neue Layout (Grid-System, Sidebar, kompakte Einträge, Drag & Drop Styles) - frontend/js/knowledge.js: Komplett überarbeitet mit neuem Rendering, Drag & Drop Handlers, Expand/Collapse Logik - frontend/sw.js: Cache-Version auf 149 erhöht ================================================================================ 30.12.2025 - VERBESSERUNG: Globale Suche für Wissensmanagement ================================================================================ ÄNDERUNG: SUCHFELD IN HEADER INTEGRIERT -------------------------------------------------------------------------------- Die Suchfunktion für den Wissensmanagement-Tab wurde vom Tab selbst in das globale Suchfeld im Header verschoben. Wenn der Benutzer auf dem "Wissen"-Tab ist, durchsucht das Header-Suchfeld automatisch die Wissensdatenbank. DETAILS -------------------------------------------------------------------------------- - Suchfeld aus dem Wissen-Tab entfernt - "Neue Kategorie"-Button zentral positioniert - Globales Suchfeld erkennt aktiven Tab und leitet Suchanfragen entsprechend weiter - Suchfeld wird automatisch geleert beim Wechsel zwischen Tabs - Konsistentes Suchverhalten über alle Bereiche (Board, Vorschläge, Wissen) BETROFFENE DATEIEN -------------------------------------------------------------------------------- - frontend/js/knowledge.js: Öffentliche setSearchQuery() Methode hinzugefügt, alte Suchfeld-Referenzen entfernt - frontend/js/app.js: setupSearch() und switchView() erweitert für Knowledge-Suche Integration - frontend/css/knowledge.css: Suchfeld-Styles entfernt, zentrierten Header hinzugefügt - frontend/index.html: Suchfeld aus Knowledge-Tab entfernt - frontend/sw.js: Cache-Version auf 148 erhöht ================================================================================ 30.12.2025 - NEUES FEATURE: Wissensmanagement-Tab ================================================================================ FEATURE: WISSENSMANAGEMENT-TAB -------------------------------------------------------------------------------- Neuer Tab "Wissen" in der Hauptnavigation für projektunabhängiges Wissensmanagement mit 2-Ebenen-Hierarchie. KATEGORIEN -------------------------------------------------------------------------------- - Kategorien mit Namen, Beschreibung, Farbe und Icon (Emoji) - Kategorien-Grid mit Eintrags-Anzahl - Erstellen, Bearbeiten und Löschen von Kategorien - Farbcodierung für visuelle Unterscheidung EINTRÄGE -------------------------------------------------------------------------------- - Einträge innerhalb von Kategorien - Jeder Eintrag kann enthalten: - Titel (Pflichtfeld) - Link/URL (optional, klickbar) - Notizen (optional, Markdown-fähig) - Dateianhänge (mehrere pro Eintrag möglich) - Erstellen, Bearbeiten und Löschen von Einträgen SUCHFUNKTION -------------------------------------------------------------------------------- - Dedizierte Suche nur für den Wissensmanagement-Bereich - Durchsucht Titel, Notizen und URLs - Debounce für Performance-Optimierung - Ergebnisse zeigen Kategorie-Zugehörigkeit BETROFFENE DATEIEN -------------------------------------------------------------------------------- Backend: - backend/database.js: 3 neue Tabellen (knowledge_categories, knowledge_entries, knowledge_attachments) mit Indizes - backend/routes/knowledge.js: NEU - CRUD-Operationen für Kategorien, Einträge, Anhänge und Suche - backend/server.js: Route-Registrierung hinzugefügt Frontend: - frontend/js/api.js: 15+ neue API-Methoden für Wissensmanagement - frontend/js/knowledge.js: NEU - KnowledgeManager-Klasse - frontend/css/knowledge.css: NEU - Styles für Kategorien, Einträge, Suche - frontend/index.html: Tab, View und Modals hinzugefügt - frontend/js/app.js: Import und Integration des KnowledgeManager - frontend/sw.js: Cache-Version auf 144 erhöht, neue Dateien hinzugefügt ================================================================================ 30.12.2025 - KRITISCHER BUGFIX: Login-Problem behoben ================================================================================ BUGFIX: SOFORTIGER LOGOUT NACH ERFOLGREICHEM LOGIN -------------------------------------------------------------------------------- Problem: Nach erfolgreichem Login wurde der Benutzer sofort wieder ausgeloggt. Ursache: Race-Condition zwischen Session-Refresh und Login: 1. Beim Seitenaufruf mit altem Token startete refreshSession() einen async Request 2. Benutzer logt sich erfolgreich ein (neuer Token wird gesetzt) 3. Der alte Refresh-Request kehrt mit 401 zurück 4. Der 401-Fehler löste logout() aus, obwohl neuer gültiger Token existierte Lösung: - Vor dem Logout wird geprüft ob der aktuelle Token noch der gleiche ist - Wenn ein neuer Login stattfand (Token unterschiedlich), wird 401 ignoriert - Prüfung in auth.js (refreshSession) und api.js (request) hinzugefügt BETROFFENE DATEIEN -------------------------------------------------------------------------------- - frontend/js/auth.js: refreshSession() prüft Token vor Logout - frontend/js/api.js: request() prüft Token vor Logout bei 401 - frontend/sw.js: Cache-Version auf 143 erhöht ================================================================================ 30.12.2025 - Checklisten-Unteraufgaben: Drag & Drop und Bearbeiten ================================================================================ FEATURE: UNTERAUFGABEN REIHENFOLGE ÄNDERN (DRAG & DROP) -------------------------------------------------------------------------------- - Drag-Handle (⋮⋮) links neben jeder Unteraufgabe - Visueller Indikator beim Ziehen (farbiger Rand oben/unten) - Reihenfolge wird in der Datenbank gespeichert (position-Feld) FEATURE: UNTERAUFGABEN BEARBEITEN -------------------------------------------------------------------------------- - Doppelklick auf den Titel zum Bearbeiten - Bearbeiten-Icon (✎) erscheint beim Hover - Enter speichert, Escape bricht ab - Änderungen werden sofort in der Datenbank gespeichert BETROFFENE DATEIEN -------------------------------------------------------------------------------- - frontend/js/task-modal.js: renderSubtasks() erweitert, Drag & Drop Events, startEditSubtask() Methode hinzugefügt - frontend/css/modal.css: Styles für Drag-Handle, Drag-Indikatoren, Edit-Button, Edit-Input - frontend/sw.js: Cache-Version auf 138 erhöht ================================================================================ 30.12.2025 - Bugfix: Statuskarten Drag & Drop Reihenfolge ================================================================================ BUGFIX & VERBESSERUNG: STATUSKARTEN DRAG & DROP -------------------------------------------------------------------------------- - Drag & Drop von Statuskarten funktionierte nicht korrekt - Ursache 1: API-Aufruf mit falschen Parametern (Array statt columnId + Position) - Ursache 2: Kein visuelles Feedback beim Ziehen (CSS fehlte) - Ursache 3: DragLeave entfernte Indikatoren zu früh ÄNDERUNGEN -------------------------------------------------------------------------------- - board.js: reorderColumns() übergibt jetzt korrekt moved.id und toIndex - board.js: handleDragOver() nutzt jetzt CSS-Klassen statt inline-styles - board.js: handleDragLeave() prüft jetzt ob Spalte wirklich verlassen wird - board.js: handleDrop() berechnet Position basierend auf Maus-Position (links/rechts) - board.css: Neue Styles für .column.dragging (Opacity, Scale, Shadow) - board.css: Neue Styles für .column.drag-over-left/right (farbiger Rand) BETROFFENE DATEIEN -------------------------------------------------------------------------------- - frontend/js/board.js: Drag & Drop Logik komplett überarbeitet - frontend/css/board.css: Column Dragging Styles hinzugefügt - frontend/sw.js: Cache-Version auf 135 erhöht ================================================================================ 30.12.2025 - Browser-Upload: Lokale Verzeichnisse ins Gitea pushen ================================================================================ FEATURE: VERZEICHNIS-UPLOAD VOM BROWSER -------------------------------------------------------------------------------- - Lokale Verzeichnisse direkt vom Computer ins Gitea pushen - Verwendet File System Access API (Chrome/Edge/Opera) - Drag & Drop als Fallback für andere Browser - Automatische Filterung von .git, node_modules, etc. ABLAUF -------------------------------------------------------------------------------- 1. Ziel-Repository aus Gitea-Liste auswählen 2. Ziel-Branch eingeben (Standard: main) 3. "Verzeichnis auswählen" klicken oder Ordner per Drag & Drop 4. Datei-Vorschau prüfen 5. Commit-Nachricht eingeben 6. "Commit & Push" ausführen TECHNISCHE ÄNDERUNGEN -------------------------------------------------------------------------------- - backend/routes/git.js: * POST /api/git/browser-upload - Empfängt Dateien und pusht ins Gitea * POST /api/git/browser-upload-prepare - Bereitet Upload-Session vor * DELETE /api/git/browser-upload/:sessionId - Bricht Upload ab * Multer-Konfiguration für Git-Uploads (50MB/Datei, 500 Dateien max) - frontend/js/api.js: * prepareBrowserUpload() - Session vorbereiten * browserUploadAndPush() - Dateien hochladen und pushen * cancelBrowserUpload() - Session abbrechen - frontend/js/gitea.js: * Browser-Upload Properties und Ignore-Patterns * bindBrowserUploadEvents() - Event-Handler * handleSelectDirectory() - File System Access API * readDirectoryRecursive() - Verzeichnis rekursiv lesen * handleDroppedFiles() - Drag & Drop Handler * renderUploadPreview() - Datei-Vorschau * executeBrowserUpload() - Upload durchführen - frontend/index.html: Neues Browser-Upload UI mit Schritten - frontend/css/gitea.css: Styles für Upload-Schritte, Drop-Zone, Progress - frontend/sw.js: Cache-Version auf 132 erhöht IGNORIERTE DATEIEN/ORDNER -------------------------------------------------------------------------------- .git, node_modules, __pycache__, .env, .env.local, .env.production, .DS_Store, Thumbs.db, .idea, .vscode, dist, build, .cache, coverage ================================================================================ 30.12.2025 - Gitea-Integration: Server-Modus ================================================================================ FEATURE: SERVER-DATEIEN DIREKT INS GITEA PUSHEN -------------------------------------------------------------------------------- - Neuer "Server-Anwendung" Modus im Gitea-Tab - Ermöglicht Git-Operationen direkt auf dem Server-Verzeichnis /home/claude-dev/TaskMate - Alle Änderungen an der Anwendung können sofort ins Gitea gepusht werden - Kein separates Konfigurieren nötig - sofort einsatzbereit FEATURE: ZWEI-MODUS-SCHALTER -------------------------------------------------------------------------------- - Modus-Schalter oben im Gitea-Tab: "Server-Anwendung" und "Projekt-Repository" - Server-Modus: Zeigt TaskMate Server-Dateien - Projekt-Modus: Bisherige Funktionalität für lokale Pfade pro Projekt SERVER-MODUS FUNKTIONEN -------------------------------------------------------------------------------- - Git-Status anzeigen (geänderte Dateien, aktueller Branch) - Branch-Wechsel - Fetch, Pull, Push, Commit - Commit-Historie anzeigen - Änderungsliste mit Statusanzeige (M, A, D, ?) TECHNISCHE ÄNDERUNGEN -------------------------------------------------------------------------------- - docker-compose.yml: Neues Volume-Mount ".:/app/taskmate-source" für Zugriff auf Source-Code - backend/routes/git.js: Neue Server-Endpoints: * GET /api/git/server/info - Repository-Informationen * GET /api/git/server/status - Git-Status * GET /api/git/server/branches - Branch-Liste * GET /api/git/server/commits - Commit-Historie * GET /api/git/server/remote - Remote-URL * POST /api/git/server/stage - Alle Änderungen stagen * POST /api/git/server/commit - Commit erstellen * POST /api/git/server/push - Push ausführen * POST /api/git/server/pull - Pull ausführen * POST /api/git/server/fetch - Fetch ausführen * POST /api/git/server/checkout - Branch wechseln - frontend/js/api.js: Neue API-Funktionen für Server-Modus - frontend/js/gitea.js: * GiteaManager mit currentMode Property * Server-Modus Methoden (loadServerData, renderServer*, handleServer*) * Modus-Wechsel Handler - frontend/index.html: Server-Modus UI mit Modus-Schalter - frontend/css/gitea.css: Styles für Modus-Schalter (.gitea-mode-switch, .gitea-mode-btn) - frontend/sw.js: Cache-Version auf 131 erhöht ================================================================================ 30.12.2025 - Session-Countdown auf Hauptoberfläche ================================================================================ FEATURE: SITZUNGS-COUNTDOWN IM HEADER -------------------------------------------------------------------------------- - Countdown-Timer im Header zeigt verbleibende Sitzungszeit an - Format: MM:SS (z.B. 09:45) - Timer startet immer bei 10:00 Minuten - Farbliche Warnung bei < 60 Sekunden (orange) - Kritische Warnung bei < 30 Sekunden (rot, pulsierend) - Automatischer Logout bei Ablauf mit Toast-Benachrichtigung FEATURE: INTERAKTIONS-BASIERTER SESSION-REFRESH -------------------------------------------------------------------------------- - Bei jedem Klick oder Tastendruck wird die Session automatisch verlängert - Timer wird auf 10:00 zurückgesetzt bei Interaktion - Debouncing verhindert zu viele Server-Anfragen (max. 1 pro Sekunde) - Bei Browser-Aktualisierung (F5) wird Session automatisch refreshed ÄNDERUNG: SITZUNGSZEIT AUF 10 MINUTEN REDUZIERT -------------------------------------------------------------------------------- - SESSION_TIMEOUT in .env von 30 auf 10 Minuten geändert - Erhöhte Sicherheit durch kürzere Sitzungsdauer ÄNDERUNGEN -------------------------------------------------------------------------------- - .env: SESSION_TIMEOUT=10 - frontend/index.html: Session-Timer-Element im Header hinzugefügt - frontend/js/auth.js: * SessionTimerHandler-Klasse für Countdown-Logik * JWT-Token-Parsing für Ablaufzeit * Automatischer Logout bei Session-Ablauf * Interaktions-basiertes Token-Refresh (Click/Keydown Events) * initFromExistingSession() für korrekten Timer bei Seiten-Reload - frontend/js/api.js: X-New-Token-Header verarbeiten und Event dispatchen - frontend/css/board.css: * .session-timer Styles * .warning und .critical Zustände * pulse-critical Animation - frontend/sw.js: Cache-Version auf 128 erhöht ================================================================================ 30.12.2025 - Kalender: Dots nach Statusspalte gruppiert ================================================================================ FEATURE: AUFGABEN-DOTS IM WOCHENSTREIFEN NACH SPALTE GRUPPIERT -------------------------------------------------------------------------------- - Im Wochenstreifen-Kalender (Board-Ansicht) wird jetzt nur ein Kreis pro Statusspalte angezeigt statt einem Kreis pro Aufgabe - Bei Mouseover werden alle Aufgaben dieser Spalte im Tooltip aufgelistet - Tooltip zeigt: Spaltenname, Anzahl Aufgaben, Liste mit Start/Ende-Info - Kreis-Typ basiert auf enthaltenen Aufgaben: * Offener Kreis = alle Aufgaben haben nur Startdatum * Gefüllter Kreis = alle Aufgaben haben nur Enddatum * Kreis mit Ring = gemischt (Start und Ende) - Klick auf Kreis öffnet die erste Aufgabe der Gruppe ÄNDERUNGEN -------------------------------------------------------------------------------- - frontend/js/board.js: * getTasksForDay() gruppiert Aufgaben nach Spalte (Map statt Array) * renderDayDots() rendert einen Dot pro Spalte mit data-task-ids * showTaskTooltip() zeigt alle Aufgaben der Spalte im Tooltip * openTaskFromDot() öffnet erste Aufgabe aus der Gruppe - frontend/css/board.css: * Neue Tooltip-Stile für gruppierte Aufgaben * .week-strip-tooltip-header, -column-name, -count, -task-list, -task, etc. - frontend/sw.js: Cache-Version auf 126 erhöht ================================================================================ 29.12.2025 - Dokumentation aktualisiert ================================================================================ ANWENDUNGSBESCHREIBUNG.TXT ÜBERARBEITET -------------------------------------------------------------------------------- - Inhaltsverzeichnis erweitert (13 Abschnitte statt 10) - Neuer Abschnitt 6: Listenansicht - Neuer Abschnitt 8: Gitea-Integration (vollständige Dokumentation) - Neuer Abschnitt 9: Benachrichtigungen (Inbox) - Navigationsleiste im ASCII-Diagramm aktualisiert - Admin-Passwort aktualisiert ================================================================================ 29.12.2025 - Admin: Sicheres Passwort ================================================================================ ÄNDERUNG: ADMIN-PASSWORT AKTUALISIERT -------------------------------------------------------------------------------- - Neues sicheres Admin-Passwort ohne Bezug zur Anwendung - 18 Zeichen mit Groß-/Kleinbuchstaben, Zahlen und Sonderzeichen ÄNDERUNGEN -------------------------------------------------------------------------------- - backend/database.js: Standard-Admin-Passwort geändert ================================================================================ 29.12.2025 - Admin: Benutzer löschen repariert ================================================================================ BUGFIX: BENUTZER KONNTE NICHT GELÖSCHT WERDEN -------------------------------------------------------------------------------- - Problem: SQLITE_CONSTRAINT_NOTNULL Fehler beim Löschen von Benutzern - Ursache: Tabellen comments, history und proposals haben NOT NULL Constraints auf user_id/created_by, Code versuchte diese auf NULL zu setzen LÖSUNG -------------------------------------------------------------------------------- - Kommentare des Benutzers werden gelöscht (statt user_id = NULL) - Historie-Einträge des Benutzers werden gelöscht (statt user_id = NULL) - Vorschläge des Benutzers werden gelöscht (statt created_by = NULL) - Task-Assignees werden gelöscht - Benachrichtigungen werden gelöscht - Applications.created_by wird auf NULL gesetzt ÄNDERUNGEN -------------------------------------------------------------------------------- - backend/routes/admin.js: DELETE /api/admin/users/:id überarbeitet * Korrekte Behandlung aller Fremdschlüssel-Beziehungen ================================================================================ 29.12.2025 - Gitea: Commits aus Anzeige ausblenden ================================================================================ FEATURE: COMMITS AUS ANZEIGE ENTFERNEN -------------------------------------------------------------------------------- - X-Button bei jedem Commit zum Ausblenden (erscheint bei Hover) - "Alle ausblenden" Button in der Überschrift - Ausgeblendete Commits werden nur aus der UI entfernt, nicht aus Git - Anzeige zeigt "Alle Commits ausgeblendet" wenn Liste leer ÄNDERUNGEN -------------------------------------------------------------------------------- - frontend/index.html: Commits-Header mit "Alle ausblenden" Button - frontend/css/gitea.css: * .commits-header Style für Überschrift mit Button * .commit-delete Button-Style (erscheint bei Hover) - frontend/js/gitea.js: * hiddenCommits Set im Constructor * renderCommits() filtert ausgeblendete Commits * handleCommitListClick() für Event-Delegation * hideCommit(), clearAllCommits() Methoden - frontend/sw.js: Cache-Version auf 125 erhöht ================================================================================ 29.12.2025 - Gitea: Commit-Autor = eingeloggter Benutzer ================================================================================ BUGFIX: COMMIT-AUTOR WAR FALSCH -------------------------------------------------------------------------------- - Problem: Bei Commits wurde "Claude Projekt Manager" als Autor angezeigt (aus der lokalen Git-Konfiguration des Benutzers) - Lösung: Der eingeloggte TaskMate-Benutzer wird jetzt als Autor verwendet ÄNDERUNGEN -------------------------------------------------------------------------------- - backend/services/gitService.js: commit() akzeptiert jetzt author-Parameter * Verwendet git commit --author="Name " -m "Nachricht" * Email wird generiert: benutzername@taskmate.local - backend/routes/git.js: Commit-Route übergibt req.user als Autor * Verwendet display_name oder username als Autorname - frontend/sw.js: Cache-Version auf 124 erhöht ================================================================================ 29.12.2025 - Gitea: Branch umbenennen + UI-Aufräumung ================================================================================ FEATURE: LOKALEN BRANCH UMBENENNEN -------------------------------------------------------------------------------- - Neuer Stift-Button neben dem Branch-Dropdown - Modal zum Umbenennen des aktuellen Branches (z.B. "master" → "main") - Backend-Endpoint: POST /api/git/rename-branch/:projectId UI-AUFRÄUMUNG -------------------------------------------------------------------------------- - "Ahead/Behind" Anzeige entfernt (war verwirrend) - Branch-Bereich aufgeräumt mit Rename-Button ÄNDERUNGEN -------------------------------------------------------------------------------- - frontend/index.html: * Branch-Select-Group mit Rename-Button * Neues Rename-Branch-Modal * Ahead/Behind entfernt - frontend/css/gitea.css: * .branch-select-group, .btn-small, .btn-icon Styles * .status-badge.ahead und #git-ahead-behind entfernt - frontend/js/gitea.js: * openRenameBranchModal(), executeRenameBranch() hinzugefügt * Ahead/Behind-Rendering entfernt - frontend/js/api.js: gitRenameBranch() hinzugefügt - backend/services/gitService.js: renameBranch() Funktion - backend/routes/git.js: rename-branch Endpoint - frontend/sw.js: Cache-Version auf 123 erhöht ================================================================================ 29.12.2025 - Gitea: Force-Push Option ================================================================================ FEATURE: FORCE-PUSH UM REMOTE ZU ÜBERSCHREIBEN -------------------------------------------------------------------------------- - Problem: Push auf Remote-Branch mit unterschiedlicher Historie schlug fehl (z.B. wenn Gitea eine README erstellt hat und man master→main pushen will) - Lösung: Force-Push Option im Push-Modal hinzugefügt ÄNDERUNGEN -------------------------------------------------------------------------------- - frontend/index.html: Checkbox "Force Push (Remote überschreiben)" im Push-Modal - frontend/css/gitea.css: .form-hint.warning Style für Warnung - frontend/js/gitea.js: Force-Flag wird an API übergeben - frontend/js/api.js: gitInitPush() akzeptiert force Parameter - backend/services/gitService.js: pushWithUpstream() mit --force Flag - backend/routes/git.js: init-push Endpoint akzeptiert force Parameter - frontend/sw.js: Cache-Version auf 122 erhöht ================================================================================ 29.12.2025 - Gitea: Bugfix Ziel-Branch Auswahl ================================================================================ BUGFIX: PUSH MIT ZIEL-BRANCH FUNKTIONIERTE NICHT -------------------------------------------------------------------------------- - Problem: Bei Auswahl eines anderen Ziel-Branches (z.B. "main" statt "master") wurde trotzdem der reguläre Push verwendet, der die Auswahl ignorierte - Ursache: executePush() versuchte immer zuerst den normalen Push, der den bestehenden Upstream verwendet, nicht den ausgewählten Target-Branch LÖSUNG -------------------------------------------------------------------------------- - frontend/js/gitea.js: executePush() Logik korrigiert * Wenn Ziel-Branch != lokaler Branch → verwendet immer init-push mit Mapping * Nur bei gleichem Branch-Namen → normaler Push mit Fallback * Zeigt Info-Toast mit "Push von X nach Y" - frontend/sw.js: Cache-Version auf 121 erhöht ================================================================================ 29.12.2025 - Gitea: Ziel-Branch Auswahl beim Push ================================================================================ FEATURE: ZIEL-BRANCH AUSWAHL BEIM PUSH -------------------------------------------------------------------------------- - Neues Push-Modal mit Branch-Auswahl vor dem Push - Benutzer können jetzt wählen auf welchen Remote-Branch gepusht wird - Z.B. lokaler Branch "master" kann als "main" auf Gitea gepusht werden - Auswahl: "Gleicher Name wie lokal", "main", "master", "develop" ÄNDERUNGEN -------------------------------------------------------------------------------- - backend/services/gitService.js: pushWithUpstream() unterstützt jetzt targetBranch * Branch-Mapping: `git push -u origin master:main` möglich * Gibt sowohl localBranch als auch remoteBranch im Ergebnis zurück - backend/routes/git.js: init-push Endpoint akzeptiert targetBranch Parameter - frontend/js/api.js: gitInitPush() mit targetBranch Parameter - frontend/js/gitea.js: * Push-Button öffnet jetzt Modal statt direkt zu pushen * Neue Methoden: openPushModal(), executePush() - frontend/index.html: Neues Push-Modal mit Branch-Auswahl - frontend/css/gitea.css: .form-static-value Style hinzugefügt - frontend/sw.js: Cache-Version auf 120 erhöht ================================================================================ 29.12.2025 - Gitea-Integration Bugfix: Branch-Mismatch ================================================================================ BUGFIX: DEFAULT-BRANCH MISMATCH ZWISCHEN GIT UND GITEA -------------------------------------------------------------------------------- - Problem: Dateien wurden nach "master" gepusht, aber Gitea zeigte "main" - Benutzer sahen nur die auto-generierte README statt ihrer gepushten Dateien - Ursache: Lokaler Branch "master" != Gitea Default-Branch "main" LÖSUNG -------------------------------------------------------------------------------- - backend/services/giteaService.js: NEU - updateRepository() Funktion * Erlaubt das Ändern des Default-Branch über Gitea PATCH API * Unterstützt auch Beschreibung und Private-Status Änderungen - backend/services/gitService.js: pushWithUpstream() gibt jetzt Branch-Namen zurück - backend/routes/git.js: init-push Endpoint aktualisiert Default-Branch automatisch * Nach erfolgreichem Push wird Gitea's Default-Branch auf den gepushten Branch gesetzt * Owner/Repo wird automatisch aus der Repository-URL extrahiert - frontend/sw.js: Cache-Version auf 119 erhöht ================================================================================ 28.12.2025 - Gitea-Integration ================================================================================ FEATURE: GITEA-INTEGRATION FÜR REPOSITORY-VERWALTUNG -------------------------------------------------------------------------------- - Neuer "Gitea"-Tab neben Board, Liste, Kalender, Genehmigung - Jedes TaskMate-Projekt kann mit einem Gitea-Repository verknüpft werden - Auswahl zwischen bestehendem Gitea-Repository oder Erstellen eines neuen - Lokaler Pfad für Claude Code Bearbeitung konfigurierbar - Windows-Pfade werden automatisch in Docker-Pfade konvertiert (/mnt/c/...) FUNKTIONEN -------------------------------------------------------------------------------- - Gitea-Verbindungstest mit Status-Anzeige (verbunden/nicht verbunden) - Repository-Auswahl aus allen verfügbaren Gitea-Repositories - Neues Repository erstellen (Name, Beschreibung, privat/öffentlich) - Git-Status anzeigen (Branch, Clean/Dirty, Ahead/Behind) - Branch-Wechsel per Dropdown - Git-Operationen: Fetch, Pull, Push, Commit - Änderungsliste mit Datei-Status (Modified, Added, Deleted, Untracked) - Commit-Historie mit Hash, Nachricht, Autor und Datum - Auto-Refresh alle 30 Sekunden BACKEND-ÄNDERUNGEN -------------------------------------------------------------------------------- - server.js: Git-, Applications- und Gitea-Routes registriert (KRITISCHER FIX!) * Die Routes waren implementiert, aber nicht aktiviert - backend/routes/gitea.js: NEU - Gitea API Endpoints * GET /api/gitea/test - Verbindung testen * GET /api/gitea/repositories - Alle Repositories auflisten * POST /api/gitea/repositories - Neues Repository erstellen * GET /api/gitea/repositories/:owner/:repo - Repository-Details * DELETE /api/gitea/repositories/:owner/:repo - Repository löschen * GET /api/gitea/repositories/:owner/:repo/branches - Branches * GET /api/gitea/repositories/:owner/:repo/commits - Commits * GET /api/gitea/user - Aktueller Benutzer FRONTEND-ÄNDERUNGEN -------------------------------------------------------------------------------- - frontend/js/api.js: Erweitert um 30+ neue API-Methoden * Gitea: testGiteaConnection, getGiteaRepositories, createGiteaRepository, etc. * Applications: getProjectApplication, saveProjectApplication, etc. * Git: cloneRepository, getGitStatus, gitPull, gitPush, gitCommit, etc. - frontend/js/gitea.js: NEU - GiteaManager Klasse * Vollständige UI-Logik für Gitea-Integration * Store-Subscription für Projekt-Wechsel * Auto-Refresh-Funktionalität - frontend/js/app.js: Import und Integration von GiteaManager - frontend/index.html: View-Tab "Gitea", View-Container, Modals - frontend/css/gitea.css: NEU - Komplette Styles für Gitea-View * Verbindungsstatus-Anzeige * Repository-Header * Status-Panel mit Grid-Layout * Operations-Buttons * Änderungen- und Commit-Listen * Responsive Design TECHNISCH -------------------------------------------------------------------------------- - Cache-Version: 117 - Neue Dateien: backend/routes/gitea.js, frontend/js/gitea.js, frontend/css/gitea.css ================================================================================ 28.12.2025 - Neue Listenansicht ================================================================================ FEATURE: TABELLARISCHE LISTENANSICHT DER AUFGABEN -------------------------------------------------------------------------------- - Neue Ansicht "Liste" zwischen Board und Kalender in der Navigation - Umschaltbar zwischen gruppierter Ansicht (nach Status) und flacher Liste - Einklappbare Gruppen in der gruppierten Ansicht - Spalten: Aufgabe, Status, Priorität, Fälligkeitsdatum, Zugewiesen INLINE-BEARBEITUNG -------------------------------------------------------------------------------- - Status direkt per Dropdown ändern - Priorität direkt per Dropdown ändern (Hoch/Mittel/Niedrig) - Fälligkeitsdatum direkt per Datepicker ändern - Zuweisung direkt per Dropdown ändern - Titel per Doppelklick bearbeiten SORTIERUNG -------------------------------------------------------------------------------- - Sortierung nach allen Spalten durch Klick auf Spaltenüberschrift - Sortierrichtung umschaltbar (aufsteigend/absteigend) - Sortierauswahl auch über Dropdown im Header DESIGN -------------------------------------------------------------------------------- - Farbpunkte zeigen Spaltenfarbe der Aufgabe - Überfällige und heute fällige Aufgaben farblich hervorgehoben - Avatar mit Initialen bei zugewiesenen Benutzern - Hover-Effekte und konsistentes Styling - Responsives Layout für verschiedene Bildschirmgrößen ÄNDERUNGEN -------------------------------------------------------------------------------- - frontend/index.html: View-Tab "Liste" und Container hinzugefügt - frontend/css/list.css: NEU - Komplette Styles für Listenansicht - frontend/js/list.js: NEU - ListViewManager mit Gruppierung, Sortierung, Inline-Bearbeitung und Echtzeit-Updates - frontend/js/app.js: Import von listViewManager hinzugefügt - frontend/sw.js: Cache-Version auf 116 erhöht, list.js und list.css hinzugefügt ================================================================================ 28.12.2025 - Wochenstreifen-Kalender im Board ================================================================================ FEATURE: KOMPAKTER WOCHENKALENDER IM KANBAN-BOARD -------------------------------------------------------------------------------- - Neuer Wochenstreifen zwischen Filterleiste und Statistik-Leiste - Zeigt die aktuelle Arbeitswoche (Mo-So) mit Navigationspfeilen - Farbige Punkte markieren Start- und Enddaten von Aufgaben: * Leerer Kreis (○) = Startdatum * Gefüllter Kreis (●) = Enddatum * Doppelter Kreis = Start und Ende am selben Tag - Punkt-Farbe entspricht der Spaltenfarbe der Aufgabe - Mouseover auf Punkt zeigt Tooltip mit Aufgabendetails - Klick auf Punkt öffnet die Aufgabe direkt - "Heute"-Button springt zur aktuellen Woche - Heutiger Tag ist farblich hervorgehoben - Nur offene und in Bearbeitung befindliche Aufgaben werden angezeigt (erledigte Aufgaben aus letzter Spalte werden ausgeblendet) ÄNDERUNGEN -------------------------------------------------------------------------------- - frontend/index.html: Week-Strip Container hinzugefügt - frontend/css/board.css: Styles für Wochenstreifen hinzugefügt - frontend/js/board.js: Wochenkalender-Logik implementiert - frontend/sw.js: Cache-Version auf 115 erhöht BUGFIXES -------------------------------------------------------------------------------- - Datumsfehler im Wochenkalender behoben (Zeitzonenverschiebung durch UTC) - Automatische Aktualisierung des Wochenkalenders bei Aufgabenänderungen - Echtzeit-Aktualisierung: Spaltenfarben-Änderungen werden jetzt sofort im Wochenstreifen und Kalender sichtbar (ohne Browser-Refresh) ================================================================================ 28.12.2025 - Inbox-Navigation mit Highlight-Effekt ================================================================================ FEATURE: NAVIGATION AUS DER INBOX ZU AUFGABEN UND GENEHMIGUNGEN -------------------------------------------------------------------------------- - Klick auf Inbox-Nachricht navigiert automatisch zum Ziel - Bei Aufgaben: Wechsel zur Board-Ansicht und Öffnen des Aufgaben-Modals - Bei Genehmigungen: Wechsel zur Genehmigung-Ansicht und Scrollen zum Element - Highlight-Effekt mit rotem Rahmen und Fadeout-Animation (2,5 Sekunden) ÄNDERUNGEN -------------------------------------------------------------------------------- - frontend/js/app.js: Event-Handler für notification:open-task und notification:open-proposal hinzugefügt - frontend/js/proposals.js: scrollToAndHighlight() Methode hinzugefügt - frontend/css/proposals.css: Highlight-Pulse Animation hinzugefügt - frontend/sw.js: Cache-Version auf 111 erhöht ================================================================================ 28.12.2025 - Farbige Spalten-Header ================================================================================ FEATURE: FARBIGE SPALTEN-HEADER IM KANBAN-BOARD -------------------------------------------------------------------------------- - Der Header jeder Spalte (Statuskarte) wird nun in der gewählten Spaltenfarbe eingefärbt - Automatische Kontrastanpassung der Textfarbe für gute Lesbarkeit - Abgerundete obere Ecken für harmonisches Design - Buttons im Header passen sich der Hintergrundfarbe an ÄNDERUNGEN -------------------------------------------------------------------------------- - frontend/js/board.js: Spaltenfarbe auf column-header angewendet - frontend/css/board.css: Styling für farbige Header angepasst - frontend/sw.js: Cache-Version auf 110 erhöht ================================================================================ 28.12.2025 - Pfadbereinigung nach Umbenennung ================================================================================ BEREINIGUNG -------------------------------------------------------------------------------- - .claude/settings.local.json: Veraltete Pfade und Datenbanknamen aktualisiert * "Aufgabenverwaltung" -> "TaskMate" * "aufgabenverwaltung.db" -> "taskmate.db" ================================================================================ 22.12.2025 - Upload-Einstellungen im Admin-Panel ================================================================================ FEATURE: UPLOAD-EINSTELLUNGEN FÜR ADMINISTRATOREN -------------------------------------------------------------------------------- - Neue Sektion in der Benutzerverwaltung für Upload-Konfiguration - Einstellbare maximale Dateigröße (1-100 MB) - Übersicht aller erlaubten Dateiformate nach Kategorien: * Bildformate: JPEG, PNG, GIF, WebP, SVG * Dokumentformate: PDF * Office-Formate: DOC, DOCX, XLS, XLSX, PPT, PPTX * Textformate: TXT, CSV, Markdown * Archivformate: ZIP, RAR, 7Z * Datenformate: JSON - Kategorien können per Checkbox aktiviert/deaktiviert werden - Einstellungen werden in der Datenbank gespeichert - Upload-Middleware lädt Einstellungen dynamisch ÄNDERUNGEN -------------------------------------------------------------------------------- - backend/routes/admin.js: Neue Endpoints GET/PUT /api/admin/upload-settings - backend/middleware/upload.js: Dynamisches Laden der Einstellungen - frontend/index.html: Upload-Einstellungen Sektion im Admin-Bereich - frontend/js/admin.js: Upload-Einstellungen laden/speichern - frontend/js/api.js: getUploadSettings() und updateUploadSettings() hinzugefügt - frontend/css/admin.css: Styling für Upload-Einstellungen TECHNISCH -------------------------------------------------------------------------------- - Cache-Version: 109 ================================================================================ 22.12.2025 - Prioritäts-Visualisierung mit Sternen ================================================================================ FEATURE: STERN-SYSTEM FÜR PRIORITÄTEN -------------------------------------------------------------------------------- - Neue intuitive Visualisierung der Prioritäten mit Sternen und Farben - Hohe Priorität: ★★★ (3 Sterne, rot) - Mittlere Priorität: ★★ (2 Sterne, orange) - Niedrige Priorität: ★ (1 Stern, grün) - Ersetzt die bisherigen farbigen Punkte ÄNDERUNGEN -------------------------------------------------------------------------------- - utils.js: Neue Funktionen getPriorityStars() und createPriorityElement() - board.js: Sterne statt Punkt in Task-Karten - list.js: Sterne statt Punkt in Listen-Ansicht - calendar.js: Sterne statt Punkt im Kalender-Detail - components.css: Styling für .priority-stars TECHNISCH -------------------------------------------------------------------------------- - Cache-Version: 106 ================================================================================ 22.12.2025 - Benachrichtigungssystem (Inbox) ================================================================================ FEATURE: ECHTZEIT-BENACHRICHTIGUNGEN -------------------------------------------------------------------------------- - Glocken-Symbol im Header links neben Benutzer-Avatar - Grau ohne Nachrichten, farbig (Primary) mit Badge-Zähler bei Nachrichten - Badge zeigt Anzahl ungelesener Nachrichten (max. "99+") - Dropdown-Menü mit Benachrichtigungsliste - Toast-Benachrichtigung bei neuen Nachrichten wenn Dropdown geschlossen - "Alle als gelesen markieren" Button BENACHRICHTIGUNGSTYPEN -------------------------------------------------------------------------------- - task:assigned - Aufgabe wurde mir zugewiesen - task:unassigned - Aufgabenzuweisung wurde entfernt - task:due_soon - Aufgabe ist morgen fällig (täglich geprüft) - task:completed - Aufgabe wurde erledigt - task:due_changed - Fälligkeitsdatum wurde geändert - task:priority_up - Priorität wurde auf "Hoch" erhöht - comment:created - Neuer Kommentar zu meiner Aufgabe - comment:mention - @Erwähnung in Kommentar - approval:pending - Neue ausstehende Genehmigung (persistent) - approval:granted - Genehmigung wurde erteilt PERSISTENTE BENACHRICHTIGUNGEN -------------------------------------------------------------------------------- - Genehmigungsanfragen (approval:pending) können nicht gelöscht werden - Bleiben bis zur Genehmigung/Ablehnung bestehen - Visuell hervorgehoben mit gelbem linken Rand - Automatische Entfernung bei Genehmigung DATENBANK-ÄNDERUNGEN -------------------------------------------------------------------------------- - Neue Tabelle "notifications" mit Feldern: - id, user_id, type, title, message - task_id, project_id, proposal_id, actor_id - is_read, is_persistent, created_at - Indizes für optimierte Abfragen BACKEND-ÄNDERUNGEN -------------------------------------------------------------------------------- - Neuer Service: backend/services/notificationService.js - Neue Route: backend/routes/notifications.js - GET /api/notifications - Alle Benachrichtigungen abrufen - GET /api/notifications/count - Ungelesene Anzahl - PUT /api/notifications/:id/read - Als gelesen markieren - PUT /api/notifications/read-all - Alle als gelesen markieren - DELETE /api/notifications/:id - Benachrichtigung löschen - WebSocket: User-spezifische Rooms für gezielte Benachrichtigungen - Scheduled Job: Fälligkeits-Check alle 6 Stunden FRONTEND-ÄNDERUNGEN -------------------------------------------------------------------------------- - Neue Datei: frontend/js/notifications.js (NotificationManager) - Neue Datei: frontend/css/notifications.css - Glocken-Symbol im Header (index.html) - API-Endpunkte in api.js hinzugefügt - WebSocket-Events in sync.js integriert - App-Initialisierung in app.js angepasst TECHNISCH -------------------------------------------------------------------------------- - Cache-Version: 104 ================================================================================ 22.12.2025 - Kalender-Filter Verbesserungen ================================================================================ FEATURE: DYNAMISCHE KALENDER-FILTER -------------------------------------------------------------------------------- - Filter-Dropdown im Kalender statt einzelner Checkboxen - Filter "Offen", "In Arbeit" und "Erledigt" standardmäßig verfügbar - Benutzerdefinierte Filter können beim Erstellen neuer Spalten hinzugefügt werden FEATURE: FILTER-KATEGORIE BEI SPALTEN -------------------------------------------------------------------------------- - Neue Option "Kalender-Filter" beim Erstellen/Bearbeiten von Spalten - Auswahl zwischen: Offen, In Arbeit, Erledigt oder Neuer Filter - Benutzerdefinierte Filter erscheinen automatisch im Kalender-Filter-Dropdown DATENBANK-ÄNDERUNGEN -------------------------------------------------------------------------------- - Neue Spalte "filter_category" in columns-Tabelle - Standard-Kategorien: 'open', 'in_progress', 'completed' - Automatische Migration setzt Standard-Werte für bestehende Spalten TECHNISCH -------------------------------------------------------------------------------- - Backend: columns-Routes erweitert um filterCategory - Frontend: Neues Filter-Dropdown-Menü im Kalender - Frontend: Spalten-Modal um Filter-Kategorie-Auswahl erweitert - Cache-Version: 103 ================================================================================ 22.12.2025 - Genehmigungen projektbezogen & Anzeige im Board ================================================================================ FEATURE: GENEHMIGUNGEN PROJEKTBEZOGEN -------------------------------------------------------------------------------- - Genehmigungen sind jetzt projektbezogen (nur für aktuelles Projekt sichtbar) - "Neuer Vorschlag" umbenannt in "Neue Genehmigung" - Voting-Funktion komplett entfernt - Neue Datenbank-Spalte project_id in proposals-Tabelle FEATURE: GENEHMIGUNGEN IM BOARD ANZEIGEN -------------------------------------------------------------------------------- - Verknüpfte Genehmigungen werden auf Task-Karten angezeigt - Anzeige unterhalb der Unteraufgaben-Fortschrittsanzeige - Genehmigte Genehmigungen: Grüner Rand mit Häkchen - Offene Genehmigungen: Orangener Rand mit Kreis - Design passend zu den Unteraufgaben ================================================================================ 22.12.2025 - Mehrfachzuweisung & Tutorial entfernt ================================================================================ ENTFERNT: TUTORIAL/TOUR -------------------------------------------------------------------------------- - Automatische Tour beim Start der Anwendung entfernt - Tour-Import und Start-Logik aus app.js entfernt FEATURE: MEHRFACHZUWEISUNG VON MITARBEITENDEN -------------------------------------------------------------------------------- - Aufgaben können jetzt mehreren Benutzern zugewiesen werden - Neues Feld "Mitarbeitende zuweisen" ersetzt "Zuständig" - Multi-Select Dropdown mit Checkboxen im Task-Modal - Neue Datenbanktabelle task_assignees für Mehrfachzuweisung - API erweitert: Aufgaben akzeptieren jetzt assignees-Array - Board zeigt gestapelte Avatare für zugewiesene Mitarbeitende - Maximal 3 Avatare sichtbar, "+X" Anzeige bei mehr Zuweisungen - Abwärtskompatibilität zu Einzelzuweisung bleibt erhalten BUGFIX: DATENBANK-FEHLER BEHOBEN -------------------------------------------------------------------------------- - Entfernte Referenz auf nicht existierende Spalte "short_name" in users-Tabelle - Aufgaben werden jetzt korrekt geladen ================================================================================ 22.12.2025 - Umbenennung zu TaskMate ================================================================================ UMBENENNUNG: AUFGABENVERWALTUNG -> TASKMATE -------------------------------------------------------------------------------- - Projekt vollständig umbenannt von "Aufgabenverwaltung" zu "TaskMate" - Datenbank umbenannt: aufgabenverwaltung.db -> taskmate.db - Docker Service/Container umbenannt: aufgabenverwaltung -> taskmate - Alle Header-Kommentare in JS/CSS-Dateien aktualisiert - CLAUDE_PROJECT_README.md und SERVER_SETUP_ANLEITUNG.md aktualisiert - package-lock.json Projekt-Namen angepasst - .env Kommentar aktualisiert ================================================================================ 21.12.2025 - UI-Verbesserung Benutzerverwaltung ================================================================================ VERBESSERUNG: NEUER BENUTZER DIALOG -------------------------------------------------------------------------------- - Dialog vergrößert und übersichtlicher gestaltet - Alle Eingabefelder untereinander angeordnet - Kürzel-Feld mit Hinweistext unterhalb des Eingabefeldes - Sternchen (*) bei Pflichtfeldern entfernt - Passwort wird automatisch mit 10 Zeichen generiert (Groß-/Kleinbuchstaben, Zahlen und Sonderzeichen) - Passwort ist im Klartext sichtbar und nicht editierbar - Bei Bearbeitung wird das Passwort-Feld ausgeblendet - Passwortänderung nur über Benutzereinstellungen möglich ================================================================================ 21.12.2025 - E-Mail-basierter Login ================================================================================ FEATURE: LOGIN ÜBER E-MAIL -------------------------------------------------------------------------------- - Benutzer melden sich jetzt mit E-Mail und Passwort an - Admin-User ("admin") meldet sich weiterhin mit Benutzername an - E-Mail ist jetzt Pflichtfeld bei der Benutzer-Erstellung - E-Mail-Validierung im Frontend und Backend ÄNDERUNG: FARBAUSWAHL ENTFERNT -------------------------------------------------------------------------------- - Farbauswahl bei Benutzer-Erstellung wurde entfernt - Neue Benutzer erhalten automatisch die Standardfarbe Grau (#808080) - Benutzerliste zeigt jetzt Kürzel und E-Mail an TECHNISCH: - Neue Spalte "email" in der Datenbank-Tabelle "users" - Login-Logik unterscheidet zwischen Admin (username) und anderen Benutzern (E-Mail) - E-Mail-Eindeutigkeit wird bei Erstellung und Bearbeitung geprüft ================================================================================ 21.12.2025 - Benutzername-Konvention ================================================================================ VERBESSERUNG: BENUTZERNAME ALS 2-BUCHSTABEN-KÜRZEL -------------------------------------------------------------------------------- - Benutzername jetzt als Kürzel mit genau 2 Buchstaben (z.B. HG, AE) - Automatische Umwandlung in Großbuchstaben - Eingabefeld mit "@" Prefix und Hinweis zur Konvention - Label geändert von "Benutzername" zu "Kürzel" - Validierung im Frontend (pattern) und Backend (Regex) ================================================================================ 21.12.2025 - Bugfix Benutzerverwaltung ================================================================================ BUGFIX: BENUTZER LÖSCHEN -------------------------------------------------------------------------------- - Benutzer können jetzt wieder gelöscht werden - Vor dem Löschen werden alle Referenzen (Aufgaben, Kommentare, Vorschläge) auf NULL gesetzt - Votes des Benutzers werden ebenfalls gelöscht - Fehlermeldungen verwenden jetzt korrekte Umlaute (ö statt oe) ================================================================================ 21.12.2025 - Bugfixes Anhänge ================================================================================ BUGFIX: DATEI-UPLOAD REPARIERT -------------------------------------------------------------------------------- - CSRF-Token-Fehler beim Hochladen von Anhaengen behoben - Upload-Funktion wiederholt jetzt automatisch bei CSRF-Fehlern BUGFIX: LIGHTBOX SCHLIESSEN -------------------------------------------------------------------------------- - X-Button zum Schliessen der Bildvorschau funktioniert wieder - Fehlende ID am Close-Button hinzugefuegt VERBESSERUNG: ANHAENGE-BUTTONS SICHTBARKEIT -------------------------------------------------------------------------------- - Download- und Loeschen-Buttons sind jetzt immer sichtbar - Buttons haben halbtransparenten dunklen Hintergrund fuer bessere Erkennbarkeit - Loeschen-Button wird beim Hover rot ================================================================================ 21.12.2025 - Vorschlags-Archiv und Aufgaben-Verknuepfung ================================================================================ NEUES FEATURE: ARCHIV FUER VORSCHLAEGE -------------------------------------------------------------------------------- Vorschlaege koennen jetzt archiviert und wiederhergestellt werden. Funktionen: - Archiv-Button im Genehmigung-Bereich zum Umschalten zwischen aktiven und archivierten Vorschlaegen - Archivieren/Wiederherstellen von Vorschlaegen (nur mit "Genehmigung"-Berechtigung) - Alle Benutzer koennen das Archiv einsehen - Archivierte Vorschlaege werden visuell gekennzeichnet UI-Aenderungen: - Neuer "Archiv anzeigen" / "Aktive anzeigen" Button - Titel wechselt zwischen "Vorschlaege" und "Archiv" - Archiv-Badge bei archivierten Vorschlaegen - Archiv-/Wiederherstellen-Button bei Karten (nur fuer berechtigte Benutzer) NEUES FEATURE: AUFGABEN-VERKNUEPFUNG BEI VORSCHLAEGEN -------------------------------------------------------------------------------- Beim Erstellen eines Vorschlags kann optional eine Aufgabe verknuepft werden. Funktionen: - Dropdown im "Neuer Vorschlag"-Modal mit allen aktiven Aufgaben - Aufgaben werden nach Projekt gruppiert angezeigt - Verknuepfte Aufgabe wird auf der Vorschlagskarte angezeigt - Optional - kein Pflichtfeld DATENBANK-AENDERUNGEN -------------------------------------------------------------------------------- - proposals-Tabelle: Neue Spalte "archived" (INTEGER DEFAULT 0) - proposals-Tabelle: Neue Spalte "task_id" (FOREIGN KEY zu tasks) - Automatische Migration bei Start BACKEND-AENDERUNGEN -------------------------------------------------------------------------------- - GET /api/proposals: Neuer Query-Parameter "archived" (0 oder 1) - PUT /api/proposals/:id/archive: Neuer Endpunkt zum Archivieren/Wiederherstellen - POST /api/proposals: Akzeptiert jetzt optionalen "taskId" Parameter - GET /api/tasks/all: Neuer Endpunkt fuer Aufgabenliste (fuer Dropdown) VERBESSERUNG: SUCHE IM GENEHMIGUNG-BEREICH -------------------------------------------------------------------------------- - Die Suche durchsucht jetzt Vorschlaege (Titel und Beschreibung) - Suchergebnisse werden clientseitig gefiltert - Suche funktioniert sowohl fuer aktive als auch archivierte Vorschlaege VERBESSERUNG: ARCHIV-ANSICHT ZURUECKSETZEN -------------------------------------------------------------------------------- - Beim Wechsel zu einem anderen Tab (Board, Kalender) und zurueck wird die Genehmigung-Ansicht automatisch auf aktive Vorschlaege zurueckgesetzt - Archiv muss bei jedem Besuch erneut aktiviert werden ================================================================================ 20.12.2025 - Usermanagement und Genehmigung ================================================================================ NEUES FEATURE: USERMANAGEMENT MIT ADMIN-LOGIN -------------------------------------------------------------------------------- Ein separates Admin-Interface zur Benutzerverwaltung wurde implementiert. Funktionen: - Admin-Benutzer (admin / !1Data123) mit separatem Zugang - Benutzer erstellen, bearbeiten und loeschen - Berechtigungen vergeben (z.B. "Genehmigung") - Gesperrte Benutzer entsperren - Admins haben KEINEN Zugang zur regulaeren App Neue Dateien: - backend/routes/admin.js (Admin-API) - frontend/js/admin.js (Admin-Dashboard) - frontend/css/admin.css (Admin-Styles) NEUES FEATURE: GENEHMIGUNG (VORSCHLAEGE) -------------------------------------------------------------------------------- Ein neuer View "Genehmigung" neben Board und Kalender fuer Vorschlaege. Funktionen: - Vorschlaege erstellen (Titel + optionale Beschreibung) - Upvoting (Daumen hoch) - eigene Vorschlaege koennen nicht gevotet werden - Genehmigung (nur mit "Genehmigung"-Berechtigung) - Sortierung: Nach Votes, Datum oder alphabetisch - Eigene Vorschlaege loeschen Neue Dateien: - backend/routes/proposals.js (Proposals-API) - frontend/js/proposals.js (Proposals-Manager) - frontend/css/proposals.css (Proposals-Styles) DATENBANK-AENDERUNGEN -------------------------------------------------------------------------------- - users-Tabelle: Neue Spalten "role" und "permissions" - Neue Tabelle: proposals (Vorschlaege) - Neue Tabelle: proposal_votes (Votes fuer Vorschlaege) - Automatische Migration bei Start BACKEND-AENDERUNGEN -------------------------------------------------------------------------------- - middleware/auth.js: Neue Funktionen requireAdmin, requireRegularUser, checkPermission - routes/auth.js: Role und Permissions in Login-Response - server.js: Neue Routes registriert (/api/admin, /api/proposals) FRONTEND-AENDERUNGEN -------------------------------------------------------------------------------- - index.html: Admin-Screen, Proposals-View, User-Modal, Proposal-Modal - api.js: Neue Endpoints fuer Admin und Proposals - auth.js: isAdmin(), hasPermission(), getRole(), getPermissions() - app.js: Integration von Admin- und Proposals-Manager - sw.js: Cache-Version 66 ================================================================================ 20.12.2025 - Bugfixes Usermanagement und Genehmigung ================================================================================ FIX: NEUER VORSCHLAG BUTTON REAGIERT NICHT -------------------------------------------------------------------------------- Problem: Der "Neuer Vorschlag" Button im Genehmigung-View reagierte nicht. Ursache: DOM-Elemente wurden im Konstruktor abgefragt, bevor sie existierten. Loesung: DOM-Element-Abfrage in die init()-Methode verschoben. Geaenderte Datei: frontend/js/proposals.js FIX: BENUTZER BEARBEITEN/ANLEGEN FUNKTIONIERT NICHT -------------------------------------------------------------------------------- Problem: In der Admin-Oberflaeche liess sich kein Benutzer bearbeiten oder anlegen. Ursache: Gleiche Timing-Problematik wie bei Proposals. Loesung: DOM-Element-Abfrage in die init()-Methode verschoben. Geaenderte Datei: frontend/js/admin.js FIX: ADMIN-USER IN AUFGABEN-ZUWEISUNG AUSBLENDEN -------------------------------------------------------------------------------- Problem: Admin-Benutzer erschienen in der Aufgaben-Zuweisung. Admins dienen jedoch nur der Benutzerverwaltung. Loesung: API-Endpoint filtert jetzt Admin-Benutzer heraus. Geaenderte Datei: backend/routes/auth.js (GET /api/auth/users) FIX: ADMIN-SCREEN ZEIGT WEISS NACH LOGIN -------------------------------------------------------------------------------- Problem: Nach dem Admin-Login wurde nur ein weisser Bildschirm angezeigt. Ursache: showAdminScreen() wurde vor adminManager.init() aufgerufen, sodass this.adminScreen noch undefined war. Loesung: Reihenfolge korrigiert - init() wird jetzt vor show() aufgerufen. Geaenderte Datei: frontend/js/app.js FIX: MODALS SCHLOSSEN SOFORT NACH OEFFNEN -------------------------------------------------------------------------------- Problem: Beim Klicken auf "Neuer Vorschlag" oder "Neuer Benutzer" oeffnete sich das Modal kurz und schloss sich sofort wieder. Ursache: Die openModal() Funktionen in proposals.js und admin.js haben das Modal nicht beim Store registriert. Die globale Modal-Logik in app.js hat das Modal dann als "nicht offen" betrachtet und geschlossen. Loesung: openModal() ruft jetzt store.openModal() auf, closeModal() ruft store.closeModal() auf. Ausserdem wird die visible-Klasse gesetzt. Geaenderte Dateien: - frontend/js/proposals.js - frontend/js/admin.js CACHE-VERSION -------------------------------------------------------------------------------- sw.js: Cache-Version 70 ================================================================================ 21.12.2025 - Styling-Fixes Usermanagement und Genehmigung ================================================================================ FIX: UNSICHTBARE FORMULARFELDER -------------------------------------------------------------------------------- Problem: Die Eingabefelder in Benutzerverwaltung und Genehmigung-Modals waren nicht erkennbar/unsichtbar. Ursache: CSS verwendete nicht existierende Variablen (--bg-primary, --border-color, --border-radius, --accent-color). Loesung: CSS-Variablen korrigiert: - --bg-primary -> --bg-input - --border-color -> --border-default - --border-radius -> --radius-lg - --accent-color -> --primary Geaenderte Dateien: - frontend/css/admin.css - frontend/css/proposals.css FIX: DROPDOWN-STYLING BEI SORTIERUNG -------------------------------------------------------------------------------- Problem: Das Sortierungs-Dropdown in der Genehmigung-View war unsichtbar. Loesung: Custom-Styling mit sichtbarem Hintergrund und Dropdown-Pfeil. Geaenderte Datei: frontend/css/proposals.css FIX: SVG-ICONS FUER VOTE UND LOESCHEN -------------------------------------------------------------------------------- Problem: Die Icons fuer Vote (Daumen hoch) und Loeschen (Papierkorb) waren nicht sichtbar. Ursache: CSS verwendete fill:currentColor, aber SVGs sind stroke-basiert. Loesung: CSS auf stroke:currentColor umgestellt. Geaenderte Datei: frontend/css/proposals.css CACHE-VERSION -------------------------------------------------------------------------------- sw.js: Cache-Version 71 ================================================================================ 21.12.2025 - Umlaute-Korrektur ================================================================================ FIX: DEUTSCHE UMLAUTE IN TEXTEN -------------------------------------------------------------------------------- Problem: Texte verwendeten ae, oe, ue statt deutscher Umlaute. Loesung: Alle Texte in Benutzerverwaltung und Genehmigung auf korrekte deutsche Umlaute (ä, ö, ü) umgestellt. Geaenderte Dateien: - frontend/js/admin.js - frontend/js/proposals.js - frontend/index.html - CLAUDE.md (Konvention aktualisiert) CACHE-VERSION -------------------------------------------------------------------------------- sw.js: Cache-Version 72 ================================================================================ 20.12.2025 - Farbauswahl-Fix ================================================================================ KALENDER: DURCHGAENGIGE EINRAHMUNG BEI SUCHTREFFER -------------------------------------------------------------------------------- Problem: Bei mehrtaegigen Aufgaben wurde jeder Tag einzeln blau eingerahmt, was zu einer unterbrochenen Darstellung fuehrte. Loesung: Die Einrahmung ist jetzt durchgaengig fuer die gesamte Aufgabe: - Start: Border links, oben, unten (rechts offen) - Mitte: Border nur oben, unten (links und rechts offen) - Ende: Border rechts, oben, unten (links offen) Geaenderte Dateien: - frontend/css/calendar.css (search-highlight mit range-spezifischen Borders) - frontend/sw.js (Cache-Version 65) KALENDER: SUCHE ZEIGT ALLE AUFGABEN -------------------------------------------------------------------------------- Problem: Bei der Suche im Kalender wurden Aufgaben in der ersten Spalte (Offen) und letzten Spalte (Erledigt) nicht angezeigt, wenn die entsprechenden Checkboxen nicht aktiviert waren. Loesung: Waehrend einer aktiven Suche werden die Checkbox-Filter ignoriert. Alle Aufgaben (offen, in Bearbeitung, erledigt) werden angezeigt, damit die gesuchte Aufgabe sichtbar ist. Geaenderte Dateien: - frontend/js/calendar.js (getTasksByDate - isSearchActive Pruefung) - frontend/sw.js (Cache-Version 64) BOARD: BENUTZERFARBE BEI AUFGABEN AKTUALISIERT -------------------------------------------------------------------------------- Problem: Wenn die Benutzerfarbe geaendert wurde, zeigten die Aufgaben im Board weiterhin die alte Farbe bei der Zuteilung. Ursache: Die Farbe wurde aus task.assignedColor gelesen, das beim Laden vom Server gesetzt wurde und nicht aktualisiert wurde. Loesung: Die Farbe wird jetzt direkt aus der aktuellen users-Liste im Store geholt (store.get('users')), nicht aus dem Task-Objekt. Geaenderte Dateien: - frontend/js/board.js (createTaskCard - Farbe aus users-Liste) - frontend/sw.js (Cache-Version 63) BENUTZER-FARBAUSWAHL KORRIGIERT -------------------------------------------------------------------------------- Problem: In den Einstellungen wurde beim Oeffnen immer Blau als Standardfarbe angezeigt, obwohl eine andere Farbe (z.B. Orange) gewaehlt war. Ausserdem war ein redundanter Hex-Farbcode neben "Eigene Farbe" sichtbar. Loesung: - initColorPicker() liest jetzt Farbe von authManager.getUser() statt store - Hex-Farbcode-Anzeige entfernt (war ueberfluessig) - Farbvorschau zeigt jetzt korrekt die gespeicherte Benutzerfarbe Geaenderte Dateien: - frontend/js/app.js (initColorPicker, handleColorSelect) - frontend/index.html (color-hex entfernt) - frontend/sw.js (Cache-Version 58) BOARD UND KALENDER FARBAKTUALISIERUNG -------------------------------------------------------------------------------- Problem: Benutzerfarbe im Board und Kalender wurde erst nach Browser-Refresh (F5) angezeigt, nicht sofort nach Aenderung in den Einstellungen. Ursache: - this.board und this.calendar waren undefined (nie zugewiesen) - store.get('currentUser') war null (nie im Store gesetzt) - User-ID fuer users-Update war daher undefined Loesung: - boardManager.render() direkt aufrufen statt this.board.render() - calendarViewManager.render() direkt aufrufen statt this.calendar.render() - User-ID von authManager.getUser() holen statt von store.get('currentUser') - store.setUsers() verwenden fuer korrektes Update der users-Liste Geaenderte Dateien: - frontend/js/app.js (handleColorSelect komplett ueberarbeitet) - frontend/sw.js (Cache-Version 60) ================================================================================ 20.12.2025 ================================================================================ 1. BENUTZER-FARBAUSWAHL IN EINSTELLUNGEN -------------------------------------------------------------------------------- Problem: Benutzer konnten ihre Farbe nicht frei waehlen, nur Preset-Farben. Ausgewaehlte Farbe wurde nach F5 (Refresh) nicht beibehalten. Loesung: - Farbauswahl-Dialog erweitert um freie Farbwahl (Color Picker) - Preset-Farben UND Custom-Color-Picker nebeneinander - authManager.updateUserColor() aktualisiert jetzt auch localStorage: ```javascript updateUserColor(color) { if (this.user) { this.user.color = color; localStorage.setItem('current_user', JSON.stringify(this.user)); } } ``` - Event von 'input' auf 'change' geaendert (verhindert Mehrfach-Speicherung) - Aktuelle Farbe wird neben "Eigene Farbe" als Farbblock + Hex-Code angezeigt Geaenderte Dateien: - frontend/js/auth.js (updateUserColor mit localStorage) - frontend/js/app.js (initColorPicker, handleColorSelect) - frontend/index.html (color-current-display, color-hex-display) - frontend/css/modal.css (Styling fuer Farbanzeige) 2. SEPARATER SPEICHERN-BUTTON FUER NEUE AUFGABEN -------------------------------------------------------------------------------- Problem: Bei neuen Aufgaben wurde sofort gespeichert (Auto-Save), Benutzer wollte expliziten "Speichern" Button. Loesung (frontend/js/task-modal.js + frontend/index.html): - "Speichern" und "Abbrechen" Buttons fuer Create-Mode - "Zurueck" Button nur im Edit-Mode - Button-Sichtbarkeit basiert auf this.mode ('create' vs 'edit') 3. DRAG & DROP VERBESSERUNGEN -------------------------------------------------------------------------------- a) Lila Umrandung bleibt haengen: Problem: Nach dem Ablegen einer Aufgabe blieb die Spalte mit lila Border. Loesung (frontend/js/board.js - handleDrop): ```javascript $('.column-body.drag-over').forEach(el => el.classList.remove('drag-over')); $('.drop-indicator').forEach(el => el.remove()); ``` b) Eigene Sortierung: Problem: Aufgaben konnten nicht manuell sortiert werden. Loesung (frontend/js/store.js - getTasksByColumn): - Neue Sortierreihenfolge: 1. Position (Drag & Drop manuelle Sortierung) 2. Prioritaet (Hoch > Mittel > Niedrig) 3. Erstellungsdatum (aeltere zuerst) 4. "+ SPALTE" BUTTON UNTER SPALTEN ENTFERNT -------------------------------------------------------------------------------- Problem: Statischer "+ Spalte" Button unterhalb des Boards machte keinen Sinn. Loesung (frontend/index.html): - Button entfernt - Spalten werden nur noch ueber "+ Spalte hinzufuegen" rechts neben den Spalten hinzugefuegt 5. ARCHIV-FUNKTION KOMPLETT UEBERARBEITET -------------------------------------------------------------------------------- Problem: "Archiv anzeigen" zeigte archivierte Aufgaben in der Spaltenansicht. Benutzer wollte separate Uebersicht. Loesung: Neues Archiv-Modal implementiert a) HTML (frontend/index.html): - Neues Modal mit ID "archive-modal" - Liste fuer archivierte Aufgaben (#archive-list) - Leer-Hinweis (#archive-empty) b) CSS (frontend/css/modal.css): - .archive-list: Flex-Container mit Scroll - .archive-item: Zeile pro archivierte Aufgabe - .archive-item-info: Klickbarer Bereich (oeffnet Aufgabe) - .archive-item-actions: Buttons fuer Wiederherstellen/Loeschen c) JavaScript (frontend/js/app.js): - openArchiveModal(): Oeffnet das Archiv-Modal - renderArchiveList(): Rendert alle archivierten Aufgaben - restoreTask(taskId): Stellt Aufgabe wieder her - deleteArchivedTask(taskId): Loescht Aufgabe dauerhaft (mit Bestaetigung) - openArchivedTask(taskId): Oeffnet Aufgabe im Detail-Modal d) Store (frontend/js/store.js): - getTasksByColumn() zeigt nur nicht-archivierte Aufgaben 6. ARCHIV-BUGS BEHOBEN -------------------------------------------------------------------------------- Problem: Wiederherstellen und Loeschen funktionierten nicht. Ursache: Task-IDs wurden nicht als Strings uebergeben (onclick="app.restoreTask(${task.id})") Loesung (frontend/js/app.js): - IDs in Anfuehrungszeichen: onclick="app.restoreTask('${task.id}')" Problem: Aufgaben konnten im Archiv nicht geoeffnet werden. Loesung: - Klickbarer Info-Bereich mit onclick="app.openArchivedTask('${task.id}')" - openArchivedTask() Methode: Schliesst Archiv-Modal, oeffnet Task-Modal - Hover-Effekt zeigt Klickbarkeit an (Cursor, Hintergrund, blaue Titel-Farbe) 7. SUCHFILTER-PERSISTIERUNG KORRIGIERT -------------------------------------------------------------------------------- Problem: Suchfilter blieb im localStorage gespeichert und "hing sich auf". Loesung (frontend/js/store.js): - Suchfilter wird NICHT mehr im localStorage gespeichert - Beim Laden der Seite ist das Suchfeld immer leer ```javascript // Save filters WITHOUT search const { search, ...filtersToSave } = filters; localStorage.setItem('task_filters', JSON.stringify(filtersToSave)); // Ensure search is always empty on load store.setFilters({ ...parsed, search: '' }); ``` ================================================================================ 19.12.2025 ================================================================================ 1. LOGIN-BUTTON VERBESSERT -------------------------------------------------------------------------------- Problem: Der Anmeldebutton war auf dem hellen Login-Bildschirm schlecht lesbar. Loesung (frontend/css/board.css): - Gradient-Hintergrund: Von #4F46E5 zu #6366F1 fuer modernen Look - Spaeter geaendert zu Emerald-Gruen (#10B981) fuer besseren Kontrast - Schriftfarbe explizit auf Weiss (#FFFFFF) mit !important - Hoeherer Button: 48px statt 40px - Auffaelliger Schatten 2. TASTATURKUERZEL-OPTION ENTFERNT -------------------------------------------------------------------------------- Loesung: - Button "Tastaturkuerzel" aus dem User-Dropdown entfernt - Komplettes Shortcuts-Modal entfernt - Event-Listener fuer den Shortcuts-Button entfernt - Hinweis in Tour-Abschlussmeldung entfernt Geaenderte Dateien: - frontend/index.html - frontend/js/app.js - frontend/js/tour.js 3. KALENDER-BUGS BEHOBEN -------------------------------------------------------------------------------- a) Falsches Datum (20.12 statt 19.12): Problem: getDateString() verwendete toISOString() -> UTC-Konvertierung Loesung (frontend/js/calendar.js): - Geaendert zu lokalen Datumswerten b) Verschiebung bei durchgehenden Balken: Loesung: - Feste Mindestgroessen fuer Tagesnummer - Transparenter Border auf ALLEN Tagen 4. KALENDER-FARBSYSTEM -------------------------------------------------------------------------------- Problem: Aufgaben im Kalender waren schwer unterscheidbar. Loesung: - Spaltenfarbe als Hintergrund fuer Aufgabenbalken - Benutzer-Initialen als Badge angezeigt - Wochenansicht mit border-left Styling 5. AUFGABENBALKEN VERBREITERT -------------------------------------------------------------------------------- Loesung (frontend/css/calendar.css): - Padding auf 4px 8px erhoeht - Schriftgroesse auf 12px - Hoehe fuer mehrtaegige Aufgaben auf 24px - Bessere Lesbarkeit der Titel 6. UEBERFAELLIGE TAGE - ROTE RAHMEN ENTFERNT -------------------------------------------------------------------------------- Problem: Rote Linke-Rand-Markierung bei Tagen mit ueberfaelligen Aufgaben war zu aufdringlich. Loesung: - Nur noch das rote Ausrufezeichen auf den Aufgaben als Markierung 7. BENUTZER-INITIALEN KORRIGIERT -------------------------------------------------------------------------------- Problem: Mouseover-Tooltip zeigte "User1"/"User2" statt "HG"/"MH" Loesung (frontend/js/calendar.js): - user.username enthaelt die Initialen (nicht user.displayName) - getUserBadgeInfo() und getTaskTooltip() korrigiert 8. UEBERFAELLIGE AUFGABEN IN "ERLEDIGT"-SPALTE -------------------------------------------------------------------------------- Problem: Auch erledigte Aufgaben wurden als "ueberfaellig" markiert. Loesung (calendar.js & board.js): - Helper-Funktionen isTaskCompleted() und isTaskOverdue() implementiert - Abgeschlossene Aufgaben (letzte Spalte) zeigen keine Ueberfaellig-Markierung - Board zeigt absolutes Datum statt "vor 3 Tagen" fuer erledigte Aufgaben 9. CHECKBOX/SUBTASK-LOGIK KORRIGIERT -------------------------------------------------------------------------------- Problem: Neue Checkboxen waren immer angehakt, Logik funktionierte nicht. Ursache: setAttribute('checked', false) funktioniert nicht fuer Boolean-Properties Loesung (frontend/js/utils.js - createElement Funktion): - checked, disabled, selected werden jetzt als Element-Properties gesetzt - Nicht mehr als HTML-Attribute Code: ```javascript } else if (key === 'checked' || key === 'disabled' || key === 'selected') { element[key] = value; } ``` 10. ABHAENGIGKEITSFELD ENTFERNT -------------------------------------------------------------------------------- Loesung: - "Abhaengigkeit" Feld aus index.html entfernt (hatte keine Funktion) 11. DATEI-UPLOAD FEHLER BEHOBEN -------------------------------------------------------------------------------- Problem: "Unexpected field" Fehler beim Hochladen von Dateien. Ursache: Frontend sendete 'file', Backend erwartete 'files' Loesung (frontend/js/api.js): - FormData Feldname von 'file' auf 'files' geaendert - Entspricht Backend's upload.array('files', 10) 12. DATEI-ANZEIGE KORRIGIERT -------------------------------------------------------------------------------- Problem: Hochgeladene Dateien wurden nicht angezeigt. Ursachen: - Backend gibt { attachments: [...] } zurueck - Frontend erwartete result.file - Property-Namen: Backend nutzt camelCase, teilweise snake_case Loesung (frontend/js/task-modal.js): - Korrekte Verarbeitung von result.attachments - Unterstuetzung fuer beide Namenskonventionen: - originalName / original_name - sizeBytes / size - isImage (mit isImageFile() Fallback) 13. URL-NORMALISIERUNG BEI LINKS -------------------------------------------------------------------------------- Problem: Links ohne "https://" funktionierten nicht. Loesung (frontend/js/task-modal.js): - normalizeUrl() Funktion hinzugefuegt - URLs ohne Protokoll bekommen automatisch "https://" vorangestellt - Beispiel: "google.de" wird zu "https://google.de" 14. AUTO-SAVE SYSTEM IMPLEMENTIERT -------------------------------------------------------------------------------- Problem: Benutzer mussten manuell "Speichern" klicken. Loesung: - Alle Formularfeld-Aenderungen werden sofort gespeichert - autoSaveTask() Funktion fuer automatisches Speichern - Debounce fuer Textfelder (1 Sekunde Verzoegerung) - Label-Aenderungen loesen sofort Auto-Save aus Modal-Footer vereinfacht: - "Speichern" und "Abbrechen" Buttons entfernt - Neuer "Zurueck" Button schliesst Modal - Bei neuen Aufgaben: Erstellt Task vor dem Schliessen - Bei bestehenden Aufgaben: Speichert letzten Stand 15. BILDVORSCHAU BEI DATEI-UPLOADS REPARIERT -------------------------------------------------------------------------------- Problem: Hochgeladene Bilder zeigten keine Vorschau. Ursache: - /api/files/preview/:id erfordert JWT-Authentifizierung - kann keine Authorization-Header senden Loesung: a) Backend (backend/middleware/auth.js): - authenticateToken() akzeptiert Token auch via Query-Parameter - Prueft req.query.token zusaetzlich zu Header und Cookie b) Frontend (frontend/js/api.js): - getFilePreviewUrl() fuegt Token zur URL hinzu - Format: /api/files/preview/123?token=xxx ================================================================================ GEAENDERTE DATEIEN (UEBERSICHT) ================================================================================ Frontend: - frontend/index.html - Abhaengigkeitsfeld entfernt - Modal-Footer: "Zurueck" Button statt "Speichern/Abbrechen" - Shortcuts-Modal entfernt - Archive-Modal hinzugefuegt - Speichern/Abbrechen Buttons fuer Create-Mode - "+ Spalte" Button unter Board entfernt - Farbanzeige bei "Eigene Farbe" - frontend/js/api.js - Datei-Upload: FormData Feldname 'files' - getFilePreviewUrl(): Token als Query-Parameter - frontend/js/app.js - Shortcuts-Button Event-Listener entfernt - openArchiveModal(), renderArchiveList() - restoreTask(), deleteArchivedTask(), openArchivedTask() - escapeHtml() - initColorPicker(), handleColorSelect() erweitert - frontend/js/auth.js - updateUserColor() mit localStorage-Update - frontend/js/board.js - isTaskCompleted() fuer erledigte Aufgaben - Absolutes Datum statt "vor X Tagen" - handleDrop() Cleanup fuer drag-over States - frontend/js/calendar.js - getDateString(): Lokale Datumswerte - isTaskCompleted() / isTaskOverdue() - Spaltenfarben-System - Benutzer-Initialen korrigiert - Tooltip mit zugewiesenem Benutzer - frontend/js/store.js - getTasksByColumn() Sortierung (Position > Prioritaet > Datum) - Filter-Persistierung ohne Suchfeld - frontend/js/task-modal.js - Auto-Save System - URL-Normalisierung (normalizeUrl) - Datei-Handling korrigiert - Unterstuetzung fuer camelCase und snake_case - handleRestore() Methode - Button-Sichtbarkeit fuer Create/Edit Mode - frontend/js/tour.js - Tastaturkuerzel-Hinweis entfernt - frontend/js/utils.js - createElement: Boolean Properties korrekt behandelt - frontend/css/board.css - Login-Button Styling (Emerald-Gruen) - frontend/css/calendar.css - Tagesnummer Box-Sizing - Ueberfaellige Tage ohne roten Rand - frontend/css/modal.css - Archive-List Styling - Archive-Item Styling - Hover-Effekte fuer klickbare Bereiche - Farbanzeige-Styling - frontend/sw.js - Cache-Version: 15 -> 57 Backend: - backend/middleware/auth.js - Token-Authentifizierung via Query-Parameter - backend/routes/auth.js - PUT /api/auth/color Endpoint