# 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)
