TASKMATE - CHANGELOG
====================

================================================================================
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
