- 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>
228 Zeilen
8.2 KiB
Markdown
228 Zeilen
8.2 KiB
Markdown
# 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
|