# TaskMate - Projektanweisungen ## Infrastruktur/Server - **Docker-Container**: `taskmate` (hauptsächlich Backend), läuft auf Port 3001 intern → 3000 im Container - **Frontend-Domain**: https://taskmate.aegis-sight.de - **Gitea-Repository**: https://gitea-undso.aegis-sight.de/AegisSight/TaskMate - **Gitea-Token**: `7c62fea51bfe0506a25131bd50ac710ac5aa7e3a9dca37a962e7822bdc7db840` - **Projektverzeichnis auf Server**: `/home/claude-dev/TaskMate` ## Allgemein - Sprache: Deutsch für Benutzer-Kommunikation - Änderungen immer in CHANGELOG.txt dokumentieren nach bisher bekanntem Schema in der Datei - Beim Start ANWENDUNGSBESCHREIBUNG.txt lesen - Cache-Version in frontend/sw.js erhöhen nach Änderungen - Ich bin kein Mensch mit Fachwissen im Bereich Coding, daher musst du sämtliche Aufgaben in der Regel übernehmen. ## Technologie - Frontend: Vanilla JavaScript (kein Framework) - Backend: Node.js mit Express - Datenbank: SQLite ## Konventionen - CSS-Variablen in frontend/css/variables.css - Deutsche Umlaute (ä, ö, ü) in Texten verwenden ## Datumsformatierung (WICHTIG) - NIEMALS `toISOString()` für Datumsvergleiche oder -anzeigen verwenden! - `toISOString()` konvertiert in UTC und verursacht Zeitzonenverschiebungen (z.B. 28.12. wird zu 27.12.) - Stattdessen lokale Formatierung verwenden: ```javascript // Richtig: Lokale Formatierung const year = date.getFullYear(); const month = String(date.getMonth() + 1).padStart(2, '0'); const day = String(date.getDate()).padStart(2, '0'); const dateStr = `${year}-${month}-${day}`; // Falsch: UTC-Konvertierung const dateStr = date.toISOString().split('T')[0]; // NICHT VERWENDEN! ``` ## Echtzeit-Aktualisierung (KRITISCH) - ALLE Nutzeranpassungen müssen SOFORT und ÜBERALL in der Anwendung sichtbar sein - Der Nutzer darf NIEMALS den Browser aktualisieren müssen (F5), um Änderungen zu sehen - Beispiele für Änderungen, die sofort überall wirken müssen: - Spaltenfarbe ändern → Board, Kalender, Wochenstreifen sofort aktualisieren - Aufgabe erstellen/bearbeiten/löschen → alle Ansichten sofort aktualisieren - Labels, Benutzer, Projekte ändern → überall sofort sichtbar - Technische Umsetzung: - `store.subscribe('tasks', callback)` - für Aufgabenänderungen - `store.subscribe('columns', callback)` - für Spaltenänderungen - `store.subscribe('labels', callback)` - für Label-Änderungen - `store.subscribe('users', callback)` - für Benutzeränderungen - `window.addEventListener('app:refresh', callback)` - für allgemeine Aktualisierungen - `window.addEventListener('modal:close', callback)` - nach Modal-Schließung - Bei JEDER neuen Komponente diese Event-Listener einbauen - Bei JEDER Datenänderung prüfen: Welche UI-Bereiche müssen aktualisiert werden? ## Berechtigungen/Aktionen - Du sollst den Dockercontainer eigenständig - sofern erforderlich - neu starten/neu bauen, dass Änderungen wirksam werden - Erreichbarkeit der Anwendung über https://taskmate.aegis-sight.de (keine automatische Browser-Öffnung)