Skip to content

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)

BereichAsana-FeatureMuss Prilog auch können
SichtenList, Board, Timeline (Gantt), Calendar✓ alle vier
TasksSubtasks, Dependencies, Custom Fields, Multi-Assignee
StatusberichteWöchentliche Status-Updates mit Health-Indikator
GoalsZiel-Tracking mit Key Results, Fortschritt %
PortfoliosBündel mehrerer Projekte für Übersicht
WorkloadWer hat wieviele Tasks offen pro Woche
FormsAufnahme-Formulare → automatische Tasks
RulesIf-Then-Automatisierung pro Projekt✓ + besser (Flow-Designer)
TemplatesWiederverwendbare Projekt-Vorlagen
My TasksPersönliche Inbox quer durch alle Projekte✓ haben wir schon
CommentsThreaded Comments, @mentions, Reactions✓ haben wir schon (Matrix)
ApprovalsTasks die genehmigt werden müssen
ReportsUniversal Reporting über Projekte hinweg
SearchGlobale Suche über alles
InboxNotification-Stream✓ haben wir schon
MobileNative Apps iOS/Android✓ (PWA + später Native)
IntegrationsSlack, Teams, Drive, Outlook✓ via Flow-Designer + n8n

Wo Asana schwach ist — und Prilog gewinnt

Asana-SchwächePrilog-Antwort
Kein Chat-Backbone — Comments unter Tasks sind asynchron, Diskussionen wandern nach SlackMatrix-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/FilesOutcome-Akte: beim Abschluss wird Outcome-Doc + relevante Dateien automatisch ins Org-DMS überführt
Rules sind primitiv — flache If-Then-Liste, keine VerzweigungenFlow-Designer (Process-Engine) mit Verzweigungen, If-Then-Else, Multi-Element-Boxen, Pan/Zoom
Externe brauchen Lizenz — Eltern, externe Partner, ehrenamtliche HelferGUEST-Permissions + Prilog-Tenant: Externe sind schon im System, ohne Extra-Lizenz
Statusberichte sind Handarbeit — jemand schreibt jeden Freitag den WochenberichtAuto-Status aus Activity: Aufgaben-Bewegung, Chat-Aktivität, Doc-Updates werden zu einem Vorschlag verdichtet, Lead bestätigt/editiert
Voice/Audio fehlt nativFlurfunk-Integration: Status-Update per Sprachnachricht, Whisper-Transkription, landet als Update + Audio-File
Keine Hierarchie zu Organisation — Projekte sind flach mit groben PortfoliosOrg-Anbindung: Projekt kann an Space (Klasse 8a, Stufenleitung) gehängt werden — Outcome landet automatisch in der richtigen Org-Akte
Sichtbarkeit binär — public/privatePrilog-Visibility-Matrix: per UserType (Lehrer, Eltern, Schüler) feingranular
Notfall-Modus fehltCrisis-Eskalation: Projekt kann in den Krisen-Modus geschaltet werden — alle Beteiligten kriegen Push, Audit aktiviert sich, Reportings verschärft
DatensouveränitätPro-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)

BereichWir nutzen weiter
ChatMatrix-Space = Projekt-Raum, Threads = Diskussion pro Task
AufgabenAufgaben-Hub-Tabellen (work_items, Phase F+G Resultat-Doku)
DMS3-Ebenen-DMS, ein Projekt hat seinen Folder im SPACE-Scope
Kalendercalendar_layers per Space, Projekt-Termine als Layer
WorkflowsProcess-Engine / Flow-Designer, Projekt-Templates können Flows enthalten
MembershipBestehende memberships-Tabelle mit Projekt-spezifischen Rollen oben drauf
PermissionsRolePermissionPolicy, Visibility-Matrix per UserType
NotificationsExistierender Notification-Stream (Sidebar-Badge, Push)
VoiceFlurfunk-Integration, Whisper-Transkription
AppsApp-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äter

Standard-Org-Hierarchie (Klassen, Stufen, Lehrerzimmer) bleibt unberührt — Projekt sammelt nur Personen daraus.

3.4 Visibility-Modi

ModusWer sieht das Projekt?Wer kann beitreten?
openAlle im TenantSelbst-Beitritt
closedMitglieder + Parent-Space-AdminsAuf Einladung
restrictedNur MitgliederNur 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:

  1. Übersicht — Status, Ziele, Activity-Stream, Health-Indikator
  2. Aufgaben — Liste/Board/Timeline/Calendar-Switch (Asana-äquivalent), Sections, Dependencies, Custom Fields
  3. Chat — Matrix-Space-Chat mit Threads (= bestehender Space-Chat, neu skinned)
  4. Doks — DMS-Folder des Projekts, Tiptap-Editor inline, später Y.js-Collab
  5. Kalender — Termine als eigener Calendar-Layer
  6. Workflows — Flow-Designer-Instanzen für dieses Projekt (Aufnahme-Forms, Approvals, Eskalation)
  7. Status — alle wöchentlichen Status-Updates chronologisch (mit Voice-Originalen)
  8. 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   ✓ erledigt

Board 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)

