Files
TaskMate/CHANGELOG.txt
2025-12-30 22:49:56 +00:00

1846 Zeilen
79 KiB
Plaintext

TASKMATE - CHANGELOG
====================
================================================================================
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 <email>" -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
- <img src=""> 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