4.2 KiB
📋 Kernmodul 2: Aufgaben & Kanban-System
Das Aufgaben-Modul (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 neuenkanban_statusautomatisch.
🎯 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), der fällige Aufgaben proaktiv an externe Kanäle meldet.
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
- Vorwarnzeit: Einstellbar in Minuten (z.B. 15, 30, 60 Minuten vor Fälligkeit).
- 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).
- Schutz vor Doppel-Alarmen: Sobald ein Alarm abgesetzt wurde, wird
alarm_sent = 1gesetzt. Wird das Datum der Aufgabe später geändert, setzt der Serveralarm_sent = 0automatisch zurück.