# 📋 Kernmodul 2: Aufgaben & Kanban-System Das Aufgaben-Modul ([`TasksView.tsx`](../../frontend/src/features/triage/TasksView.tsx)) bietet eine flexible Aufgabenverwaltung mit frei konfigurierbaren Listen, Kanban-Boards, Subtask-Checklisten und einem automatisierten Multi-Channel Alarm-System. --- ## 🗂️ 1. Datenmodell & Listen-Hierarchie Aufgaben basieren technisch auf der Tabelle **`thoughts`** in SQLite. Ein Eintrag gilt als Aufgabe, wenn `status = 'kept'` oder `(status = 'converted' AND converted_type = 'task')` zutrifft. ``` Benutzer (users) └── Aufgabenlisten (task_lists) ├── Eigene Listen (z.B. "Privat", "Homelab") └── Mit Teams geteilte Listen (task_list_shares) └── Aufgaben (thoughts) ├── Kanban-Status (todo, in_progress, done) ├── Priorität (low, normal, high, urgent) ├── Fälligkeitsdatum (dueDate) ├── Notizen (notes) └── Subtasks (JSON Array von Teilaufgaben) ``` ### Listen-Sharing & Avatar-Stack Aufgabenlisten können für Gruppen/Teams freigegeben werden. Ein Avatar-Stack im Listen-Header und in der Tab-Leiste visualisiert alle Mitglieder, die Zugriff auf die jeweilige Liste haben. --- ## 🖥️ 2. Ansichten: Liste vs. Kanban-Board Der Benutzer kann jederzeit nahtlos zwischen zwei Ansichten umschalten: ### 1. Kompakte Listenansicht - Optimiert für schnelles Abarbeiten und Tastatursteuerung. - Zeigt Checkbox, Titel, Prioritäts-Badge, Herkunfts-Pille (`Webhook`, `Diktat`), Fälligkeitsdatum und Subtask-Zähler (`2/5`). - 1-Klick-Prioritäts-Wechsel: Klick auf ein Badge rotiert durch die Prioritäten. ### 2. Kanban-Board (Drag & Drop) - Standardmäßig 3 Spalten: **Zu erledigen** (`todo`), **In Arbeit** (`in_progress`) und **Erledigt** (`done`). - **Freie Spalten-Konfiguration:** Über das Spalten-Menü können Spalten umbenannt, farblich markiert oder neue Spalten hinzugefügt werden. - **Drag & Drop:** Aufgaben können per HTML5 Drag & Drop zwischen Spalten verschoben werden. Das Backend speichert die relative Position (`sort_order`) und den neuen `kanban_status` automatisch. --- ## 🎯 3. Prioritäten & Subtasks ### 4-Stufen-Prioritätensystem Aufgaben unterstützen vier einheitliche Prioritätsstufen: - **Niedrig (`low`):** Dezent grau hinterlegt. - **Normal (`normal`):** Akzentfarbe. - **Wichtig (`high`):** Gelb hervorgehoben mit Warndreieck (`⚠️ Wichtig`). - **Dringend (`urgent`):** Rot pulsierend mit Flammen-Icon (`🔥 Dringend`). ### Subtasks (Teilaufgaben) Jede Aufgabe kann eine hierarchische Checkliste von Subtasks enthalten: - Gespeichert als JSON in der Spalte `subtasks`. - Fortschrittsanzeige im Kartenkopf (z.B. `3/5 erledigt`). - Einzelnes Abhaken synchronisiert direkt in die Datenbank. --- ## ⏰ 4. Multi-Channel Alarm-Scheduler MindSift enthält einen serverseitigen Hintergrund-Ticker in Go ([`internal/api/server.go`](../../internal/api/server.go)), der fällige Aufgaben proaktiv an externe Kanäle meldet. ```mermaid flowchart TD Ticker["Go Background Ticker (alle 30s)"] --> Query["SELECT thoughts WHERE due_date <= now + Vorwarnzeit AND alarm_sent = 0"] Query --> CheckChannels{"Welche Kanäle sind beim User aktiv?"} CheckChannels -->|email| SendSMTP["E-Mail via SMTP versenden"] CheckChannels -->|discord| SendDiscord["Discord Webhook POST"] CheckChannels -->|webhook| SendCustom["Custom HTTP POST Webhook"] SendSMTP --> MarkSent["UPDATE thoughts SET alarm_sent = 1"] SendDiscord --> MarkSent SendCustom --> MarkSent ``` ### Alarm-Konfiguration 1. **Vorwarnzeit:** Einstellbar in Minuten (z.B. 15, 30, 60 Minuten vor Fälligkeit). 2. **Kanal-Multi-Select:** Benutzer können beliebig viele Kanäle parallel aktivieren: - **E-Mail:** Versand über den in den Admin-Einstellungen hinterlegten SMTP-Server. - **Discord:** Benachrichtigung mit formatierter Embed-Karte in einen Discord-Kanal. - **Eigener Webhook:** Beliebige HTTP POST JSON Endpunkte (z.B. Gotify, Ntfy, Home Assistant). 3. **Schutz vor Doppel-Alarmen:** Sobald ein Alarm abgesetzt wurde, wird `alarm_sent = 1` gesetzt. Wird das Datum der Aufgabe später geändert, setzt der Server `alarm_sent = 0` automatisch zurück.