- Session-Timeout auf 60 Minuten erhöht (ACCESS_TOKEN_EXPIRY + SESSION_TIMEOUT) - AegisSight Light Theme: Gold-Akzent (#C8A851) statt Indigo - Navigation-Tabs in eigene Zeile unter Header verschoben (HTML-Struktur) - Filter-Bar durch kompaktes Popover mit Checkboxen ersetzt (Mehrfachauswahl) - Archiv-Funktion repariert (lädt jetzt per API statt leerem Store) - Filter-Bugs behoben: Reset-Button ID, Default-Werte, Ohne-Datum-Filter - Mehrspalten-Layout Feature entfernt - Online-Status vom Header an User-Avatar verschoben (grüner Punkt) - Lupen-Icon entfernt - CLAUDE.md: Docker-Deploy und CSS-Tricks Regeln aktualisiert Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
8.2 KiB
TaskMate - Projekt-Konfiguration
YAML-Format fuer KI-Assistenten
PROJECT: name: TaskMate type: PRODUCTION url: https://taskmate.aegis-sight.de container: taskmate port_external: 3001 port_internal: 3000 gitea: https://gitea-undso.aegis-sight.de/AegisSight/TaskMate
USER_PROFILE: programming_skills: NONE support_level: FULL_SERVICE communication: SIMPLE_LANGUAGE
COMMUNICATION_RULES: do: - "Alle technischen Aufgaben vollstaendig uebernehmen" - "In einfachen Worten erklaeren was passiert" - "Alle Schritte selbststaendig ausfuehren" - "Status-Updates geben: Aenderung abgeschlossen, teste jetzt..." dont: - "NIEMALS nach technischen Details fragen" - "NIEMALS nach Code-Schnipseln fragen" - "NIEMALS Befehle zum Ausfuehren geben" - "NIEMALS nach Logs oder Console fragen"
CRITICAL_RULES: 1_cache_version: "Nach Frontend-Aenderungen: frontend/sw.js CACHE_VERSION erhoehen" 2_changelog_file: "Bei JEDER Aenderung: CHANGELOG.txt aktualisieren" 3_changelog_db: "Bei JEDER Aenderung: Wissensdatenbank Changelog aktualisieren (siehe WORKFLOWS)" 4_no_toISOString: "NIEMALS toISOString() fuer Datums-Operationen (UTC-Problem!)" 5_realtime_updates: "User darf NIE F5 druecken muessen" 6_docker_restart: "Nach Backend-Aenderungen: docker compose up -d --build (NICHT docker restart - das nutzt das alte Image!)" 7_no_css_tricks: "Layout-Aenderungen immer ueber HTML-Struktur loesen, NIEMALS mit CSS-Tricks wie flex-wrap+order, negative margins oder aehnlichem. Wenn ein Element in eine eigene Zeile soll, muss es ein eigenes HTML-Element sein."
PROTECTED_DATA: project: "AegisSight" description: "Produktiv im Einsatz - NIEMALS loeschen oder aendern" protected_users: - admin - "Hendrik (hendrik_gebhardt@gmx.de)" - "Monami (momohomma@googlemail.com)" forbidden_actions: - "Nutzerdaten aendern" - "Passwoerter aendern" - "Datenbank-Resets ohne Anweisung" - "Testdaten in Produktivdaten"
COMMANDS: restart: "docker restart taskmate" rebuild: "cd /home/claude-dev/TaskMate && docker compose build --no-cache && docker compose up -d" logs: "docker logs taskmate -f --tail 100" health: "curl http://localhost:3000/api/health" copy_frontend: "docker cp frontend/js/ taskmate:/app/public/js/" copy_backend: "docker cp backend/routes/ taskmate:/app/routes/"
FILE_STRUCTURE: frontend: core: - "frontend/js/app.js - Hauptanwendung & View-Controller" - "frontend/js/store.js - State Management (Pub-Sub)" - "frontend/js/api.js - API Client mit Auth/CSRF" - "frontend/js/auth.js - Login/Token-Verwaltung" - "frontend/js/sync.js - Socket.io Echtzeit" views: - "frontend/js/board.js - Kanban-Board mit Drag&Drop" - "frontend/js/calendar.js - Kalender (Monat/Woche)" - "frontend/js/list.js - Listenansicht" - "frontend/js/dashboard.js - Statistik-Dashboard" - "frontend/js/proposals.js - Vorschlagssystem" - "frontend/js/knowledge.js - Wissensdatenbank" - "frontend/js/admin.js - Benutzerverwaltung" important: - "frontend/sw.js - Service Worker mit CACHE_VERSION" - "frontend/index.html - Haupt-HTML" backend: core: - "backend/server.js - Express Server mit Socket.io" - "backend/database.js - Datenbankschema (20+ Tabellen)" routes: - "/api/auth - Login/Logout" - "/api/tasks - Aufgaben CRUD" - "/api/projects - Projekte" - "/api/columns - Kanban-Spalten" - "/api/comments - Kommentare" - "/api/files - Datei-Upload" - "/api/proposals - Vorschlaege" - "/api/knowledge - Wissensdatenbank" other: - "CHANGELOG.txt - Aenderungsprotokoll"
DATABASE: type: SQLite path: "data/taskmate.db" tables: - users - projects - columns - tasks - task_labels - task_assignees - comments - attachments - proposals - notifications - knowledge_categories - knowledge_entries
CODE_PATTERNS:
date_formatting:
correct: |
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};
wrong: "date.toISOString().split('T')[0] // NIEMALS - UTC Problem!"
toast_messages: correct: | window.dispatchEvent(new CustomEvent('toast:show', { detail: { message: 'Text', type: 'success' } })); wrong: "store.showMessage('Text', 'success') // existiert nicht"
realtime_updates: required: | store.subscribe('tasks', () => renderTasks()); window.addEventListener('app:refresh', () => updateView());
TROUBLESHOOTING: frontend_changes_not_visible: problem: "Frontend-Dateien werden beim Build kopiert, nicht live gemountet" solution_dev: "docker cp frontend/js/ taskmate:/app/public/js/" solution_prod: "cd /home/claude-dev/TaskMate && docker compose build --no-cache && docker compose up -d"
401_unauthorized: problem: "Token abgelaufen" solution: "Neu einloggen"
csrf_error: problem: "CSRF Token ungueltig" solution: "Browser-Cache/Cookies loeschen, neu einloggen"
missing_data: problem: "Daten scheinen verschwunden" first_check: "docker logs taskmate - auf 401/403 Fehler pruefen" note: "NIEMALS sofort Backup/Restore - erst Auth pruefen"
WORKFLOWS: changelog_entry: description: "PFLICHT bei jeder Code-Aenderung" step_1: name: "CHANGELOG.txt aktualisieren" file: "/home/claude-dev/TaskMate/CHANGELOG.txt" format: "DD.MM.YYYY - vXXX - Kurzbeschreibung" step_2: name: "Wissensdatenbank Changelog aktualisieren" command: | docker exec taskmate node -e " const Database = require('better-sqlite3'); const db = new Database('/app/data/taskmate.db'); db.prepare(` INSERT INTO knowledge_entries (category_id, title, notes, position, created_by) VALUES (15, 'DD.MM.YYYY - Beschreibung', 'Markdown-Inhalt', 0, 1) `).run(); console.log('Changelog erstellt'); " category_id: 15 title_format: "DD.MM.YYYY - Kurze Beschreibung" notes_format: "Markdown mit Details (Problem, Loesung, geaenderte Dateien)"
deployment: steps: - "Cache-Version erhoehen: frontend/sw.js" - "CHANGELOG.txt aktualisieren" - "Wissensdatenbank Changelog aktualisieren" - "docker cp oder docker build" - "docker compose up -d (Container mit neuem Image starten)" - "Testen: https://taskmate.aegis-sight.de" - "Browser-Cache leeren (Strg+F5)"
CONVENTIONS: language_ui: Deutsch language_code: Englisch umlauts: "ae oe ue verwenden (ä ö ü)" emojis: "Nur in Dokumentation, nicht in Code/UI" auto_save: true
SECURITY: auth: type: JWT validity: 24h storage: localStorage csrf: header: "X-CSRF-Token" generated_at: login roles: admin: "Nur Benutzerverwaltung" user: "Alles ausser Admin-Bereich"
KNOWN_ISSUES: docker_rebuild: problem: "docker restart nutzt das ALTE Image - Code-Aenderungen werden NICHT uebernommen" wichtig: "docker build allein reicht auch nicht, da docker-compose den alten Container weiter nutzt" solution: "cd /home/claude-dev/TaskMate && docker compose build --no-cache && docker compose up -d" hinweis: "Immer mit --no-cache bauen, da Docker COPY-Layer cached auch wenn Dateien sich geaendert haben" svg_rendering: problem: "createElement() unterstuetzt kein SVG-Namespace" solution: "SVG mit innerHTML oder String-Template einfuegen"
field_name_mismatch: problem: "Backend camelCase vs Frontend snake_case" solution: "Fallback-Pattern: data.originalName || data.original_name"
file_upload: problem: "Multer Unexpected field Error" solution: "Konsistent 'files' (plural) verwenden"
ROLLBACK: backup_db: "cp data/taskmate.db data/taskmate.db.backup-$(date +%Y%m%d-%H%M%S)" backup_docker: "docker commit taskmate taskmate-backup-$(date +%Y%m%d-%H%M%S)" restore_code: "git stash && git checkout HEAD~1"
Last-Updated: 2026-03-19