FeatureWo in Prilog
List-Viewneu im Projekt-Aufgaben-Tab (basiert auf work_items)
Board-Viewbestehender Aufgaben-Hub-Kanban, erweitert um Gruppen
Timeline (Gantt)neu, baut auf Tasks mit dueDate + Dependencies
Calendar-Viewbestehender Calendar-Layer pro Projekt
Subtasksbestehend (Checklisten im Aufgaben-Modul)
DependenciesNEU als Feld in work_items (predecessorIds)
Custom FieldsNEU als generisches work_item_custom_fields pro Projekt
Multi-Assigneebestehend
@mentionsbestehend (Matrix-Chat)
Commentsbestehend (Threads pro Task)
Attachmentsbestehend (DMS-Anhänge)
Goals + Key ResultsNEU: project_goals
PortfoliosNEU als Hub-Filter ("alle Projekte gehörig zu Stufenleitung 7-9")
WorkloadNEU: Aggregation über work_items.assignedTo
Formsbestehend (Flow-Designer mit Form-Element)
Rulesbestehend (Flow-Designer Verzweigungen)
TemplatesNEU: project_templates mit pre-defined tasks + flows
My Tasksbestehend (My-Tasks-Hub aus Aufgaben-Phase F+G)
ApprovalsNEU: WorkItem-Type approval mit Reviewer-Liste
Universal ReportingNEU: Reports-Tab in Hub-Welt Projekte
Searchbestehend, erweitert um Projekt-Filter
MobilePWA bestehend, Native später
Inboxbestehend
Status UpdatesNEU: project_status_updates

5.2 Prilog-Plus (das, was Asana nicht hat)

FeatureBeschreibung
Real-time-Chat als BackboneJeder Task hat einen Thread im Projekt-Space. Diskussion bleibt im Tool.
Voice-First Status-UpdatesLead nimmt 90s Sprachnachricht auf, Whisper transkribiert, Auto-Health-Score, Lead bestätigt
Auto-Status aus ActivityVorschlag-Generator aus Aufgaben-Bewegung, Chat-Aktivität, Doc-Updates
Outcome-AkteSauberer Übergang ins DMS mit Retrospektiv-Fragen
Org-AnbindungProjekt hängt an Parent-Space (Klasse, Stufe) — Outcome landet automatisch dort
Flow-Designer pro ProjektEchte verzweigte Workflows statt If-Then-Rules
Crisis-EskalationProjekt in den Notfall-Modus schalten — Push an alle, Audit-Modus, KPIs verschärft
External-FriendlyEltern/Externe ohne Asana-Lizenz, GUEST-Permissions, nur Projekt-relevante Sicht
Visibility-Matrix per UserTypeSchüler sehen "kommende Termine", Eltern sehen "Kosten + Anmeldungen", Lehrer alles
Audit-Trail aller AufgabenDSGVO-konform, wer hat wann was geändert
DMS-3-Ebenen-IntegrationDoc kann Project-scoped (im Projekt) oder Space-scoped (bleibt in Klasse 8a) sein
Per-Tenant-IsolationDaten 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-TasksEine Aufgabe kann mehrere Projekte spannen (z.B. "Hausmeister-Schlüssel-Übergabe" für Schulfest UND Klassenfahrt)
Notfall-/Bell-ModusProjekt-Push-Profile: Standard, Krise, Stumm

6. Architektur — wo passt das in den Code

6.1 Backend (prilog-backend-api)

Neue Tabellen:

sql
-- 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-Projekt

Neue 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-Generierung

Neue 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 hochladen

Tasks 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 | rejected

6.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.ts

6.3 Process-Engine / Flow-Designer

Existierender Flow-Designer kriegt Projekt-Scope als Variable:

yaml
# 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: 1

Diese 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, Tabelle projects, 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_goals mit 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_activity Event-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_templates Tabelle
  • 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_ids werden 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

RisikoGegenmaß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-KlonWir 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 SchulenHub-Welt Projekte ist optional (Tenant-Setting projects_enabled). Standard für neue Tenants: aktiviert.
Performance: viele ProjekteIndexes auf kind, status, ownerMatrixId, parentSpaceId. Hub-Welt mit Pagination ab 50 Projekten.
Cross-Space-Membership-ConfusionUI 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 FolderUI im Close-Dialog zeigt Vorschau des Ziel-Folders, Lead muss bestätigen.
Status-Update wird zur LästigkeitFrequenz 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)

  1. Projekt-Owner-Wechsel: Soll beim Wechsel die Outcome-Akte beim alten Owner bleiben oder mitwandern?
  2. Multi-Projekt-Tasks: Workflow-Risiko — eine Aufgabe in 3 Projekten, jeder Owner zieht sie woanders hin. Erlauben mit Lock-Mechanismus oder erst mal verbieten?
  3. Templates aus echten Projekten erzeugen — "speichere dieses Projekt als Vorlage". Phase 6 oder später?
  4. Projekt-Budget-TrackingbudgetCents ist im Modell, aber nutzen wir es? (Klassenfahrt: ja. Krisenfall: nein.) Optional pro Template-Typ?
  5. Stundennachweise / Time-Tracking — Asana hat das (Tracker-Integrationen). Wollen wir das? (Schulen: eher nein. Vereine/Unternehmen: vielleicht.)
  6. Externe in Projekten (echte Externe ohne Tenant-Account) — via Magic-Link / Share-Link wie bei DMS? Phase 8 oder eigene Folge-Iteration?
  7. Roadmap-Welt-Übersicht — eine Schul-Übersicht aller Projekte auf einer Zeitachse für die Schulleitung. Sinnvoll oder Overkill?
  8. 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

  1. Projekt = Space mit kind='project' und extra Feldern; kein Domain-Doppel.
  2. Volle Asana-Parität (List, Board, Timeline, Calendar, Goals, Portfolios, Workload, Templates, Forms, Rules, Approvals).
  3. Drei Prilog-Killer-Features: Chat-Backbone, Auto-Status mit Voice, Outcome-Akte ins DMS.
  4. Cross-Space-Mitgliedschaft, GUEST-Permissions, Visibility-Matrix per UserType — Eltern + Externe ohne Extra-Lizenz.
  5. 13 Wochen Full-Spec, 5 Wochen Demo-tauglich, Hub-Welt ist optional pro Tenant.