Projekte / Arbeitsbereiche in Prilog — Konzept
Status: Konzept, wartet auf Approval Datum: 2026-05-12 Zielgruppe: Schul-Admins, Lehrer-Kollegium, später Vereins-/Unternehmens-Kunden
1. Vision in einem Satz
Ein Prilog-Projekt ist ein lebendiger Raum mit Chat, Aufgaben, Dokumenten, Kalender und Workflows — bündelt Menschen quer durch die Organisation um ein klares Ziel, schließt sauber ab und hinterlässt eine bewahrte Akte. Im Funktionsumfang Asana ebenbürtig, in Kommunikation, Wissens-Bewahrung und Workflow-Tiefe deutlich darüber.
2. Asana — was es kann, und wo es verliert
Was Asana richtig macht (Pflichtprogramm für Prilog)
| Bereich | Asana-Feature | Muss Prilog auch können |
|---|---|---|
| Sichten | List, Board, Timeline (Gantt), Calendar | ✓ alle vier |
| Tasks | Subtasks, Dependencies, Custom Fields, Multi-Assignee | ✓ |
| Statusberichte | Wöchentliche Status-Updates mit Health-Indikator | ✓ |
| Goals | Ziel-Tracking mit Key Results, Fortschritt % | ✓ |
| Portfolios | Bündel mehrerer Projekte für Übersicht | ✓ |
| Workload | Wer hat wieviele Tasks offen pro Woche | ✓ |
| Forms | Aufnahme-Formulare → automatische Tasks | ✓ |
| Rules | If-Then-Automatisierung pro Projekt | ✓ + besser (Flow-Designer) |
| Templates | Wiederverwendbare Projekt-Vorlagen | ✓ |
| My Tasks | Persönliche Inbox quer durch alle Projekte | ✓ haben wir schon |
| Comments | Threaded Comments, @mentions, Reactions | ✓ haben wir schon (Matrix) |
| Approvals | Tasks die genehmigt werden müssen | ✓ |
| Reports | Universal Reporting über Projekte hinweg | ✓ |
| Search | Globale Suche über alles | ✓ |
| Inbox | Notification-Stream | ✓ haben wir schon |
| Mobile | Native Apps iOS/Android | ✓ (PWA + später Native) |
| Integrations | Slack, Teams, Drive, Outlook | ✓ via Flow-Designer + n8n |
Wo Asana schwach ist — und Prilog gewinnt
| Asana-Schwäche | Prilog-Antwort |
|---|---|
| Kein Chat-Backbone — Comments unter Tasks sind asynchron, Diskussionen wandern nach Slack | Matrix-Chat ist der Projekt-Raum: Threads pro Task, Voice-Memos, Read-Receipts, Reactions |
| Wissen verfliegt beim Projekt-Ende — archiviert wird, aber Outcome ist verstreut auf Tasks/Files | Outcome-Akte: beim Abschluss wird Outcome-Doc + relevante Dateien automatisch ins Org-DMS überführt |
| Rules sind primitiv — flache If-Then-Liste, keine Verzweigungen | Flow-Designer (Process-Engine) mit Verzweigungen, If-Then-Else, Multi-Element-Boxen, Pan/Zoom |
| Externe brauchen Lizenz — Eltern, externe Partner, ehrenamtliche Helfer | GUEST-Permissions + Prilog-Tenant: Externe sind schon im System, ohne Extra-Lizenz |
| Statusberichte sind Handarbeit — jemand schreibt jeden Freitag den Wochenbericht | Auto-Status aus Activity: Aufgaben-Bewegung, Chat-Aktivität, Doc-Updates werden zu einem Vorschlag verdichtet, Lead bestätigt/editiert |
| Voice/Audio fehlt nativ | Flurfunk-Integration: Status-Update per Sprachnachricht, Whisper-Transkription, landet als Update + Audio-File |
| Keine Hierarchie zu Organisation — Projekte sind flach mit groben Portfolios | Org-Anbindung: Projekt kann an Space (Klasse 8a, Stufenleitung) gehängt werden — Outcome landet automatisch in der richtigen Org-Akte |
| Sichtbarkeit binär — public/private | Prilog-Visibility-Matrix: per UserType (Lehrer, Eltern, Schüler) feingranular |
| Notfall-Modus fehlt | Crisis-Eskalation: Projekt kann in den Krisen-Modus geschaltet werden — alle Beteiligten kriegen Push, Audit aktiviert sich, Reportings verschärft |
| Datensouveränität | Pro-Tenant-Stack, EU-Server, kein US-Cloud-Vendor |
Strategischer Kern: Asana ist ein Task-Tracking-Tool mit Kommentar-Funktion. Prilog wird ein kommunikativer, ergebnis-orientierter Arbeitsraum mit Task-Tracking, Workflow-Engine und Wissens-Archiv. Das ist ein anderer Anspruch.
3. Domain-Modell
3.1 Projekt als Space-Typ (Architektur-Entscheidung)
Ein Projekt ist technisch ein Space mit kind='project' und erweiterten Feldern. Das nutzt das gesamte Prilog-Ökosystem (Chat, DMS-Ebene, Aufgaben-Hub, Kalender, Flow-Designer, Apps) wieder, ohne Domain-Duplikation. Spaces werden nicht erweitert — sie bekommen ein Typ-Feld.
Space {
kind: 'org' | 'project' // NEU; default 'org' (Migration: alle existierenden = 'org')
...bestehende Felder...
}
Project {
id String // == Space.id (1:1)
spaceId String // == Space.id (FK, eindeutiger Index)
goal String // Ein-Satz-Ziel, Pflicht
goalDetails String? // ausführliche Beschreibung
startDate Date?
endDate Date?
status 'planning' | 'active' | 'on_hold' | 'completed' | 'cancelled' | 'archived'
healthIndicator 'green' | 'yellow' | 'red' | null // wird gesetzt beim Status-Update
ownerMatrixId String // Projekt-Lead, kann sich ändern
sponsorMatrixId String? // optional: Auftraggeber
parentSpaceId String? // optional: Org-Anbindung (Klasse 8a, Stufenleitung)
outcomeFolderId String? // wird beim Abschluss gefüllt: DMS-Ordner mit der Akte
templateId String? // wenn aus Template erstellt
budgetCents Int? // optional
visibilityMode 'open' | 'closed' | 'restricted' // wer kann beitreten?
createdAt, updatedAt
}
ProjectMember {
id String
projectId String
matrixUserId String
role 'lead' | 'member' | 'reviewer' | 'observer' | 'sponsor'
joinedAt DateTime
invitedBy String?
}
ProjectGoal {
id String
projectId String
title String // z.B. "Klassenfahrt findet statt"
targetMetric String? // "Anmeldungen ≥ 25"
currentValue String?
targetValue String?
progress Int // 0-100, manuell oder berechnet
status 'on_track' | 'at_risk' | 'off_track' | 'done'
dueDate Date?
}
ProjectStatusUpdate {
id String
projectId String
authorMatrixId String
weekOf Date // Mo der Woche
health 'green' | 'yellow' | 'red'
summary String // Markdown
goalProgress Json // Snapshot der ProjectGoals zu diesem Zeitpunkt
voiceFileMxc String? // optional: Audio-Original der Sprach-Aufnahme
voiceTranscript String? // Whisper-Transkript
autoGenerated Boolean // true wenn aus Activity verdichtet
publishedAt DateTime
}
ProjectActivity {
id String
projectId String
kind 'task_done' | 'task_added' | 'doc_added' | 'member_joined' | 'goal_progress' | 'status_published' | 'message_count'
actorMatrixId String?
payload Json
createdAt DateTime
}3.2 Was wir wiederverwenden (NICHT neu bauen)
| Bereich | Wir nutzen weiter |
|---|---|
| Chat | Matrix-Space = Projekt-Raum, Threads = Diskussion pro Task |
| Aufgaben | Aufgaben-Hub-Tabellen (work_items, Phase F+G Resultat-Doku) |
| DMS | 3-Ebenen-DMS, ein Projekt hat seinen Folder im SPACE-Scope |
| Kalender | calendar_layers per Space, Projekt-Termine als Layer |
| Workflows | Process-Engine / Flow-Designer, Projekt-Templates können Flows enthalten |
| Membership | Bestehende memberships-Tabelle mit Projekt-spezifischen Rollen oben drauf |
| Permissions | RolePermissionPolicy, Visibility-Matrix per UserType |
| Notifications | Existierender Notification-Stream (Sidebar-Badge, Push) |
| Voice | Flurfunk-Integration, Whisper-Transkription |
| Apps | App-Store-Pattern für optionale Projekt-Module |
3.3 Cross-Space-Membership
Ein Projekt-Space erlaubt freie Mitglied-Auswahl, unabhängig von der Org-Hierarchie. Das ist die entscheidende Abweichung von Org-Spaces.
Beispiel Klassenfahrt 8a:
Projekt "Klassenfahrt 8a → Berlin"
├─ Lead: Frau Müller (Klassenlehrerin)
├─ Members:
│ - Herr Schmidt (Bio-Lehrer, organisiert Bus) ← aus Lehrerzimmer
│ - Frau Becker (Elternvertreterin 8a) ← aus Eltern 8a
│ - Herr Wolf (Hausmeister, Reisekoffer-Logistik) ← aus Hausmeisterteam
│ - 28 Schüler:innen 8a (als observer + chat) ← aus Klasse 8a
└─ ParentSpace: "Klasse 8a" ← Outcome landet hier späterStandard-Org-Hierarchie (Klassen, Stufen, Lehrerzimmer) bleibt unberührt — Projekt sammelt nur Personen daraus.
3.4 Visibility-Modi
| Modus | Wer sieht das Projekt? | Wer kann beitreten? |
|---|---|---|
open | Alle im Tenant | Selbst-Beitritt |
closed | Mitglieder + Parent-Space-Admins | Auf Einladung |
restricted | Nur Mitglieder | Nur durch Lead |
Default: closed.
4. UI-Konzept
4.1 Neue Hub-Welt "Projekte"
Sechste Welt neben Users, Spaces, Favoriten, Abläufe, Wissen:
┌─ Hub-Sidebar ─────────────┐
│ 👥 Users │
│ 🏢 Spaces │
│ ⭐ Favoriten │
│ 🔄 Abläufe │
│ 📚 Wissen │
│ 🎯 Projekte ← NEU │
└────────────────────────────┘(Keine Emojis im Code, hier nur zur Skizze.)
4.2 Projekt-Übersicht (Hub-Welt)
┌─────────────────────────────────────────────────────────────────┐
│ Projekte [+ Neu] │
│ │
│ Filter: [Aktiv] [On Hold] [Abgeschlossen] [Meine] [Alle] │
│ Ansicht: [Kacheln] [Liste] [Portfolio] [Roadmap] │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─ Klassenfahrt 8a → Berlin ──────────┐ ┌─ Schulfest 2026 ──┐ │
│ │ ● aktiv · grün │ │ ● aktiv · gelb │ │
│ │ Ziel: Klassenfahrt findet statt │ │ 12 / 40 Aufgaben │ │
│ │ 7 / 12 Aufgaben · 2 Termine · 5 Doks │ │ Bis: 15.06.2026 │ │
│ │ Lead: Müller · 8 Members │ │ Lead: Klein · 22 M │ │
│ │ Bis: 14.04.2026 (in 11 Tagen) │ │ ────────────░░░ 30%│ │
│ └──────────────────────────────────────┘ └────────────────────┘ │
│ │
│ ┌─ Abi-Vorbereitung 2026 ───────────────────────────────────┐ │
│ │ ● aktiv · grün · Q4 Q1 [Roadmap-Streifen] │ │
│ │ Ziel: 100% bestehen · Lead: Wagner · 14 Members │ │
│ └─────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘4.3 Projekt-Detail-Page (Tabs)
┌─────────────────────────────────────────────────────────────────┐
│ ← Projekte / Klassenfahrt 8a → Berlin ● aktiv · grün │
│ │
│ Ziel: Klassenfahrt findet statt und wird zur prägenden Erinn… > │
│ Lead: Frau Müller · 8 Mitglieder · Bis: 14.04.2026 │
├──────────────────────────────────────────────────────────────────┤
│ [Übersicht] [Aufgaben] [Chat] [Doks] [Kalender] [Workflows] │
│ [Status] [Mitglieder] │
├──────────────────────────────────────────────────────────────────┤
│ │
│ ── Übersicht ── │
│ │
│ Aktueller Status (KW 15) │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ ● grün — alles im Plan │ │
│ │ "Bus gebucht, Elternabend war konstruktiv, 26 von 28 │ │
│ │ Anmeldungen retour. Offen: 2 Anmeldungen, Kostenfrage │ │
│ │ für 1 Schüler:in mit Bildungspaket." │ │
│ │ Auto-Vorschlag · von Müller bestätigt · 12.04. │ │
│ └────────────────────────────────────────────────────────┘ │
│ │
│ Ziele │
│ • Klassenfahrt findet statt [████ 80%] │
│ • Mind. 25 Anmeldungen 26/25 [████ 100%]│
│ • Budget eingehalten < 8.000€ bei 7.240€ [████ 92%]│
│ │
│ Letzte Aktivität │
│ • Frau Becker hat 3 Aufgaben erstellt vor 2 Std │
│ • Aufgabe "Anmeldebogen versenden" abgeschlossen vor 5 Std │
│ • Hr Schmidt: Sprachnachricht (Whisper-Transkript) gestern │
└──────────────────────────────────────────────────────────────────┘Tabs im Detail:
- Übersicht — Status, Ziele, Activity-Stream, Health-Indikator
- Aufgaben — Liste/Board/Timeline/Calendar-Switch (Asana-äquivalent), Sections, Dependencies, Custom Fields
- Chat — Matrix-Space-Chat mit Threads (= bestehender Space-Chat, neu skinned)
- Doks — DMS-Folder des Projekts, Tiptap-Editor inline, später Y.js-Collab
- Kalender — Termine als eigener Calendar-Layer
- Workflows — Flow-Designer-Instanzen für dieses Projekt (Aufnahme-Forms, Approvals, Eskalation)
- Status — alle wöchentlichen Status-Updates chronologisch (mit Voice-Originalen)
- Mitglieder — Liste, Einladen, Rollen-Verwaltung
4.4 Aufgaben-Ansichten (Asana-Parität)
List View:
☐ Anmeldungen einsammeln Müller 14.04 ★ Hoch
☐ Bus organisieren Schmidt 12.04 ● Mittel
↳ Angebote 3 Busunternehmen Schmidt 05.04 ✓
↳ Buchung bestätigen Schmidt 12.04 ☐
☐ Elternabend Einladung Müller 05.04 ✓ erledigtBoard View (heutiger Kanban + Gruppen aus dem Aufgaben-Gruppierungs-Konzept):
- Spalten: Zu erledigen, In Arbeit, Review, Erledigt
- Gruppen pro Spalte (siehe
aufgaben-gruppierung-konzept.md) - Drag & Drop wie heute
Timeline / Gantt:
- Aufgaben als Balken auf der Zeitachse
- Dependencies als Pfeile zwischen Balken
- Heutiges Datum als rote Linie
- Drag um Datum zu verschieben
Calendar:
- Aufgaben mit Due-Date als Termine
- Integration in den Calendar-Layer des Projekts
Sicht-Wechsel oben rechts, persistiert pro User.
4.5 Status-Update — der Auto-Vorschlag
Freitag früh, Lead bekommt Push: "Dein wöchentlicher Status-Update steht an."
┌─ Status für KW 15 vorbereiten ──────────────────────────────────┐
│ │
│ Wir haben das hier aus eurer Woche zusammengestellt: │
│ │
│ Health-Vorschlag: ● grün │
│ (basierend auf: 5 Aufgaben erledigt, keine überfällig, 2 neue) │
│ │
│ Vorgeschlagener Text (editierbar): │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ Diese Woche: 5 Aufgaben abgeschlossen, darunter Bus- │ │
│ │ Buchung und Elternabend. 2 neue Aufgaben aus Eltern- │ │
│ │ feedback (Verpflegung, Anreise). Status der Anmeldungen:│ │
│ │ 26/28. Risiken: 1 Schüler:in braucht Bildungspaket- │ │
│ │ Klärung — Frau Müller arbeitet daran. Nächste Woche: │ │
│ │ Programm-Detailplanung. │ │
│ └────────────────────────────────────────────────────────┘ │
│ │
│ [Sprachnachricht statt Text aufnehmen] [Auto-Text editieren] │
│ │
│ [Verwerfen] [Speichern als Entwurf] [Veröffentlichen] │
└──────────────────────────────────────────────────────────────────┘Veröffentlicht → landet im Status-Tab, geht als Chat-Nachricht in den Projekt-Space, Mitglieder kriegen Push.
Das gibt es bei Asana nicht. Asana zeigt eine leere Box mit Cursor.
4.6 Projekt-Erstellungs-Flow
[+ Neues Projekt]
↓
┌─ Wozu? ──────────────────────────────────────────┐
│ ○ Klassen-/Stufen-Projekt (Klassenfahrt, AG) │
│ ○ Schulorganisation (Schulfest, Konzept) │
│ ○ Notfall / Krise (mit Eskalation) │
│ ○ Aus Vorlage (Template-Liste) │
│ ○ Leer │
└───────────────────────────────────────────────────┘
↓
┌─ Ziel ────────────────────────────────────────────┐
│ Was soll am Ende erreicht sein? │
│ [____________________________________________] │
│ Ein-Satz-Ziel · wird groß auf der Übersicht │
│ │
│ Bis wann? [Datum] (optional) │
│ An welchen Space hängt es? [Klasse 8a ▾] │
└────────────────────────────────────────────────────┘
↓
┌─ Wer macht mit? ──────────────────────────────────┐
│ Lead (Du): Frau Müller ✓ │
│ + Mitglied hinzufügen [Suche...] │
│ Sichtbarkeit: [Geschlossen ▾] │
└────────────────────────────────────────────────────┘
↓
[Projekt anlegen]4.7 Projekt-Abschluss — der "Was war gut, was bleibt"-Moment
Wenn Status auf completed gesetzt wird:
┌─ Projekt abschließen — Klassenfahrt 8a ─────────────────────────┐
│ │
│ Glückwunsch — Ziel erreicht: │
│ ✓ Klassenfahrt findet statt │
│ │
│ Was war gut? │
│ [_________________________________________________________] │
│ │
│ Was würden wir nächstes Mal anders machen? │
│ [_________________________________________________________] │
│ │
│ Welche Dokumente sollen ins DMS-Archiv? │
│ ☑ Programm-Mappe.pdf │
│ ☑ Teilnehmerliste (final).xlsx │
│ ☑ Reisekostenabrechnung.pdf │
│ ☐ Chat-Protokoll (alles) │
│ ☐ Foto-Galerie (28 Bilder) │
│ │
│ Ziel-Ordner: Klasse 8a / Klassenfahrten / 2026 Berlin │
│ │
│ [Zurück] [Als Akte abschließen] │
└──────────────────────────────────────────────────────────────────┘Klick → DMS-Folder mit Outcome-Doc (Markdown aus Eingaben), gewählte Dateien werden kopiert, Akte ist read-only im Org-Space, Projekt-Space wird auf read-only gesetzt, alle Mitglieder bekommen "Projekt abgeschlossen"-Push mit Link zur Akte.
Das gibt es bei Asana nicht. Asana hat einen Archive-Toggle — fertig.
5. Feature-Liste mit Asana-Parität + Prilog-Plus
5.1 Asana-Parität (Pflicht)
| Feature | Wo in Prilog |
|---|---|
| List-View | neu im Projekt-Aufgaben-Tab (basiert auf work_items) |
| Board-View | bestehender Aufgaben-Hub-Kanban, erweitert um Gruppen |
| Timeline (Gantt) | neu, baut auf Tasks mit dueDate + Dependencies |
| Calendar-View | bestehender Calendar-Layer pro Projekt |
| Subtasks | bestehend (Checklisten im Aufgaben-Modul) |
| Dependencies | NEU als Feld in work_items (predecessorIds) |
| Custom Fields | NEU als generisches work_item_custom_fields pro Projekt |
| Multi-Assignee | bestehend |
| @mentions | bestehend (Matrix-Chat) |
| Comments | bestehend (Threads pro Task) |
| Attachments | bestehend (DMS-Anhänge) |
| Goals + Key Results | NEU: project_goals |
| Portfolios | NEU als Hub-Filter ("alle Projekte gehörig zu Stufenleitung 7-9") |
| Workload | NEU: Aggregation über work_items.assignedTo |
| Forms | bestehend (Flow-Designer mit Form-Element) |
| Rules | bestehend (Flow-Designer Verzweigungen) |
| Templates | NEU: project_templates mit pre-defined tasks + flows |
| My Tasks | bestehend (My-Tasks-Hub aus Aufgaben-Phase F+G) |
| Approvals | NEU: WorkItem-Type approval mit Reviewer-Liste |
| Universal Reporting | NEU: Reports-Tab in Hub-Welt Projekte |
| Search | bestehend, erweitert um Projekt-Filter |
| Mobile | PWA bestehend, Native später |
| Inbox | bestehend |
| Status Updates | NEU: project_status_updates |
5.2 Prilog-Plus (das, was Asana nicht hat)
| Feature | Beschreibung |
|---|---|
| Real-time-Chat als Backbone | Jeder Task hat einen Thread im Projekt-Space. Diskussion bleibt im Tool. |
| Voice-First Status-Updates | Lead nimmt 90s Sprachnachricht auf, Whisper transkribiert, Auto-Health-Score, Lead bestätigt |
| Auto-Status aus Activity | Vorschlag-Generator aus Aufgaben-Bewegung, Chat-Aktivität, Doc-Updates |
| Outcome-Akte | Sauberer Übergang ins DMS mit Retrospektiv-Fragen |
| Org-Anbindung | Projekt hängt an Parent-Space (Klasse, Stufe) — Outcome landet automatisch dort |
| Flow-Designer pro Projekt | Echte verzweigte Workflows statt If-Then-Rules |
| Crisis-Eskalation | Projekt in den Notfall-Modus schalten — Push an alle, Audit-Modus, KPIs verschärft |
| External-Friendly | Eltern/Externe ohne Asana-Lizenz, GUEST-Permissions, nur Projekt-relevante Sicht |
| Visibility-Matrix per UserType | Schüler sehen "kommende Termine", Eltern sehen "Kosten + Anmeldungen", Lehrer alles |
| Audit-Trail aller Aufgaben | DSGVO-konform, wer hat wann was geändert |
| DMS-3-Ebenen-Integration | Doc kann Project-scoped (im Projekt) oder Space-scoped (bleibt in Klasse 8a) sein |
| Per-Tenant-Isolation | Daten verlassen den Schul-Tenant nicht |
| Whisper-Aufgaben-Erfassung | "Hey Prilog: neue Aufgabe für Frau Müller, Anmeldebogen versenden, bis Mittwoch" → automatisch erfasst |
| Cross-Projekt-Tasks | Eine Aufgabe kann mehrere Projekte spannen (z.B. "Hausmeister-Schlüssel-Übergabe" für Schulfest UND Klassenfahrt) |
| Notfall-/Bell-Modus | Projekt-Push-Profile: Standard, Krise, Stumm |
6. Architektur — wo passt das in den Code
6.1 Backend (prilog-backend-api)
Neue Tabellen:
-- Migration NNNN_projects.sql
ALTER TABLE spaces ADD COLUMN kind text NOT NULL DEFAULT 'org';
CREATE INDEX spaces_kind_idx ON spaces(kind);
CREATE TABLE projects (
id text PRIMARY KEY,
space_id text NOT NULL UNIQUE REFERENCES spaces(id) ON DELETE CASCADE,
goal text NOT NULL,
goal_details text,
start_date date,
end_date date,
status text NOT NULL DEFAULT 'planning',
health_indicator text,
owner_matrix_id text NOT NULL,
sponsor_matrix_id text,
parent_space_id text REFERENCES spaces(id) ON DELETE SET NULL,
outcome_folder_id text REFERENCES dms_folders(id) ON DELETE SET NULL,
template_id text REFERENCES project_templates(id) ON DELETE SET NULL,
budget_cents int,
visibility_mode text NOT NULL DEFAULT 'closed',
tenant_id text NOT NULL REFERENCES tenants(id) ON DELETE CASCADE,
created_at timestamp NOT NULL DEFAULT NOW(),
updated_at timestamp NOT NULL
);
CREATE TABLE project_goals (...);
CREATE TABLE project_status_updates (...);
CREATE TABLE project_activity (...); -- append-only Event-Log
CREATE TABLE project_templates (...);
-- Erweiterung work_items für Asana-Parität
ALTER TABLE work_items ADD COLUMN dependency_ids text[];
ALTER TABLE work_items ADD COLUMN custom_fields jsonb DEFAULT '{}'::jsonb;
ALTER TABLE work_items ADD COLUMN is_approval boolean DEFAULT false;
ALTER TABLE work_items ADD COLUMN approval_status text; -- pending/approved/rejected
ALTER TABLE work_items ADD COLUMN linked_project_ids text[]; -- für Cross-ProjektNeue Services:
src/services/project/
├── project.service.ts # CRUD, Status-Transitions
├── project-status.service.ts # Wöchentliche Status-Updates + Auto-Vorschlag
├── project-activity.service.ts # Event-Log + Verdichtung
├── project-outcome.service.ts # Abschluss-Flow + DMS-Akte-Erstellung
├── project-template.service.ts # Vorlagen anwenden
├── project-workload.service.ts # Aggregation für Workload-View
└── project-roadmap.service.ts # Timeline-GenerierungNeue Routes:
src/routes/customer/projects.router.ts
GET /api/customer/projects Liste
POST /api/customer/projects Anlegen
GET /api/customer/projects/:id
PATCH /api/customer/projects/:id
POST /api/customer/projects/:id/members
DELETE /api/customer/projects/:id/members/:matrixId
POST /api/customer/projects/:id/status-updates Veröffentlichen
GET /api/customer/projects/:id/status-updates/draft Auto-Vorschlag
POST /api/customer/projects/:id/close Outcome-Flow starten
POST /api/customer/projects/:id/escalate-crisis Notfall-Modus an
GET /api/customer/projects/:id/workload
GET /api/customer/projects/:id/roadmap
POST /api/customer/projects/:id/voice-status Sprachnachricht hochladenTasks erweitern (im bestehenden Aufgaben-Router):
POST /api/customer/work-items/:id/dependencies
DELETE /api/customer/work-items/:id/dependencies/:depId
POST /api/customer/work-items/:id/approval-decision approved | rejected6.2 Frontend (prilog-web-client)
Neue Hub-Welt-Komponente:
src/features/projects/
├── ProjectsHub.tsx # Welt-Übersicht
├── ProjectsList.tsx # Kacheln / Liste / Portfolio
├── ProjectDetailPage.tsx # Container mit Tabs
├── tabs/
│ ├── OverviewTab.tsx # Status, Ziele, Activity
│ ├── TasksTab.tsx # List/Board/Timeline/Calendar (Switch)
│ ├── ChatTab.tsx # bestehender Space-Chat re-styled
│ ├── DocsTab.tsx # bestehender DMS-Folder-Viewer
│ ├── CalendarTab.tsx # bestehender Calendar-Layer
│ ├── WorkflowsTab.tsx # Flow-Designer eingebettet
│ ├── StatusTab.tsx # Status-Update-History
│ └── MembersTab.tsx
├── views/
│ ├── ListView.tsx
│ ├── BoardView.tsx # bestehender Kanban
│ ├── TimelineView.tsx # NEU (Gantt)
│ └── CalendarView.tsx # bestehender
├── status/
│ ├── StatusUpdateComposer.tsx
│ ├── StatusUpdateCard.tsx
│ └── VoiceStatusRecorder.tsx # Flurfunk-Wiederverwendung
├── close/
│ ├── ProjectCloseDialog.tsx
│ └── OutcomeFolderPicker.tsx
└── stores/
├── projects.store.ts
└── projectMembers.store.ts6.3 Process-Engine / Flow-Designer
Existierender Flow-Designer kriegt Projekt-Scope als Variable:
# Projekt-Template "Schulfest" mit eingebautem Flow
trigger: project.member_joined
when:
role: lead
do:
- send_chat: "Willkommen als Lead! Lege jetzt das Ziel und 3 Hauptaufgaben fest."
- create_workitem:
title: "Ziel und Hauptaufgaben definieren"
assigned_to: "{{trigger.matrix_user_id}}"
due_in_days: 1Diese Flow-Templates können per Projekt-Template ausgeliefert werden.
6.4 Apps-Integration
Projekt-Tab "Apps" zeigt die für dieses Projekt aktiven Module:
- Sheets (Tabellen pro Projekt)
- Drucker (Print-Jobs aus Projekt)
- Crisis (Eskalation an)
- Kontakte-Pro (Externe Stakeholder)
Per Toggle pro Projekt aktivierbar — analog zur Workspace-App-Konfiguration.
7. Phasen-Plan
Phase 1 — Minimal viable Projekt (~2 Wochen)
Ziel: Ein Projekt anlegen, Mitglieder hinzufügen, Aufgaben pflegen, Chat nutzen, Status setzen.
- DB-Migration:
spaces.kind, Tabelleprojects,project_goals,project_status_updates - Backend: CRUD-Routes
- Frontend: Hub-Welt Projekte, Liste, Detail mit Tab-Skelett
- Übersicht-Tab mit Ziel + Status (manuell)
- Aufgaben-Tab nutzt bestehenden Aufgaben-Hub gefiltert auf Projekt-Space
- Chat-Tab = bestehender Space-Chat
- Docs-Tab = bestehender DMS-Folder
- Members-Tab inkl. Cross-Space-Einladung
- Schließen = Status auf
completed, noch keine Outcome-Akte
Erfolg: Klassenfahrt-Planung läuft End-to-End.
Phase 2 — Asana-Sichten (~2 Wochen)
- Timeline-View (Gantt) im Aufgaben-Tab
- Dependencies zwischen Tasks
- Custom Fields generisch pro Projekt
- Calendar-View mit Calendar-Layer-Integration
- Multi-Assignee
- Approvals als WorkItem-Type
- View-Switcher persistiert pro User
Phase 3 — Goals & Status-Update (~1.5 Wochen)
project_goalsmit Progress-Tracking- Wöchentliche Status-Update-Komposition
- Health-Indikator manuell + Anzeige in Übersicht
- Status-Tab mit Historie
Phase 4 — Auto-Vorschlag aus Activity (~1.5 Wochen)
project_activityEvent-Log- Aggregation in
getDraftStatusUpdate(projectId, weekOf) - Vorschlag-Generator (Text-Template aus Activity-Counts)
- Voice-Status mit Whisper-Integration
Hier wird Prilog zum ersten Mal "besser als Asana".
Phase 5 — Outcome-Akte (~1 Woche)
- Close-Dialog mit Retrospektiv-Fragen
- DMS-Akte-Erstellung
- Datei-Auswahl-UI
- Read-Only-Modus für abgeschlossene Projekte
- Push-Notification an Mitglieder
Phase 6 — Templates & Workflow-Integration (~2 Wochen)
project_templatesTabelle- Template-Library mit Standard-Vorlagen (Klassenfahrt, Schulfest, Krisenfall, AG, Konzeptarbeit)
- Bei Erstellung aus Template: Tasks + Members-Rollen + Goals + Flows mitkopieren
- Flow-Designer-Triggers für
project.*-Events
Phase 7 — Portfolios & Reporting (~1.5 Wochen)
- Portfolio = Filter auf Hub-Welt mit Save-Funktion
- Universal Reporting-Tab in Hub-Welt
- Charts: Aufgaben pro Status, Health-Verteilung, Workload pro Lead
- Export als PDF/CSV (Import-Export-App-Pattern)
Phase 8 — Crisis-Eskalation & Mobile-Polish (~1 Woche)
- Crisis-Toggle pro Projekt
- Push-Profile-Switch
- Mobile-Optimierung der wichtigsten Sichten (List, Board, Status-Update)
Summe: ~13 Wochen für Full-Asana-Parität + Prilog-Plus.
Schnellster Demo-Pfad: Phase 1+3+5 (~5 Wochen) — dann hat man "Projekt-mit-Status-und-Akte", was schon mehr ist als Asana zum gleichen Aufwand.
8. Migration / Bestandsdaten
Spaces-Migration
- Alle existierenden Spaces:
kind = 'org'(Default) - Keine UI-Änderung im Hub, nur ein Filter wird hinzugefügt
Was wird zu Projekten?
- Nichts automatisch. User-Initiative. Wenn ein Schul-Admin meint "unser Lehrerzimmer-Space ist eigentlich kein Projekt sondern eine Org", bleibt es Org.
- Aber: wir bieten einen "In Projekt umwandeln"-Button für leere Spaces (kein Outcome-Risiko).
Workitem-Migration
dependency_ids,custom_fields,is_approval,approval_status,linked_project_idswerden mit Default leer/null gefüllt.- Bestandsfunktionalität bleibt unverändert.
Bestehende Aufgaben-Gruppierung
- Das
aufgaben-gruppierung-konzept.md(BoardGroups) bleibt — sie wird zur Sub-Strukturierung innerhalb eines Projekt-Boards.
9. Risiken & Anti-Patterns
| Risiko | Gegenmaßnahme |
|---|---|
| Konzept-Verwässerung "Space" | UI markiert Projekt-Spaces visuell deutlich (Badge, andere Icon-Farbe). Erstellungs-Flow trennt klar "Klasse anlegen" vs. "Projekt starten". |
| Feature-Creep Richtung Asana-Klon | Wir bauen Asana-Parität nur dort, wo Schul-Workflows es brauchen. Workload-View ja, Workspace-Templates ja, Goals ja. Keine OKR-Tools, kein eigenes BI-Layer. |
| Über-Komplexität für kleine Schulen | Hub-Welt Projekte ist optional (Tenant-Setting projects_enabled). Standard für neue Tenants: aktiviert. |
| Performance: viele Projekte | Indexes auf kind, status, ownerMatrixId, parentSpaceId. Hub-Welt mit Pagination ab 50 Projekten. |
| Cross-Space-Membership-Confusion | UI zeigt im Org-Space-Mitgliederlisten KEINE Project-Members, die nur durch ein Projekt da sind. Memberships-Tabelle bekommt joined_via Feld ('org' | 'project'). |
| Outcome-Akte landet im falschen Folder | UI im Close-Dialog zeigt Vorschau des Ziel-Folders, Lead muss bestätigen. |
| Status-Update wird zur Lästigkeit | Frequenz pro Projekt einstellbar (wöchentlich, 2-wöchentlich, monatlich, aus). Auto-Vorschlag macht es "kostenlos" — Lead drückt nur Enter. |
| Visibility-Bugs (Eltern sehen interne Lehrer-Tasks) | Visibility-Matrix-Tests im Smoke-Test pro Projekt-Template. |
10. Offene Entscheidungen (für nächste Diskussion)
- Projekt-Owner-Wechsel: Soll beim Wechsel die Outcome-Akte beim alten Owner bleiben oder mitwandern?
- Multi-Projekt-Tasks: Workflow-Risiko — eine Aufgabe in 3 Projekten, jeder Owner zieht sie woanders hin. Erlauben mit Lock-Mechanismus oder erst mal verbieten?
- Templates aus echten Projekten erzeugen — "speichere dieses Projekt als Vorlage". Phase 6 oder später?
- Projekt-Budget-Tracking —
budgetCentsist im Modell, aber nutzen wir es? (Klassenfahrt: ja. Krisenfall: nein.) Optional pro Template-Typ? - Stundennachweise / Time-Tracking — Asana hat das (Tracker-Integrationen). Wollen wir das? (Schulen: eher nein. Vereine/Unternehmen: vielleicht.)
- Externe in Projekten (echte Externe ohne Tenant-Account) — via Magic-Link / Share-Link wie bei DMS? Phase 8 oder eigene Folge-Iteration?
- Roadmap-Welt-Übersicht — eine Schul-Übersicht aller Projekte auf einer Zeitachse für die Schulleitung. Sinnvoll oder Overkill?
- Krisenmanagement-App vs. Projekt-Crisis-Modus — wo ist die Trennlinie? Krisenmanagement-App bleibt für Akut-Notfälle (Brand, Krankheit), Projekt-Crisis-Modus für eskalierende Projektsituationen?
11. Was es nicht wird
- Kein Jira/Linear-Klon — keine Sprints, kein Velocity, kein Burndown, keine Story-Points.
- Kein OKR-Tool — Goals bleiben einfach, keine Cascade auf Organisationsebene.
- Kein eigenes BI-Tool — Reports sind direkt, keine Pivot-Tables, keine Power-BI-artigen Dashboards.
- Keine Stechuhr — Time-Tracking nur wenn ein Tenant es explizit braucht und als Folge-Iteration.
- Kein Replika von Notion — Docs sind Tiptap im DMS, nicht freie Wiki-Hierarchie pro Projekt.
12. Zusammenfassung in 5 Sätzen
- Projekt = Space mit
kind='project'und extra Feldern; kein Domain-Doppel. - Volle Asana-Parität (List, Board, Timeline, Calendar, Goals, Portfolios, Workload, Templates, Forms, Rules, Approvals).
- Drei Prilog-Killer-Features: Chat-Backbone, Auto-Status mit Voice, Outcome-Akte ins DMS.
- Cross-Space-Mitgliedschaft, GUEST-Permissions, Visibility-Matrix per UserType — Eltern + Externe ohne Extra-Lizenz.
- 13 Wochen Full-Spec, 5 Wochen Demo-tauglich, Hub-Welt ist optional pro Tenant.