Files
breakpilot-lehrer/website/components/admin/system-info-configs/index_original.ts
Benjamin Boenisch 5a31f52310 Initial commit: breakpilot-lehrer - Lehrer KI Platform
Services: Admin-Lehrer, Backend-Lehrer, Studio v2, Website,
Klausur-Service, School-Service, Voice-Service, Geo-Service,
BreakPilot Drive, Agent-Core

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 23:47:26 +01:00

4900 lines
235 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* SystemInfoSection Configurations
*
* Pre-defined configurations for each admin module.
* Extracted from SystemInfoSection.tsx for better maintainability.
*/
import type { SystemInfoConfig } from './types'
export const SYSTEM_INFO_CONFIGS: Record<string, SystemInfoConfig> = {
// Dashboard
dashboard: {
title: 'Dashboard System-Info',
description: 'Zentrale Uebersicht aller BreakPilot-Module und deren Status.',
version: '2.0',
architecture: {
layers: [
{ title: 'Frontend (Next.js 15)', components: ['Dashboard UI', 'Chart.js', 'Realtime Updates'], color: '#3b82f6' },
{ title: 'API Gateway', components: ['Next.js API Routes', 'Auth Middleware', 'Rate Limiting'], color: '#8b5cf6' },
{ title: 'Microservices', components: ['Consent Service', 'Klausur Service', 'School Service'], color: '#10b981' },
{ title: 'Datenbanken', components: ['PostgreSQL', 'Qdrant', 'Valkey (Redis)'], color: '#f59e0b' },
],
},
features: [
{ name: 'Service Health Monitoring', status: 'active', description: 'Echtzeit-Status aller Microservices' },
{ name: 'Metriken-Aggregation', status: 'active', description: 'Zusammenfassung wichtiger KPIs' },
{ name: 'Alerting System', status: 'planned', description: 'Benachrichtigungen bei Problemen' },
{ name: 'Custom Dashboards', status: 'planned', description: 'Benutzerdefinierte Dashboard-Layouts' },
],
roadmap: [
{ phase: 'Phase 1: Monitoring (Q1)', priority: 'high', items: ['Prometheus Integration', 'Grafana Dashboards', 'Service Health Checks', 'Error Rate Tracking'] },
{ phase: 'Phase 2: Alerting (Q2)', priority: 'medium', items: ['Slack/Teams Integration', 'E-Mail Alerts', 'Eskalations-Regeln', 'On-Call Rotation'] },
{ phase: 'Phase 3: Analytics (Q3)', priority: 'low', items: ['Usage Analytics', 'Cost Tracking', 'Trend-Analysen', 'Kapazitaetsplanung'] },
],
technicalDetails: [
{ component: 'Frontend', technology: 'Next.js', version: '15.x', description: 'React Server Components' },
{ component: 'Styling', technology: 'Tailwind CSS', version: '3.x', description: 'Utility-first CSS' },
{ component: 'State', technology: 'React Hooks', version: '19.x', description: 'Lokaler State' },
{ component: 'Charts', technology: 'Chart.js', version: '4.x', description: 'Datenvisualisierung' },
],
},
// GPU Infrastruktur
gpu: {
title: 'GPU Infrastruktur System-Info',
description: 'vast.ai GPU-Management fuer KI-Workloads und Training.',
version: '1.5',
privacyNotes: [
'GPU-Workloads werden isoliert in Docker-Containern ausgefuehrt',
'Keine persistente Speicherung von Trainingsdaten auf GPU-Instanzen',
'SSH-Keys werden regelmaessig rotiert',
'Audit-Log fuer alle GPU-Operationen',
],
architecture: {
layers: [
{ title: 'Admin UI', components: ['GPU Dashboard', 'Instance Manager', 'Cost Calculator'], color: '#3b82f6' },
{ title: 'vast.ai API', components: ['Instance API', 'Billing API', 'SSH Management'], color: '#8b5cf6' },
{ title: 'GPU Instances', components: ['RTX 4090', 'A100', 'H100'], color: '#10b981' },
{ title: 'Workloads', components: ['Model Training', 'Inference', 'Fine-Tuning'], color: '#f59e0b' },
],
},
features: [
{ name: 'Instance Management', status: 'active', description: 'Start/Stop/Destroy von GPU-Instanzen' },
{ name: 'SSH Key Management', status: 'active', description: 'Automatische SSH-Key Rotation' },
{ name: 'Cost Tracking', status: 'active', description: 'Echtzeit-Kostenüberwachung' },
{ name: 'Auto-Scaling', status: 'planned', description: 'Automatische Skalierung bei Last' },
{ name: 'Spot Instance Management', status: 'planned', description: 'Kostenoptimierung durch Spot-Instances' },
],
roadmap: [
{ phase: 'Phase 1: Automation (Q1)', priority: 'high', items: ['Auto-Start bei Bedarf', 'Auto-Stop bei Inaktivitaet', 'Scheduled Instances', 'Budget Alerts'] },
{ phase: 'Phase 2: Multi-Cloud (Q2)', priority: 'medium', items: ['Lambda Labs Integration', 'RunPod Integration', 'Cloud-uebergreifende Orchestrierung', 'Preisvergleich'] },
{ phase: 'Phase 3: ML Ops (Q3)', priority: 'medium', items: ['Model Registry', 'Experiment Tracking', 'A/B Testing', 'Model Versioning'] },
],
technicalDetails: [
{ component: 'API', technology: 'vast.ai REST API', version: 'v1', description: 'GPU-Marktplatz' },
{ component: 'SSH', technology: 'OpenSSH', version: '9.x', description: 'Sichere Verbindung' },
{ component: 'Container', technology: 'Docker', version: '24.x', description: 'Workload-Isolation' },
{ component: 'ML Framework', technology: 'PyTorch', version: '2.x', description: 'Model Training' },
],
auditInfo: [
{
category: 'Sicherheit & Zugriffskontrolle',
items: [
{ label: 'Authentifizierung', value: 'API-Key + SSH-Key', status: 'ok' },
{ label: 'Verschluesselung', value: 'TLS 1.3', status: 'ok' },
{ label: 'Key Rotation', value: 'Alle 30 Tage', status: 'ok' },
{ label: 'Audit-Log', value: 'Aktiviert', status: 'ok' },
],
},
{
category: 'Kosten & Ressourcen',
items: [
{ label: 'Budget-Limit', value: 'Konfigurierbar', status: 'ok' },
{ label: 'Auto-Shutdown', value: '30 Min Inaktivitaet', status: 'ok' },
{ label: 'Spot-Instances', value: 'Geplant', status: 'warning' },
{ label: 'Multi-Cloud', value: 'Geplant', status: 'warning' },
],
},
{
category: 'Compliance',
items: [
{ label: 'Daten-Residenz', value: 'EU/US waehlbar', status: 'ok' },
{ label: 'DSGVO-Konformitaet', value: 'Ja', status: 'ok' },
{ label: 'SOC 2 Type II', value: 'vast.ai zertifiziert', status: 'ok' },
],
},
],
fullDocumentation: `
<h2>GPU Infrastructure Management</h2>
<h3>1. Uebersicht</h3>
<p>Das GPU-Infrastruktur-Modul ermoeglicht die Verwaltung von Cloud-GPU-Ressourcen ueber vast.ai fuer KI-Workloads wie Model Training, Fine-Tuning und Inference.</p>
<h3>2. Architektur</h3>
<pre>
┌─────────────────────────────────────────────────────────────┐
│ Admin Dashboard │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │
│ │ Start/Stop │ │ Status │ │ Cost Tracking │ │
│ └──────┬──────┘ └──────┬──────┘ └──────────┬──────────┘ │
└─────────┼───────────────┼─────────────────────┼─────────────┘
│ │ │
v v v
┌─────────────────────────────────────────────────────────────┐
│ Backend API │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ /infra/vast/* - vast.ai Proxy mit Auth │ │
│ └─────────────────────────────────────────────────────┘ │
└──────────────────────────┬──────────────────────────────────┘
v
┌─────────────────────────────────────────────────────────────┐
│ vast.ai Cloud │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ RTX 4090 │ │ A100 │ │ H100 │ │ RTX 3090 │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────┘
</pre>
<h3>3. API Endpoints</h3>
<table>
<tr><th>Endpoint</th><th>Methode</th><th>Beschreibung</th></tr>
<tr><td>/infra/vast/status</td><td>GET</td><td>Aktueller Status der GPU-Instanz</td></tr>
<tr><td>/infra/vast/power/on</td><td>POST</td><td>GPU-Instanz starten</td></tr>
<tr><td>/infra/vast/power/off</td><td>POST</td><td>GPU-Instanz stoppen</td></tr>
<tr><td>/infra/vast/audit</td><td>GET</td><td>Audit-Log der letzten Aktionen</td></tr>
</table>
<h3>4. Sicherheitskonzept</h3>
<ul>
<li><strong>Authentifizierung:</strong> API-Key basiert, keine Benutzer-Credentials auf GPU</li>
<li><strong>SSH-Zugriff:</strong> Key-basiert, automatische Rotation alle 30 Tage</li>
<li><strong>Netzwerk:</strong> Isolierte VPC, nur definierte Ports offen</li>
<li><strong>Datenpersistenz:</strong> Ephemeral Storage, keine persistenten Volumes</li>
</ul>
<h3>5. Kostenmanagement</h3>
<table>
<tr><th>GPU</th><th>Preis/Stunde</th><th>VRAM</th><th>Use Case</th></tr>
<tr><td>RTX 4090</td><td>~$0.40</td><td>24 GB</td><td>Training, Inference</td></tr>
<tr><td>A100</td><td>~$1.50</td><td>80 GB</td><td>Large Model Training</td></tr>
<tr><td>H100</td><td>~$3.00</td><td>80 GB</td><td>Enterprise Training</td></tr>
</table>
<h3>6. Auto-Shutdown Policy</h3>
<p>GPU-Instanzen werden automatisch nach 30 Minuten Inaktivitaet gestoppt, um Kosten zu sparen. Bei jedem LLM-Request wird die Aktivitaet aufgezeichnet.</p>
<h3>7. Audit-relevante Informationen</h3>
<ul>
<li>Alle Start/Stop-Aktionen werden mit Timestamp und User-ID geloggt</li>
<li>Kostenabrechnung erfolgt minutengenau</li>
<li>SSH-Key Rotation wird dokumentiert</li>
<li>Fehlgeschlagene Operationen werden mit Error-Details gespeichert</li>
</ul>
<h3>8. Notfallprozeduren</h3>
<ol>
<li><strong>Bei Kostenüberschreitung:</strong> Automatischer Stop aller Instanzen</li>
<li><strong>Bei API-Ausfall:</strong> Fallback auf manuelles vast.ai Dashboard</li>
<li><strong>Bei Sicherheitsvorfall:</strong> Sofortiges Destroy aller Instanzen</li>
</ol>
`,
},
// Consent Verwaltung
consent: {
title: 'Consent Management System-Info',
description: 'DSGVO-konforme Verwaltung von Einwilligungen und rechtlichen Dokumenten.',
version: '3.0',
privacyNotes: [
'Alle Consent-Daten werden verschluesselt gespeichert',
'Audit-Trail fuer alle Aenderungen',
'Automatische Datenlöschung nach Widerruf',
'DSGVO Art. 7 konforme Einwilligungsverwaltung',
],
architecture: {
layers: [
{ title: 'Frontend', components: ['Consent Banner', 'Praeferenz-Center', 'Admin UI'], color: '#3b82f6' },
{ title: 'Consent Service (Go)', components: ['Consent API', 'Version Control', 'Audit Logger'], color: '#00ADD8' },
{ title: 'Backend (Python)', components: ['GDPR Export', 'Analytics', 'Reporting'], color: '#3776AB' },
{ title: 'PostgreSQL', components: ['Consents', 'Documents', 'Audit Logs'], color: '#336791' },
],
},
features: [
{ name: 'Dokumenten-Versionierung', status: 'active', description: 'Vollstaendige Historie aller Versionen' },
{ name: 'Multi-Mandanten', status: 'active', description: 'Tenant-isolierte Consent-Verwaltung' },
{ name: 'Approval Workflow', status: 'active', description: 'DSB-Freigabe fuer neue Versionen' },
{ name: 'A/B Testing', status: 'planned', description: 'Consent-Rate Optimierung' },
{ name: 'Analytics Dashboard', status: 'planned', description: 'Consent-Metriken und Trends' },
],
roadmap: [
{ phase: 'Phase 1: Compliance (Q1)', priority: 'high', items: ['TCF 2.2 Integration', 'IAB GPP Support', 'Cookie Scanning', 'Compliance Reports'] },
{ phase: 'Phase 2: UX (Q2)', priority: 'medium', items: ['Banner A/B Testing', 'Conversion Tracking', 'Dark Pattern Detection', 'Accessibility (WCAG)'] },
{ phase: 'Phase 3: Integration (Q3)', priority: 'low', items: ['Google Consent Mode v2', 'Meta CAPI Integration', 'CRM Sync', 'Marketing Automation'] },
],
technicalDetails: [
{ component: 'Backend', technology: 'Go + Gin', version: '1.21+', description: 'High-Performance API' },
{ component: 'Database', technology: 'PostgreSQL', version: '16', description: 'ACID-konform' },
{ component: 'Cache', technology: 'Valkey', version: '8.x', description: 'Redis-kompatibel' },
{ component: 'Encryption', technology: 'AES-256', description: 'At-rest Verschluesselung' },
],
auditInfo: [
{
category: 'DSGVO-Compliance',
items: [
{ label: 'Art. 7 Einwilligung', value: 'Implementiert', status: 'ok' },
{ label: 'Art. 13/14 Informationspflichten', value: 'Implementiert', status: 'ok' },
{ label: 'Art. 17 Recht auf Loeschung', value: 'Implementiert', status: 'ok' },
{ label: 'Art. 20 Datenportabilitaet', value: 'Implementiert', status: 'ok' },
],
},
{
category: 'Technische Sicherheit',
items: [
{ label: 'Verschluesselung', value: 'AES-256 at rest', status: 'ok' },
{ label: 'TLS', value: '1.3', status: 'ok' },
{ label: 'Audit-Log', value: 'Lueckenlos', status: 'ok' },
{ label: 'Backup', value: 'Taeglich, 30 Tage', status: 'ok' },
],
},
{
category: 'Dokumenten-Status',
items: [
{ label: 'AGB', value: 'v2.1 - Aktiv', status: 'ok' },
{ label: 'Datenschutz', value: 'v3.0 - Aktiv', status: 'ok' },
{ label: 'Cookie-Policy', value: 'v1.5 - Aktiv', status: 'ok' },
{ label: 'Impressum', value: 'v1.0 - Aktiv', status: 'ok' },
],
},
],
fullDocumentation: `
<h2>Consent Management System</h2>
<h3>1. Uebersicht</h3>
<p>Das Consent Management System (CMS) verwaltet alle rechtlichen Einwilligungen fuer die BreakPilot-Plattform gemaess DSGVO Art. 6 und Art. 7.</p>
<h3>2. Dokumenttypen</h3>
<table>
<tr><th>Typ</th><th>Beschreibung</th><th>Pflicht</th></tr>
<tr><td>terms</td><td>Allgemeine Geschaeftsbedingungen</td><td>Ja</td></tr>
<tr><td>privacy</td><td>Datenschutzerklaerung</td><td>Ja</td></tr>
<tr><td>cookies</td><td>Cookie-Richtlinie</td><td>Ja</td></tr>
<tr><td>community</td><td>Community Guidelines</td><td>Nein</td></tr>
<tr><td>imprint</td><td>Impressum</td><td>Nein</td></tr>
</table>
<h3>3. Versions-Workflow</h3>
<pre>
┌──────────┐ ┌──────────┐ ┌───────────┐ ┌───────────┐
│ draft │ -> │ review │ -> │ approved │ -> │ published │
└──────────┘ └────┬─────┘ └───────────┘ └───────────┘
v
┌──────────┐
│ rejected │ -> zurueck zu draft
└──────────┘
</pre>
<h3>4. API Endpoints</h3>
<table>
<tr><th>Endpoint</th><th>Methode</th><th>Beschreibung</th></tr>
<tr><td>/api/consent/documents</td><td>GET</td><td>Alle Dokumente listen</td></tr>
<tr><td>/api/consent/documents/{type}/latest</td><td>GET</td><td>Aktuelle Version</td></tr>
<tr><td>/api/consent/check/{type}</td><td>GET</td><td>Consent-Status pruefen</td></tr>
<tr><td>/api/consent/grant</td><td>POST</td><td>Consent erteilen</td></tr>
<tr><td>/api/consent/revoke</td><td>POST</td><td>Consent widerrufen</td></tr>
</table>
<h3>5. Cookie-Kategorien</h3>
<table>
<tr><th>Kategorie</th><th>Beschreibung</th><th>Default</th></tr>
<tr><td>essential</td><td>Technisch notwendig</td><td>Immer aktiv</td></tr>
<tr><td>functional</td><td>Erweiterte Funktionen</td><td>Opt-in</td></tr>
<tr><td>analytics</td><td>Nutzungsanalyse</td><td>Opt-in</td></tr>
<tr><td>marketing</td><td>Werbung & Tracking</td><td>Opt-in</td></tr>
</table>
<h3>6. Audit-Trail</h3>
<p>Alle Consent-Aenderungen werden mit folgenden Daten protokolliert:</p>
<ul>
<li>Timestamp (ISO 8601)</li>
<li>User-ID (pseudonymisiert)</li>
<li>Aktion (grant/revoke/update)</li>
<li>Dokumenttyp und Version</li>
<li>IP-Adresse (anonymisiert nach 30 Tagen)</li>
<li>User-Agent</li>
</ul>
<h3>7. DSGVO-Rechte</h3>
<table>
<tr><th>Artikel</th><th>Recht</th><th>Status</th></tr>
<tr><td>Art. 7</td><td>Widerruf der Einwilligung</td><td>✓ Implementiert</td></tr>
<tr><td>Art. 15</td><td>Auskunftsrecht</td><td>✓ Implementiert</td></tr>
<tr><td>Art. 16</td><td>Recht auf Berichtigung</td><td>✓ Implementiert</td></tr>
<tr><td>Art. 17</td><td>Recht auf Loeschung</td><td>✓ Implementiert</td></tr>
<tr><td>Art. 20</td><td>Datenportabilitaet</td><td>✓ Implementiert</td></tr>
</table>
<h3>8. Compliance-Pruefungen</h3>
<ol>
<li>Woechentlich: Automatischer Consent-Rate Report</li>
<li>Monatlich: Dokumenten-Review durch DSB</li>
<li>Quartalsweise: Compliance-Audit</li>
<li>Jaehrlich: Externer Datenschutz-Audit</li>
</ol>
<h3>9. Notfallprozeduren</h3>
<ul>
<li><strong>Bei Datenpanne:</strong> Sofortige Benachrichtigung DSB, ggf. Aufsichtsbehoerde (72h)</li>
<li><strong>Bei Systemausfall:</strong> Fallback auf statische Consent-Seite</li>
<li><strong>Bei rechtlicher Aenderung:</strong> Dokumenten-Update mit Re-Consent Kampagne</li>
</ul>
`,
},
// DSR (Datenschutzanfragen)
dsr: {
title: 'DSR Management System-Info',
description: 'Bearbeitung von DSGVO-Betroffenenrechten (Art. 15-22).',
version: '2.0',
privacyNotes: [
'Automatische Fristenueberwachung (30 Tage)',
'Identitaetsverifizierung vor Datenauskunft',
'Verschluesselte Datenexporte',
'Protokollierung aller Bearbeitungsschritte',
],
architecture: {
layers: [
{ title: 'Request Portal', components: ['Antragsformular', 'Status-Tracking', 'Upload'], color: '#3b82f6' },
{ title: 'Processing Engine', components: ['Workflow Engine', 'Data Collector', 'Export Generator'], color: '#8b5cf6' },
{ title: 'Data Sources', components: ['PostgreSQL', 'MinIO', 'External APIs'], color: '#10b981' },
{ title: 'Notification', components: ['E-Mail', 'Audit Log', 'Reports'], color: '#f59e0b' },
],
},
features: [
{ name: 'Art. 15 Auskunft', status: 'active', description: 'Automatisierter Datenexport' },
{ name: 'Art. 17 Löschung', status: 'active', description: 'Kaskadierte Datenlöschung' },
{ name: 'Art. 20 Portabilitaet', status: 'active', description: 'JSON/CSV Export' },
{ name: 'Art. 16 Berichtigung', status: 'active', description: 'Datenkorrektur-Workflow' },
{ name: 'KI-Assistenz', status: 'planned', description: 'Automatische Kategorisierung' },
],
roadmap: [
{ phase: 'Phase 1: Automation (Q1)', priority: 'high', items: ['Automatische Datensammlung', 'Template-basierte Antworten', 'Fristen-Alerts', 'Batch-Verarbeitung'] },
{ phase: 'Phase 2: Self-Service (Q2)', priority: 'medium', items: ['Nutzer-Portal', 'Echtzeit-Status', 'Sofort-Download', 'Identitaets-Verifizierung'] },
{ phase: 'Phase 3: Analytics (Q3)', priority: 'low', items: ['DSR-Metriken', 'Trend-Analyse', 'Compliance-Scoring', 'Benchmarking'] },
],
technicalDetails: [
{ component: 'Workflow', technology: 'State Machine', description: 'Definierte Bearbeitungsstatus' },
{ component: 'Export', technology: 'JSON/CSV/PDF', description: 'Maschinenlesbare Formate' },
{ component: 'Encryption', technology: 'AES-256-GCM', description: 'Export-Verschluesselung' },
{ component: 'Verification', technology: 'TOTP/E-Mail', description: 'Zwei-Faktor' },
],
auditInfo: [
{
category: 'DSGVO-Rechte Implementation',
items: [
{ label: 'Art. 15 Auskunft', value: 'Automatisiert', status: 'ok' },
{ label: 'Art. 16 Berichtigung', value: 'Workflow', status: 'ok' },
{ label: 'Art. 17 Loeschung', value: 'Kaskadiert', status: 'ok' },
{ label: 'Art. 20 Portabilitaet', value: 'JSON/CSV', status: 'ok' },
{ label: 'Art. 21 Widerspruch', value: 'Implementiert', status: 'ok' },
],
},
{
category: 'Fristen & SLAs',
items: [
{ label: 'Bearbeitungsfrist', value: '30 Tage', status: 'ok' },
{ label: 'Fristverlängerung', value: '+60 Tage moeglich', status: 'ok' },
{ label: 'Automatische Erinnerung', value: '7 Tage vor Ablauf', status: 'ok' },
{ label: 'Eskalation', value: 'Nach 25 Tagen', status: 'ok' },
],
},
{
category: 'Sicherheit',
items: [
{ label: 'Identitaetspruefung', value: 'Zweistufig', status: 'ok' },
{ label: 'Export-Verschluesselung', value: 'AES-256-GCM', status: 'ok' },
{ label: 'Zugriffskontrolle', value: 'RBAC', status: 'ok' },
{ label: 'Audit-Log', value: 'Lueckenlos', status: 'ok' },
],
},
],
fullDocumentation: `
<h2>Datenschutzanfragen (DSR) Management</h2>
<h3>1. Uebersicht</h3>
<p>Das DSR-Modul verarbeitet alle Betroffenenrechte-Anfragen gemaess DSGVO Art. 15-22. Es automatisiert den Prozess von der Anfrage bis zur Erfuellung und stellt die Einhaltung der gesetzlichen Fristen sicher.</p>
<h3>2. Unterstuetzte Anfragetypen</h3>
<table>
<tr><th>Artikel</th><th>Recht</th><th>Automatisierung</th><th>SLA</th></tr>
<tr><td>Art. 15</td><td>Auskunft</td><td>Vollautomatisch</td><td>30 Tage</td></tr>
<tr><td>Art. 16</td><td>Berichtigung</td><td>Workflow</td><td>30 Tage</td></tr>
<tr><td>Art. 17</td><td>Loeschung</td><td>Kaskadiert</td><td>30 Tage</td></tr>
<tr><td>Art. 18</td><td>Einschraenkung</td><td>Workflow</td><td>30 Tage</td></tr>
<tr><td>Art. 20</td><td>Portabilitaet</td><td>Vollautomatisch</td><td>30 Tage</td></tr>
<tr><td>Art. 21</td><td>Widerspruch</td><td>Workflow</td><td>30 Tage</td></tr>
</table>
<h3>3. Workflow-Architektur</h3>
<pre>
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Anfrage │ --> │ Verifizierung│ --> │ Bearbeitung │ --> │ Erfuellung │
│ eingang │ │ Identitaet │ │ (Auto/Man)│ │ & Export │
└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘
│ │ │ │
v v v v
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Ticket │ │ E-Mail │ │ Datensammlung│ │ Audit │
│ erstellt │ │ OTP Code │ │ aus Systemen │ │ Log │
└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘
</pre>
<h3>4. API Endpoints</h3>
<table>
<tr><th>Endpoint</th><th>Methode</th><th>Beschreibung</th></tr>
<tr><td>/api/dsr/requests</td><td>GET</td><td>Alle Anfragen listen</td></tr>
<tr><td>/api/dsr/requests</td><td>POST</td><td>Neue Anfrage erstellen</td></tr>
<tr><td>/api/dsr/requests/{id}</td><td>GET</td><td>Anfrage-Details</td></tr>
<tr><td>/api/dsr/requests/{id}/verify</td><td>POST</td><td>Identitaet verifizieren</td></tr>
<tr><td>/api/dsr/requests/{id}/process</td><td>POST</td><td>Bearbeitung starten</td></tr>
<tr><td>/api/dsr/requests/{id}/export</td><td>GET</td><td>Datenexport herunterladen</td></tr>
</table>
<h3>5. Datensammlung</h3>
<p>Bei einer Auskunftsanfrage werden Daten aus folgenden Quellen gesammelt:</p>
<ul>
<li><strong>PostgreSQL:</strong> Stammdaten, Consents, Aktivitaetslog</li>
<li><strong>MinIO:</strong> Hochgeladene Dokumente, Profilbilder</li>
<li><strong>Qdrant:</strong> Embeddings-Metadaten (ohne Vektoren)</li>
<li><strong>Audit-Log:</strong> Alle Systemaktivitaeten</li>
</ul>
<h3>6. Export-Formate</h3>
<table>
<tr><th>Format</th><th>Inhalt</th><th>Use Case</th></tr>
<tr><td>JSON</td><td>Strukturierte Daten</td><td>Maschinenlesbar, Portabilitaet</td></tr>
<tr><td>CSV</td><td>Tabellarische Daten</td><td>Excel-kompatibel</td></tr>
<tr><td>PDF</td><td>Formatierter Report</td><td>Menschenlesbar</td></tr>
<tr><td>ZIP</td><td>Alle Formate + Dateien</td><td>Vollstaendiger Export</td></tr>
</table>
<h3>7. Identitaetsverifizierung</h3>
<p>Zweistufige Verifizierung zum Schutz vor unbefugten Anfragen:</p>
<ol>
<li><strong>Stufe 1:</strong> E-Mail-Verifizierung mit OTP-Code (6-stellig, 15 Min gueltig)</li>
<li><strong>Stufe 2:</strong> Bei sensiblen Daten: Ausweiskopie oder Video-Ident</li>
</ol>
<h3>8. Loeschprozess (Art. 17)</h3>
<pre>
Loeschanfrage
v
┌────────────────────────────────────────────────────────────┐
│ Pruefung Ausnahmen │
│ - Rechtliche Aufbewahrungspflichten? │
│ - Laufende Vertraege? │
│ - Berechtigtes Interesse? │
└────────────────────────────────────────────────────────────┘
├── Ausnahme greift --> Teilloeschung + Begruendung
v
┌────────────────────────────────────────────────────────────┐
│ Kaskadierte Loeschung │
│ 1. Anwendungsdaten (PostgreSQL) │
│ 2. Dateien (MinIO) │
│ 3. Embeddings (Qdrant) │
│ 4. Backups (nach Retention-Policy) │
└────────────────────────────────────────────────────────────┘
</pre>
<h3>9. Audit-Trail</h3>
<p>Jede DSR-Anfrage wird vollstaendig protokolliert:</p>
<ul>
<li>Eingang der Anfrage mit Timestamp</li>
<li>Verifizierungsschritte</li>
<li>Bearbeitende Person(en)</li>
<li>Gesammelte Datenquellen</li>
<li>Erfuellung oder Ablehnung mit Begruendung</li>
<li>Export-Download mit Hash</li>
</ul>
<h3>10. Metriken & KPIs</h3>
<table>
<tr><th>Metrik</th><th>Ziel</th><th>Aktuell</th></tr>
<tr><td>Durchschnittliche Bearbeitungszeit</td><td>&lt; 14 Tage</td><td>Tracking aktiv</td></tr>
<tr><td>Fristenueberschreitung</td><td>0%</td><td>Alerting aktiv</td></tr>
<tr><td>Automatisierungsgrad</td><td>&gt; 80%</td><td>Art. 15/20</td></tr>
<tr><td>Identitaetspruefung-Erfolgsrate</td><td>&gt; 95%</td><td>Tracking aktiv</td></tr>
</table>
`,
},
// LLM Vergleich
llmCompare: {
title: 'LLM Vergleich System-Info',
description: 'Vergleich und Benchmarking verschiedener KI-Provider und Modelle.',
version: '1.0',
architecture: {
layers: [
{ title: 'Vergleichs-UI', components: ['Provider-Auswahl', 'Prompt-Editor', 'Ergebnis-Vergleich'], color: '#3b82f6' },
{ title: 'Provider Adapters', components: ['OpenAI', 'Anthropic', 'Google', 'Local'], color: '#8b5cf6' },
{ title: 'Evaluation Engine', components: ['Latenz-Messung', 'Qualitaets-Scoring', 'Cost Calculator'], color: '#10b981' },
{ title: 'Logging', components: ['Request Logs', 'Token Tracking', 'Error Logs'], color: '#f59e0b' },
],
},
features: [
{ name: 'Multi-Provider Vergleich', status: 'active', description: 'Parallele Anfragen an mehrere LLMs' },
{ name: 'Latenz-Tracking', status: 'active', description: 'Echtzeit-Performance-Messung' },
{ name: 'Kosten-Kalkulation', status: 'active', description: 'Token-basierte Kostenberechnung' },
{ name: 'Qualitaets-Bewertung', status: 'planned', description: 'Automatisches Scoring der Antworten' },
{ name: 'A/B Testing', status: 'planned', description: 'Statistische Signifikanz-Tests' },
],
roadmap: [
{ phase: 'Phase 1: Provider (Q1)', priority: 'high', items: ['Mistral Integration', 'Llama 3 Integration', 'Gemini Pro Integration', 'Rate Limiting'] },
{ phase: 'Phase 2: Evaluation (Q2)', priority: 'high', items: ['Automatisches Scoring', 'Benchmark-Suite', 'Domain-spezifische Tests', 'Halluzinations-Erkennung'] },
{ phase: 'Phase 3: Optimierung (Q3)', priority: 'medium', items: ['Prompt-Optimierung', 'Modell-Routing', 'Fallback-Strategien', 'Caching'] },
],
technicalDetails: [
{ component: 'OpenAI', technology: 'GPT-4o / o1', description: 'Haupt-Provider' },
{ component: 'Anthropic', technology: 'Claude 3.5', description: 'Alternative' },
{ component: 'Google', technology: 'Gemini 2.0', description: 'Multimodal' },
{ component: 'Local', technology: 'Ollama', description: 'Self-hosted' },
],
auditInfo: [
{
category: 'Provider-Status',
items: [
{ label: 'OpenAI', value: 'Aktiv', status: 'ok' },
{ label: 'Anthropic', value: 'Aktiv', status: 'ok' },
{ label: 'Google Gemini', value: 'Aktiv', status: 'ok' },
{ label: 'Ollama (Local)', value: 'Verfuegbar', status: 'ok' },
],
},
{
category: 'Kosten & Limits',
items: [
{ label: 'Monatliches Budget', value: 'Konfigurierbar', status: 'ok' },
{ label: 'Rate Limiting', value: 'Pro Provider', status: 'ok' },
{ label: 'Token Tracking', value: 'Aktiviert', status: 'ok' },
{ label: 'Cost Alerts', value: 'E-Mail', status: 'ok' },
],
},
{
category: 'Datenschutz',
items: [
{ label: 'Prompt-Logging', value: 'Optional', status: 'ok' },
{ label: 'PII Detection', value: 'Geplant', status: 'warning' },
{ label: 'Data Residency', value: 'EU verfuegbar', status: 'ok' },
{ label: 'Audit-Log', value: 'Aktiviert', status: 'ok' },
],
},
],
fullDocumentation: `
<h2>LLM Provider Vergleich & Benchmarking</h2>
<h3>1. Uebersicht</h3>
<p>Das LLM-Vergleichsmodul ermoeglicht den direkten Vergleich verschiedener KI-Provider hinsichtlich Qualitaet, Latenz und Kosten. Es dient der Auswahl des optimalen Modells fuer spezifische Use Cases.</p>
<h3>2. Unterstuetzte Provider</h3>
<table>
<tr><th>Provider</th><th>Modelle</th><th>Staerken</th><th>Preisbereich</th></tr>
<tr><td>OpenAI</td><td>GPT-4o, GPT-4o-mini, o1</td><td>Allrounder, Coding</td><td>$0.15-15/1M Token</td></tr>
<tr><td>Anthropic</td><td>Claude 3.5 Sonnet/Haiku</td><td>Lange Kontexte, Safety</td><td>$0.25-15/1M Token</td></tr>
<tr><td>Google</td><td>Gemini 2.0 Flash/Pro</td><td>Multimodal, Speed</td><td>$0.075-5/1M Token</td></tr>
<tr><td>Ollama</td><td>Llama 3, Mistral, Phi</td><td>Lokal, Datenschutz</td><td>Nur Hardware-Kosten</td></tr>
</table>
<h3>3. Vergleichs-Architektur</h3>
<pre>
┌────────────────────────────────────────────────────────────────┐
│ Frontend UI │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────────────┐ │
│ │ Prompt Input │ │ Provider Sel │ │ Results Comparison │ │
│ └──────────────┘ └──────────────┘ └──────────────────────┘ │
└────────────────────────────────────────────────────────────────┘
v
┌────────────────────────────────────────────────────────────────┐
│ Backend Orchestrator │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ Parallel Request Handler | Response Aggregator │ │
│ └──────────────────────────────────────────────────────────┘ │
└────────────────────────────────────────────────────────────────┘
│ │ │ │
v v v v
┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐
│ OpenAI │ │Anthropic│ │ Google │ │ Ollama │
└─────────┘ └─────────┘ └─────────┘ └─────────┘
</pre>
<h3>4. Metriken</h3>
<table>
<tr><th>Metrik</th><th>Beschreibung</th><th>Messung</th></tr>
<tr><td>TTFB</td><td>Time to First Byte</td><td>Millisekunden</td></tr>
<tr><td>Total Latency</td><td>Gesamtantwortzeit</td><td>Millisekunden</td></tr>
<tr><td>Tokens/Sekunde</td><td>Generierungsgeschwindigkeit</td><td>Output Tokens/s</td></tr>
<tr><td>Kosten</td><td>Gesamtkosten</td><td>USD</td></tr>
<tr><td>Qualitaet</td><td>Manuelle/Auto Bewertung</td><td>1-5 Sterne</td></tr>
</table>
<h3>5. API Endpoints</h3>
<table>
<tr><th>Endpoint</th><th>Methode</th><th>Beschreibung</th></tr>
<tr><td>/api/llm/compare</td><td>POST</td><td>Parallelen Vergleich starten</td></tr>
<tr><td>/api/llm/providers</td><td>GET</td><td>Verfuegbare Provider listen</td></tr>
<tr><td>/api/llm/stats</td><td>GET</td><td>Nutzungsstatistiken</td></tr>
<tr><td>/api/llm/benchmark</td><td>POST</td><td>Benchmark-Suite ausfuehren</td></tr>
</table>
<h3>6. Benchmark-Suite</h3>
<p>Vordefinierte Tests fuer verschiedene Use Cases:</p>
<ul>
<li><strong>Summarization:</strong> Textzusammenfassung verschiedener Laengen</li>
<li><strong>QA:</strong> Frage-Antwort auf Dokumenten</li>
<li><strong>Coding:</strong> Code-Generierung und -Erklaerung</li>
<li><strong>Classification:</strong> Textkategorisierung</li>
<li><strong>Translation:</strong> Mehrsprachige Uebersetzung</li>
</ul>
<h3>7. Kostenmanagement</h3>
<pre>
Budgetkontrolle
├── Monatliches Limit pro Provider
├── Echtzeit-Kostentracking
├── Alerts bei 80%/90%/100%
└── Auto-Fallback bei Limit
</pre>
<h3>8. Datenschutz-Konfiguration</h3>
<table>
<tr><th>Einstellung</th><th>Optionen</th><th>Default</th></tr>
<tr><td>Prompt-Logging</td><td>Ein/Aus/Anonymisiert</td><td>Anonymisiert</td></tr>
<tr><td>Response-Speicherung</td><td>Ein/Aus/24h</td><td>24h</td></tr>
<tr><td>Metriken-Retention</td><td>30/90/365 Tage</td><td>90 Tage</td></tr>
<tr><td>PII-Filter</td><td>Ein/Aus</td><td>Ein (geplant)</td></tr>
</table>
<h3>9. Fehlerbehandlung</h3>
<ul>
<li><strong>Timeout:</strong> 30 Sekunden default, konfigurierbar</li>
<li><strong>Rate Limit:</strong> Automatisches Retry mit Backoff</li>
<li><strong>Provider Down:</strong> Skip und Warnung</li>
<li><strong>API Error:</strong> Fehlerdetails in Response</li>
</ul>
<h3>10. Best Practices</h3>
<ol>
<li>Immer mindestens 3 Provider fuer aussagekraeftigen Vergleich</li>
<li>Benchmark-Suite fuer reproduzierbare Ergebnisse nutzen</li>
<li>Kosten und Qualitaet gemeinsam bewerten</li>
<li>Lokale Modelle fuer sensible Daten bevorzugen</li>
</ol>
`,
},
// Security
security: {
title: 'Security System-Info',
description: 'DevSecOps Dashboard mit Vulnerability Scanning und Compliance Checks.',
version: '2.0',
privacyNotes: [
'Automatische CVE-Pruefung aller Dependencies',
'OWASP Top 10 Compliance',
'Container Security Scanning',
'Secret Detection in Code',
],
architecture: {
layers: [
{ title: 'Security Dashboard', components: ['Vulnerability Overview', 'Compliance Status', 'Alerts'], color: '#ef4444' },
{ title: 'Scanners', components: ['Trivy', 'Semgrep', 'Gitleaks', 'OWASP ZAP'], color: '#8b5cf6' },
{ title: 'CI/CD Integration', components: ['GitHub Actions', 'Pre-commit Hooks', 'PR Checks'], color: '#10b981' },
{ title: 'Reporting', components: ['SARIF', 'SBOM', 'Audit Reports'], color: '#f59e0b' },
],
},
features: [
{ name: 'Vulnerability Scanning', status: 'active', description: 'Automatische CVE-Pruefung' },
{ name: 'SBOM Generation', status: 'active', description: 'Software Bill of Materials' },
{ name: 'Secret Detection', status: 'active', description: 'Gitleaks Integration' },
{ name: 'DAST Scanning', status: 'planned', description: 'Dynamic Application Security Testing' },
{ name: 'Penetration Testing', status: 'planned', description: 'Automatisierte Pen-Tests' },
],
roadmap: [
{ phase: 'Phase 1: SAST (Q1)', priority: 'high', items: ['Semgrep Rules', 'CodeQL Integration', 'Custom Rules', 'False Positive Management'] },
{ phase: 'Phase 2: Runtime (Q2)', priority: 'high', items: ['Runtime Protection', 'WAF Integration', 'Anomaly Detection', 'Incident Response'] },
{ phase: 'Phase 3: Compliance (Q3)', priority: 'medium', items: ['SOC 2 Readiness', 'ISO 27001 Mapping', 'GDPR Technical Measures', 'Audit Automation'] },
],
technicalDetails: [
{ component: 'Container Scan', technology: 'Trivy', version: '0.50+', description: 'Image Vulnerabilities' },
{ component: 'SAST', technology: 'Semgrep', version: '1.x', description: 'Code Analysis' },
{ component: 'Secrets', technology: 'Gitleaks', version: '8.x', description: 'Secret Detection' },
{ component: 'SBOM', technology: 'CycloneDX', version: '1.5', description: 'Dependency List' },
],
auditInfo: [
{
category: 'Vulnerability Status',
items: [
{ label: 'Kritische CVEs', value: '0', status: 'ok' },
{ label: 'Hohe CVEs', value: '0', status: 'ok' },
{ label: 'Mittlere CVEs', value: 'Tracking', status: 'warning' },
{ label: 'Letzte Pruefung', value: 'Taeglich', status: 'ok' },
],
},
{
category: 'Compliance',
items: [
{ label: 'OWASP Top 10', value: 'Geprueft', status: 'ok' },
{ label: 'Secret Detection', value: 'Aktiv', status: 'ok' },
{ label: 'Container Hardening', value: 'Umgesetzt', status: 'ok' },
{ label: 'Dependency Updates', value: 'Woechentlich', status: 'ok' },
],
},
{
category: 'Monitoring',
items: [
{ label: 'Echtzeit-Alerts', value: 'Aktiviert', status: 'ok' },
{ label: 'SIEM Integration', value: 'Geplant', status: 'warning' },
{ label: 'Penetration Tests', value: 'Quartalsweise', status: 'ok' },
{ label: 'Bug Bounty', value: 'In Planung', status: 'warning' },
],
},
],
fullDocumentation: `
<h2>Security & DevSecOps Dashboard</h2>
<h3>1. Uebersicht</h3>
<p>Das Security-Modul integriert Sicherheitspruefungen in den gesamten Entwicklungs- und Deployment-Prozess (DevSecOps). Es kombiniert statische Analyse, Container-Scanning und Laufzeitschutz.</p>
<h3>2. Security-Tools</h3>
<table>
<tr><th>Tool</th><th>Kategorie</th><th>Funktion</th><th>Integration</th></tr>
<tr><td>Trivy</td><td>Container</td><td>Image Vulnerability Scanning</td><td>CI/CD</td></tr>
<tr><td>Semgrep</td><td>SAST</td><td>Code Pattern Matching</td><td>Pre-commit, CI</td></tr>
<tr><td>Gitleaks</td><td>Secrets</td><td>Credential Detection</td><td>Pre-commit, CI</td></tr>
<tr><td>OWASP ZAP</td><td>DAST</td><td>Web App Scanning</td><td>Staging</td></tr>
</table>
<h3>3. Scanning-Pipeline</h3>
<pre>
┌─────────────────────────────────────────────────────────────────────┐
│ Development Phase │
├─────────────────────────────────────────────────────────────────────┤
│ Pre-commit Hooks │
│ ├── Gitleaks (Secrets) │
│ ├── Semgrep (Quick Rules) │
│ └── Formatting/Linting │
└─────────────────────────────────────────────────────────────────────┘
v
┌─────────────────────────────────────────────────────────────────────┐
│ CI Pipeline │
├─────────────────────────────────────────────────────────────────────┤
│ ├── Full SAST Scan (Semgrep) │
│ ├── Dependency Check (npm audit, go vuln) │
│ ├── Container Scan (Trivy) │
│ ├── SBOM Generation (Syft) │
│ └── License Compliance │
└─────────────────────────────────────────────────────────────────────┘
v
┌─────────────────────────────────────────────────────────────────────┐
│ Staging/Prod │
├─────────────────────────────────────────────────────────────────────┤
│ ├── DAST Scan (OWASP ZAP) │
│ ├── Runtime Protection │
│ └── Anomaly Detection │
└─────────────────────────────────────────────────────────────────────┘
</pre>
<h3>4. OWASP Top 10 Abdeckung</h3>
<table>
<tr><th>#</th><th>Risiko</th><th>Massnahme</th><th>Status</th></tr>
<tr><td>A01</td><td>Broken Access Control</td><td>RBAC, JWT Validation</td><td>✓</td></tr>
<tr><td>A02</td><td>Cryptographic Failures</td><td>TLS 1.3, AES-256</td><td>✓</td></tr>
<tr><td>A03</td><td>Injection</td><td>Parameterized Queries, Input Validation</td><td>✓</td></tr>
<tr><td>A04</td><td>Insecure Design</td><td>Threat Modeling, Code Review</td><td>✓</td></tr>
<tr><td>A05</td><td>Security Misconfiguration</td><td>Hardened Defaults, IaC Scanning</td><td>✓</td></tr>
<tr><td>A06</td><td>Vulnerable Components</td><td>Dependency Scanning, SBOM</td><td>✓</td></tr>
<tr><td>A07</td><td>Auth Failures</td><td>MFA, Session Management</td><td>✓</td></tr>
<tr><td>A08</td><td>Software Integrity</td><td>Signed Commits, SBOM</td><td>✓</td></tr>
<tr><td>A09</td><td>Logging Failures</td><td>Structured Logging, Audit Trail</td><td>✓</td></tr>
<tr><td>A10</td><td>SSRF</td><td>URL Validation, Network Policies</td><td>✓</td></tr>
</table>
<h3>5. Vulnerability Management</h3>
<pre>
CVE Discovered
v
┌───────────────────┐
│ Severity Rating │
│ Critical/High/Med │
└─────────┬─────────┘
┌─────┴─────┐
│ Critical? │
└─────┬─────┘
Yes │ No
│ └──> Backlog mit Frist
v
┌───────────────────┐
│ Immediate Action │
│ - Block Deploy │
│ - Notify Team │
│ - Hotfix Branch │
└───────────────────┘
</pre>
<h3>6. Secret Management</h3>
<ul>
<li><strong>Speicherung:</strong> Doppler/Vault fuer Secrets</li>
<li><strong>Rotation:</strong> Automatisch alle 90 Tage</li>
<li><strong>Detection:</strong> Gitleaks in Pre-commit und CI</li>
<li><strong>Notfall:</strong> Sofortige Rotation bei Leak</li>
</ul>
<h3>7. Container Security</h3>
<table>
<tr><th>Massnahme</th><th>Implementation</th></tr>
<tr><td>Base Images</td><td>Alpine/Distroless, regelmaessig aktualisiert</td></tr>
<tr><td>Non-root User</td><td>Alle Container als non-root</td></tr>
<tr><td>Read-only FS</td><td>Wo moeglich aktiviert</td></tr>
<tr><td>Resource Limits</td><td>CPU/Memory Limits gesetzt</td></tr>
<tr><td>Network Policies</td><td>Kubernetes NetworkPolicy</td></tr>
</table>
<h3>8. Incident Response</h3>
<ol>
<li><strong>Detection:</strong> Automatische Alerts, Monitoring</li>
<li><strong>Triage:</strong> Schweregrad-Bewertung, Scope</li>
<li><strong>Containment:</strong> Isolation, Zugriffssperre</li>
<li><strong>Eradication:</strong> Ursachenbehandlung</li>
<li><strong>Recovery:</strong> Wiederherstellung, Monitoring</li>
<li><strong>Lessons Learned:</strong> Post-Mortem, Verbesserungen</li>
</ol>
<h3>9. Compliance-Reports</h3>
<p>Automatisch generierte Reports:</p>
<ul>
<li>Woechentlich: Vulnerability Summary</li>
<li>Monatlich: Compliance Status, SBOM</li>
<li>Quartalsweise: Penetration Test Results</li>
<li>Jaehrlich: Security Audit Report</li>
</ul>
<h3>10. Metriken</h3>
<table>
<tr><th>Metrik</th><th>Ziel</th><th>Messung</th></tr>
<tr><td>Mean Time to Remediate (Critical)</td><td>&lt; 24h</td><td>Automatisch</td></tr>
<tr><td>Mean Time to Remediate (High)</td><td>&lt; 7 Tage</td><td>Automatisch</td></tr>
<tr><td>Scan Coverage</td><td>100%</td><td>CI Pipeline</td></tr>
<tr><td>False Positive Rate</td><td>&lt; 10%</td><td>Review</td></tr>
</table>
`,
},
// Middleware
middleware: {
title: 'Middleware System-Info',
description: 'Middleware-Stack mit Test-Wizard fuer Integration Tests.',
version: '1.5',
architecture: {
layers: [
{ title: 'Test Wizard UI', components: ['Test Runner', 'Result Viewer', 'Coverage Report'], color: '#3b82f6' },
{ title: 'API Gateway', components: ['Traefik', 'Rate Limiter', 'Auth Proxy'], color: '#8b5cf6' },
{ title: 'Services', components: ['Consent', 'Klausur', 'School', 'Backend'], color: '#10b981' },
{ title: 'Infrastructure', components: ['PostgreSQL', 'Valkey', 'MinIO', 'Qdrant'], color: '#f59e0b' },
],
},
features: [
{ name: 'Integration Tests', status: 'active', description: 'End-to-End API Tests' },
{ name: 'Health Checks', status: 'active', description: 'Service-Status Pruefung' },
{ name: 'Test Wizard', status: 'active', description: 'Interaktive Test-Suite' },
{ name: 'Load Testing', status: 'planned', description: 'Performance-Tests' },
{ name: 'Chaos Engineering', status: 'planned', description: 'Resilienz-Tests' },
],
roadmap: [
{ phase: 'Phase 1: Testing (Q1)', priority: 'high', items: ['API Test Suite', 'Database Tests', 'Auth Flow Tests', 'Error Handling Tests'] },
{ phase: 'Phase 2: Performance (Q2)', priority: 'medium', items: ['k6 Load Tests', 'Latency Benchmarks', 'Throughput Tests', 'Memory Profiling'] },
{ phase: 'Phase 3: Resilience (Q3)', priority: 'low', items: ['Chaos Monkey', 'Failover Tests', 'Circuit Breaker', 'Graceful Degradation'] },
],
technicalDetails: [
{ component: 'API Gateway', technology: 'Traefik', version: '3.x', description: 'Reverse Proxy' },
{ component: 'Cache', technology: 'Valkey', version: '8.x', description: 'In-Memory Store' },
{ component: 'Storage', technology: 'MinIO', version: 'Latest', description: 'S3-kompatibel' },
{ component: 'Vector DB', technology: 'Qdrant', version: '1.12+', description: 'Similarity Search' },
],
auditInfo: [
{
category: 'Service Health',
items: [
{ label: 'API Gateway (Traefik)', value: 'Online', status: 'ok' },
{ label: 'PostgreSQL', value: 'Online', status: 'ok' },
{ label: 'Valkey (Cache)', value: 'Online', status: 'ok' },
{ label: 'Qdrant', value: 'Online', status: 'ok' },
],
},
{
category: 'Test Coverage',
items: [
{ label: 'Integration Tests', value: 'Aktiv', status: 'ok' },
{ label: 'Auth Flow Tests', value: 'Implementiert', status: 'ok' },
{ label: 'Load Tests', value: 'Geplant', status: 'warning' },
{ label: 'Chaos Tests', value: 'Geplant', status: 'warning' },
],
},
{
category: 'Performance',
items: [
{ label: 'Avg. Response Time', value: '< 100ms', status: 'ok' },
{ label: 'Uptime (30 Tage)', value: '> 99.9%', status: 'ok' },
{ label: 'Error Rate', value: '< 0.1%', status: 'ok' },
{ label: 'Cache Hit Ratio', value: '> 90%', status: 'ok' },
],
},
],
fullDocumentation: `
<h2>Middleware & Integration Testing</h2>
<h3>1. Uebersicht</h3>
<p>Das Middleware-Modul verwaltet den gesamten Service-Stack und bietet einen Test-Wizard fuer Integration Tests. Es stellt sicher, dass alle Services korrekt miteinander kommunizieren.</p>
<h3>2. Service-Architektur</h3>
<pre>
┌─────────────────────────────────────────────────────────────────────┐
│ Traefik Gateway │
│ ├── TLS Termination │
│ ├── Rate Limiting │
│ ├── Request Routing │
│ └── Health Checks │
└────────────────────────────────┬────────────────────────────────────┘
┌──────────────────────┼──────────────────────┐
│ │ │
v v v
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Website (3000) │ │ Backend (8000) │ │ Consent (8081) │
│ Next.js │ │ FastAPI │ │ Gin │
└────────┬────────┘ └────────┬────────┘ └────────┬────────┘
│ │ │
└──────────────────┬──┴─────────────────────┘
┌─────────────────┼─────────────────┐
│ │ │
v v v
┌─────────────────┐ ┌────────────┐ ┌─────────────────┐
│ PostgreSQL │ │ Valkey │ │ Qdrant │
│ (5432) │ │ (6379) │ │ (6333) │
└─────────────────┘ └────────────┘ └─────────────────┘
</pre>
<h3>3. Test-Wizard Funktionen</h3>
<table>
<tr><th>Test-Kategorie</th><th>Beschreibung</th><th>Status</th></tr>
<tr><td>Health Checks</td><td>Service-Erreichbarkeit</td><td>Automatisch</td></tr>
<tr><td>Auth Flow</td><td>Login, Token-Refresh, Logout</td><td>Implementiert</td></tr>
<tr><td>Consent CRUD</td><td>Dokumente erstellen, lesen, aktualisieren</td><td>Implementiert</td></tr>
<tr><td>Database</td><td>Connection Pool, Query Performance</td><td>Implementiert</td></tr>
<tr><td>Cache</td><td>Set/Get, Invalidierung</td><td>Implementiert</td></tr>
<tr><td>Vector Search</td><td>Embedding, Similarity Search</td><td>Implementiert</td></tr>
</table>
<h3>4. API Endpoints</h3>
<table>
<tr><th>Endpoint</th><th>Methode</th><th>Beschreibung</th></tr>
<tr><td>/api/middleware/health</td><td>GET</td><td>Alle Service Health Checks</td></tr>
<tr><td>/api/middleware/tests</td><td>GET</td><td>Verfuegbare Test-Suites</td></tr>
<tr><td>/api/middleware/tests/run</td><td>POST</td><td>Test-Suite ausfuehren</td></tr>
<tr><td>/api/middleware/metrics</td><td>GET</td><td>Performance-Metriken</td></tr>
</table>
<h3>5. Health Check Format</h3>
<pre>
{
"status": "healthy",
"timestamp": "2025-01-14T10:00:00Z",
"services": {
"postgres": {
"status": "up",
"latency_ms": 2,
"details": {"connections": 10, "max": 100}
},
"valkey": {
"status": "up",
"latency_ms": 1,
"details": {"memory_used": "50MB"}
},
"qdrant": {
"status": "up",
"latency_ms": 5,
"details": {"collections": 3}
}
}
}
</pre>
<h3>6. Test-Ausfuehrung</h3>
<pre>
Test Request
v
┌───────────────────────────────────────┐
│ Test Runner Engine │
├───────────────────────────────────────┤
│ 1. Setup (Fixtures, Test Data) │
│ 2. Execute (Sequential/Parallel) │
│ 3. Assert (Expected vs Actual) │
│ 4. Cleanup (Remove Test Data) │
│ 5. Report (Results, Timings) │
└───────────────────────────────────────┘
v
┌───────────────────────────────────────┐
│ Test Report │
│ ├── Total: 25, Passed: 24, Failed: 1 │
│ ├── Duration: 5.2s │
│ └── Details per Test Case │
└───────────────────────────────────────┘
</pre>
<h3>7. Rate Limiting</h3>
<table>
<tr><th>Endpoint-Typ</th><th>Limit</th><th>Window</th></tr>
<tr><td>Public API</td><td>100 req</td><td>1 Minute</td></tr>
<tr><td>Authenticated API</td><td>1000 req</td><td>1 Minute</td></tr>
<tr><td>Admin API</td><td>5000 req</td><td>1 Minute</td></tr>
<tr><td>File Upload</td><td>10 req</td><td>1 Minute</td></tr>
</table>
<h3>8. Caching-Strategie</h3>
<ul>
<li><strong>Session Cache:</strong> 15 Min TTL, User-Tokens</li>
<li><strong>API Response Cache:</strong> 5 Min TTL, GET-Requests</li>
<li><strong>Config Cache:</strong> 1 Stunde TTL, System-Konfiguration</li>
<li><strong>Invalidierung:</strong> Event-basiert bei Datenänderung</li>
</ul>
<h3>9. Monitoring & Alerts</h3>
<table>
<tr><th>Alert</th><th>Schwelle</th><th>Aktion</th></tr>
<tr><td>Service Down</td><td>3 failed checks</td><td>PagerDuty, Slack</td></tr>
<tr><td>High Latency</td><td>> 500ms avg</td><td>Slack</td></tr>
<tr><td>High Error Rate</td><td>> 1%</td><td>Slack</td></tr>
<tr><td>DB Connections High</td><td>> 80%</td><td>E-Mail</td></tr>
</table>
<h3>10. Troubleshooting</h3>
<pre>
Problem: Service nicht erreichbar
├── Check: Docker Container Status
├── Check: Port-Mapping
├── Check: Network (docker network ls)
└── Check: Logs (docker logs service-name)
Problem: Hohe Latenz
├── Check: Database Query Performance
├── Check: Cache Hit Ratio
├── Check: CPU/Memory Usage
└── Check: Network Latency
</pre>
`,
},
// Communication (Matrix/Jitsi/Jibri/Transcription)
communication: {
title: 'Communication System-Info',
description: 'Matrix Homeserver, Jitsi Videokonferenz, Jibri Recording und KI-Transkription.',
version: '2.0',
architecture: {
layers: [
{ title: 'Frontend', components: ['BreakPilot Meet', 'Recording UI', 'Transcript Viewer'], color: '#3b82f6' },
{ title: 'Videokonferenz', components: ['Jitsi Meet', 'Videobridge', 'Jicofo', 'Prosody'], color: '#17a2b8' },
{ title: 'Recording', components: ['Jibri', 'Xvfb', 'FFmpeg', 'MinIO Upload'], color: '#28a745' },
{ title: 'Transkription', components: ['faster-whisper', 'pyannote.audio', 'RQ Worker'], color: '#6f42c1' },
{ title: 'Matrix Chat', components: ['Synapse', 'Federation', 'Media Store'], color: '#0DBD8B' },
{ title: 'Infrastructure', components: ['PostgreSQL', 'Valkey', 'MinIO', 'TURN'], color: '#f59e0b' },
],
},
features: [
{ name: 'Jitsi Videokonferenz', status: 'active', description: 'WebRTC-basierte Videokonferenzen' },
{ name: 'Matrix Chat', status: 'active', description: 'E2EE Messaging mit Synapse' },
{ name: 'Jibri Recording', status: 'active', description: 'Meeting-Aufzeichnung mit Consent' },
{ name: 'KI-Transkription', status: 'active', description: 'Whisper + Speaker Diarization' },
{ name: 'KI Meeting-Protokolle', status: 'active', description: 'LLM-generierte Zusammenfassungen mit Action Items' },
{ name: 'Untertitel Export', status: 'active', description: 'WebVTT und SRT Export' },
{ name: 'PDF Export', status: 'active', description: 'Protokolle als PDF exportieren' },
],
roadmap: [
{ phase: 'Phase 1: Recording (Abgeschlossen)', priority: 'high', items: ['Jibri Integration', 'MinIO Storage', 'Consent Management', 'Webhook Pipeline'] },
{ phase: 'Phase 2: Transkription (Abgeschlossen)', priority: 'high', items: ['Whisper large-v3', 'Speaker Diarization', 'VTT/SRT Export', 'Segment-Suche'] },
{ phase: 'Phase 3: Protokolle (Abgeschlossen)', priority: 'high', items: ['LLM Gateway Integration', 'Action Items', 'Zusammenfassungen', 'MD/HTML/PDF Export'] },
{ phase: 'Phase 4: Erweiterte KI (Q2)', priority: 'medium', items: ['Sprecher-Namensverknuepfung', 'Themen-Clustering', 'Sentiment-Analyse', 'Automatische Agenda'] },
],
technicalDetails: [
{ component: 'Video', technology: 'Jitsi Meet', version: 'stable-9823', description: 'WebRTC Konferenz' },
{ component: 'Recording', technology: 'Jibri', version: 'stable-9823', description: 'Meeting Recording' },
{ component: 'Transkription', technology: 'faster-whisper', version: '1.0+', description: 'GPU-optimiert (MIT)' },
{ component: 'Diarization', technology: 'pyannote.audio', version: '3.x', description: 'Speaker ID (MIT)' },
{ component: 'Meeting Minutes', technology: 'LLM Gateway', version: '1.0', description: 'Ollama/Llama 3.1' },
{ component: 'Queue', technology: 'RQ/Valkey', version: '1.x', description: 'Task Processing' },
{ component: 'Storage', technology: 'MinIO', version: 'latest', description: 'S3-kompatibel' },
{ component: 'Chat', technology: 'Matrix Synapse', version: '1.x', description: 'E2EE Homeserver' },
{ component: 'TURN', technology: 'Coturn', version: '4.x', description: 'NAT Traversal' },
],
auditInfo: [
{
category: 'Jitsi Videokonferenz',
items: [
{ label: 'Videobridge', value: 'Online', status: 'ok' },
{ label: 'Max. Teilnehmer', value: '100', status: 'ok' },
{ label: 'E2E Encryption', value: 'Verfuegbar', status: 'ok' },
{ label: 'TURN Server', value: 'Aktiv', status: 'ok' },
],
},
{
category: 'Jibri Recording',
items: [
{ label: 'Recording Service', value: 'Aktiv', status: 'ok' },
{ label: 'Consent-Pflicht', value: 'Aktiviert', status: 'ok' },
{ label: 'Storage', value: 'MinIO (Self-hosted)', status: 'ok' },
{ label: 'Retention', value: '365 Tage', status: 'ok' },
],
},
{
category: 'KI-Transkription',
items: [
{ label: 'Whisper Modell', value: 'large-v3 (lokal)', status: 'ok' },
{ label: 'Speaker Diarization', value: 'pyannote (lokal)', status: 'ok' },
{ label: 'Datenverarbeitung', value: '100% On-Premise', status: 'ok' },
{ label: 'Export-Formate', value: 'VTT, SRT, JSON', status: 'ok' },
],
},
{
category: 'KI Meeting-Protokolle',
items: [
{ label: 'LLM Backend', value: 'Ollama (lokal)', status: 'ok' },
{ label: 'Modell', value: 'Llama 3.1 8B/70B', status: 'ok' },
{ label: 'Verarbeitung', value: '100% On-Premise', status: 'ok' },
{ label: 'Export-Formate', value: 'MD, HTML, PDF', status: 'ok' },
],
},
{
category: 'Matrix Homeserver',
items: [
{ label: 'Server Status', value: 'Online', status: 'ok' },
{ label: 'Federation', value: 'Aktiviert', status: 'ok' },
{ label: 'E2E Encryption', value: 'Standard', status: 'ok' },
{ label: 'Media Retention', value: '90 Tage', status: 'ok' },
],
},
{
category: 'DSGVO-Compliance',
items: [
{ label: 'Daten-Residenz', value: 'EU (Self-hosted)', status: 'ok' },
{ label: 'Consent-Management', value: 'Implementiert', status: 'ok' },
{ label: 'Audit-Logging', value: 'Aktiviert', status: 'ok' },
{ label: 'Loeschrecht (Art. 17)', value: 'Implementiert', status: 'ok' },
],
},
{
category: 'Open Source Lizenzen',
items: [
{ label: 'Jitsi/Jibri', value: 'Apache-2.0', status: 'ok' },
{ label: 'faster-whisper', value: 'MIT', status: 'ok' },
{ label: 'pyannote.audio', value: 'MIT', status: 'ok' },
{ label: 'Matrix Synapse', value: 'AGPL-3.0', status: 'ok' },
],
},
],
fullDocumentation: `
<h2>BreakPilot Communication Platform</h2>
<p><strong>Version:</strong> 2.0.0 | <strong>Stand:</strong> Januar 2026 | <strong>Autor:</strong> BreakPilot Development Team</p>
<h2>Audit-Relevante Informationen</h2>
<p>Dieses Dokument dient als technische Dokumentation fuer das Kommunikationssystem der BreakPilot Plattform. Es ist fuer Audits durch Bildungstraeger und Datenschutzbeauftragte konzipiert.</p>
<h3>Ziel des Kommunikationssystems</h3>
<p>Das System ermoeglicht sichere Videokonferenzen und Messaging fuer Bildungseinrichtungen mit:</p>
<ul>
<li><strong>Jitsi Meet:</strong> DSGVO-konforme Videokonferenzen ohne Drittanbieter</li>
<li><strong>Jibri Recording:</strong> Meeting-Aufzeichnung mit expliziter Einwilligung</li>
<li><strong>KI-Transkription:</strong> Automatische Verschriftlichung mit Sprechererkennung</li>
<li><strong>KI Meeting-Protokolle:</strong> Automatische Zusammenfassungen, Action Items, Entscheidungen</li>
<li><strong>Matrix Chat:</strong> Ende-zu-Ende verschluesselte Nachrichten</li>
</ul>
<h3>Datenschutz-Compliance</h3>
<ul>
<li><strong>100% Self-Hosted:</strong> Alle Dienste laufen auf eigenen Servern in der EU</li>
<li><strong>Keine Cloud-Abhaengigkeit:</strong> Keine Daten verlassen die Infrastruktur</li>
<li><strong>Consent-Management:</strong> Aufzeichnung nur mit expliziter Zustimmung aller Teilnehmer</li>
<li><strong>Audit-Logging:</strong> Vollstaendige Nachvollziehbarkeit aller Zugriffe</li>
<li><strong>Open Source:</strong> Alle Komponenten sind quelloffen und auditierbar</li>
</ul>
<hr/>
<h2>1. Systemarchitektur</h2>
<h3>Gesamtarchitektur</h3>
<pre>
┌─────────────────────────────────────────────────────────────────────────────┐
│ BreakPilot Meet Frontend │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Lobby/Rooms │ │ Jitsi UI │ │ Recording │ │ Transcript │ │
│ │ │ │ │ │ Consent │ │ Viewer │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘ │
└─────────────────────────────────┬───────────────────────────────────────────┘
v
┌─────────────────────────────────────────────────────────────────────────────┐
│ Jitsi Meet Stack │
│ ┌────────────────┐ ┌────────────────┐ ┌────────────────┐ │
│ │ Jicofo │ │ Videobridge │ │ Prosody │ │
│ │ (Orchestrator) │ │ (WebRTC) │ │ (XMPP) │ │
│ └───────┬────────┘ └───────┬────────┘ └───────┬────────┘ │
│ └───────────────────┼───────────────────┘ │
│ │ │
│ ┌────────────────────────────v────────────────────────────┐ │
│ │ Jibri │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │ Xvfb │ │ Chromium │ │ FFmpeg │ │ │
│ │ │ (Display)│ │ (Capture)│ │ (Encode) │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ │ │
│ │ │ │ │
│ │ finalize.sh (Upload) │ │
│ └──────────────────────┬──────────────────────────────────┘ │
└─────────────────────────┼───────────────────────────────────────────────────┘
v
┌─────────────────────────────────────────────────────────────────────────────┐
│ Storage & Processing │
│ │
│ ┌────────────────┐ ┌────────────────────────────────────┐ │
│ │ MinIO │ │ Transcription Worker │ │
│ │ ┌──────────┐ │ Webhook │ ┌────────────┐ ┌────────────┐ │ │
│ │ │recordings│ │─────────────>│ │faster- │ │pyannote. │ │ │
│ │ │ /video │ │ │ │whisper │ │audio │ │ │
│ │ │ /audio │ │ │ │(large-v3) │ │(diarize) │ │ │
│ │ │ /vtt │ │ │ └─────┬──────┘ └─────┬──────┘ │ │
│ │ └──────────┘ │ │ └───────┬───────┘ │ │
│ └────────────────┘ │ v │ │
│ │ ┌────────────┐ │ │
│ │ │ Aligner │ │ │
│ │ │ + Export │ │ │
│ │ └────────────┘ │ │
│ └────────────────────────────────────┘ │
│ │
│ ┌────────────────┐ ┌────────────────┐ ┌────────────────┐ │
│ │ PostgreSQL │ │ Valkey │ │ Coturn │ │
│ │ (Metadata) │ │ (Task Queue) │ │ (TURN/STUN) │ │
│ └────────────────┘ └────────────────┘ └────────────────┘ │
└─────────────────────────────────────────────────────────────────────────────┘
</pre>
<h3>Datenfluss bei Aufzeichnung</h3>
<pre>
1. Meeting-Host aktiviert Recording
v
2. Consent-Abfrage an alle Teilnehmer
├── Alle stimmen zu ──────────────────────────────>│
│ │
└── Mindestens einer lehnt ab ──> Recording nicht │
moeglich │
v
3. Jibri verbindet sich als unsichtbarer Teilnehmer
v
4. Xvfb + Chromium + FFmpeg nehmen Meeting auf
v
5. Meeting endet ──> finalize.sh wird ausgefuehrt
├── Video (MP4) wird zu MinIO hochgeladen
├── Audio (WAV 16kHz) wird extrahiert
└── Backend-Webhook wird aufgerufen
v
6. Transcription Job wird in Valkey Queue gestellt
v
7. Worker verarbeitet Audio:
├── faster-whisper: Spracherkennung
├── pyannote.audio: Sprechererkennung
└── Aligner: Text + Sprecher zusammenfuehren
v
8. Export: VTT, SRT, JSON werden generiert
v
9. Ergebnisse in MinIO + Datenbank gespeichert
</pre>
<hr/>
<h2>2. Jibri Recording Service</h2>
<h3>Technische Details</h3>
<table>
<tr><th>Komponente</th><th>Technologie</th><th>Beschreibung</th></tr>
<tr><td>Base Image</td><td>jitsi/jibri:stable-9823</td><td>Offizielles Jitsi Recording Image</td></tr>
<tr><td>Display</td><td>Xvfb</td><td>Virtual Framebuffer (kein echter Monitor noetig)</td></tr>
<tr><td>Browser</td><td>Chromium</td><td>Tritt Meeting bei und rendert Video</td></tr>
<tr><td>Encoding</td><td>FFmpeg</td><td>MP4 (H.264/AAC) + WAV Audio-Extraktion</td></tr>
<tr><td>Upload</td><td>MinIO Client (mc)</td><td>S3-kompatibler Upload</td></tr>
</table>
<h3>X11/Xvfb Konfiguration</h3>
<p>Jibri benoetigt einen X11-Display. In Docker wird dies mit Xvfb (Virtual Framebuffer) realisiert:</p>
<pre>
# Konfiguration
DISPLAY=:0
RESOLUTION=1920x1080x24
# Start-Sequenz
1. Xvfb :0 -screen 0 1920x1080x24 startet
2. Chromium verbindet sich zum virtuellen Display
3. FFmpeg captured den Display-Inhalt
4. Video wird als MP4 gespeichert
</pre>
<h3>Finalize Script (Post-Recording)</h3>
<p>Nach Beendigung einer Aufzeichnung wird automatisch finalize.sh ausgefuehrt:</p>
<ol>
<li>Video (MP4) zu MinIO hochladen</li>
<li>Audio (WAV 16kHz mono) fuer Transkription extrahieren</li>
<li>Audio zu MinIO hochladen</li>
<li>Backend-Webhook mit Metadaten aufrufen</li>
<li>Lokale Dateien aufraeumen</li>
</ol>
<hr/>
<h2>3. KI-Transkription</h2>
<h3>Whisper Modell (faster-whisper)</h3>
<table>
<tr><th>Eigenschaft</th><th>Wert</th><th>Bedeutung</th></tr>
<tr><td>Modell</td><td>large-v3</td><td>Hoechste Genauigkeit</td></tr>
<tr><td>Lizenz</td><td>MIT</td><td>Kommerziell nutzbar</td></tr>
<tr><td>Verarbeitung</td><td>100% lokal</td><td>Keine Cloud-Abhaengigkeit</td></tr>
<tr><td>Sprachen</td><td>99+ (inkl. Deutsch)</td><td>Automatische Erkennung</td></tr>
<tr><td>VRAM</td><td>~10GB (GPU)</td><td>CPU-Fallback verfuegbar</td></tr>
</table>
<h3>Speaker Diarization (pyannote.audio)</h3>
<p>Erkennt und unterscheidet verschiedene Sprecher im Audio:</p>
<table>
<tr><th>Feature</th><th>Beschreibung</th></tr>
<tr><td>Speaker Detection</td><td>Automatische Erkennung der Anzahl Sprecher</td></tr>
<tr><td>Speaker ID</td><td>Konsistente Zuweisung (SPEAKER_00, SPEAKER_01, ...)</td></tr>
<tr><td>Overlap Handling</td><td>Erkennung ueberlappender Sprache</td></tr>
<tr><td>Lizenz</td><td>MIT (kommerziell nutzbar)</td></tr>
</table>
<h3>Verarbeitungsgeschwindigkeit</h3>
<table>
<tr><th>Hardware</th><th>Geschwindigkeit</th><th>1h Audio</th></tr>
<tr><td>GPU (CUDA)</td><td>~10x Echtzeit</td><td>~6 Minuten</td></tr>
<tr><td>CPU (int8)</td><td>~0.5x Echtzeit</td><td>~2 Stunden</td></tr>
</table>
<h3>Export-Formate</h3>
<table>
<tr><th>Format</th><th>Verwendung</th><th>Beispiel</th></tr>
<tr><td>WebVTT (.vtt)</td><td>Browser-Untertitel</td><td>00:00:01.500 --> 00:00:03.200<br/>Guten Tag, willkommen zum Meeting.</td></tr>
<tr><td>SRT (.srt)</td><td>Video-Player</td><td>1<br/>00:00:01,500 --> 00:00:03,200<br/>Guten Tag, willkommen zum Meeting.</td></tr>
<tr><td>JSON</td><td>Programmatisch</td><td>Segmente mit Zeitstempel, Text, Sprecher, Konfidenz</td></tr>
</table>
<hr/>
<h2>4. DSGVO-Konformitaet</h2>
<h3>Rechtsgrundlage (Art. 6 DSGVO)</h3>
<table>
<tr><th>Verarbeitung</th><th>Rechtsgrundlage</th><th>Umsetzung</th></tr>
<tr><td>Videokonferenz</td><td>Art. 6(1)(b) - Vertragserfuellung</td><td>Notwendig fuer Unterricht</td></tr>
<tr><td>Recording</td><td>Art. 6(1)(a) - Einwilligung</td><td>Explizite Zustimmung aller Teilnehmer</td></tr>
<tr><td>Transkription</td><td>Art. 6(1)(a) - Einwilligung</td><td>Abgeleitet von Recording-Consent</td></tr>
<tr><td>Protokolle</td><td>Art. 6(1)(a) - Einwilligung</td><td>Opt-in fuer KI-Zusammenfassung</td></tr>
</table>
<h3>Consent-Management</h3>
<pre>
Recording-Anfrage
v
┌─────────────────────────────────────┐
│ Consent-Dialog an alle Teilnehmer │
│ │
│ "Die Aufzeichnung dieses Meetings │
│ wurde angefragt. Stimmen Sie zu?" │
│ │
│ [ Zustimmen ] [ Ablehnen ] │
└─────────────────┬───────────────────┘
┌─────────────┴─────────────┐
│ │
v v
Alle stimmen zu Mind. 1 lehnt ab
│ │
v v
Recording startet Recording wird
nicht gestartet
</pre>
<h3>Audit-Logging (Art. 30 DSGVO)</h3>
<p>Alle Zugriffe auf Aufzeichnungen werden protokolliert:</p>
<table>
<tr><th>Aktion</th><th>Protokollierte Daten</th></tr>
<tr><td>Recording erstellt</td><td>Zeitpunkt, Meeting-ID, Ersteller</td></tr>
<tr><td>Recording angesehen</td><td>Zeitpunkt, Nutzer-ID, IP (anonymisiert)</td></tr>
<tr><td>Transkription abgerufen</td><td>Zeitpunkt, Nutzer-ID, Format</td></tr>
<tr><td>Recording geloescht</td><td>Zeitpunkt, Nutzer-ID, Grund</td></tr>
</table>
<h3>Loeschrecht (Art. 17 DSGVO)</h3>
<ul>
<li><strong>Automatische Loeschung:</strong> Nach 365 Tagen (konfigurierbar)</li>
<li><strong>Manuelle Loeschung:</strong> Jederzeit durch Ersteller oder Admin</li>
<li><strong>Soft-Delete:</strong> Audit-Trail bleibt erhalten (ohne Inhalt)</li>
<li><strong>Loeschanfrage:</strong> Wird innerhalb von 30 Tagen bearbeitet</li>
</ul>
<h3>Technische Datenschutz-Massnahmen</h3>
<table>
<tr><th>Massnahme</th><th>Umsetzung</th><th>Wirkung</th></tr>
<tr><td>Verschluesselung at-rest</td><td>MinIO Server-Side Encryption</td><td>Schutz gespeicherter Daten</td></tr>
<tr><td>Verschluesselung in-transit</td><td>TLS 1.3</td><td>Schutz bei Uebertragung</td></tr>
<tr><td>Zugangskontrolle</td><td>RBAC (Role-Based Access)</td><td>Nur autorisierter Zugriff</td></tr>
<tr><td>Anonymisierte Speaker-IDs</td><td>SPEAKER_00, SPEAKER_01</td><td>Keine Namensverknuepfung</td></tr>
<tr><td>Lokale KI-Verarbeitung</td><td>On-Premise Whisper/pyannote</td><td>Kein Datenabfluss</td></tr>
</table>
<hr/>
<h2>5. API Endpoints</h2>
<h3>Recordings API</h3>
<table>
<tr><th>Endpoint</th><th>Methode</th><th>Beschreibung</th></tr>
<tr><td>/api/recordings</td><td>GET</td><td>Recordings auflisten (paginiert)</td></tr>
<tr><td>/api/recordings/{id}</td><td>GET</td><td>Recording Details abrufen</td></tr>
<tr><td>/api/recordings/{id}</td><td>DELETE</td><td>Recording loeschen (DSGVO Art. 17)</td></tr>
<tr><td>/api/recordings/webhook</td><td>POST</td><td>Jibri Upload Callback</td></tr>
<tr><td>/api/recordings/{id}/transcribe</td><td>POST</td><td>Transkription starten</td></tr>
<tr><td>/api/recordings/{id}/transcription</td><td>GET</td><td>Transkriptions-Status</td></tr>
<tr><td>/api/recordings/{id}/transcription/text</td><td>GET</td><td>Volltext abrufen</td></tr>
<tr><td>/api/recordings/{id}/transcription/vtt</td><td>GET</td><td>WebVTT herunterladen</td></tr>
<tr><td>/api/recordings/{id}/transcription/srt</td><td>GET</td><td>SRT herunterladen</td></tr>
</table>
<h3>Meeting Consent API</h3>
<table>
<tr><th>Endpoint</th><th>Methode</th><th>Beschreibung</th></tr>
<tr><td>/api/meeting-consent/{meeting_id}</td><td>GET</td><td>Consent-Status abfragen</td></tr>
<tr><td>/api/meeting-consent/request</td><td>POST</td><td>Recording-Consent anfordern</td></tr>
<tr><td>/api/meeting-consent/{meeting_id}/participant</td><td>POST</td><td>Teilnehmer-Consent abgeben</td></tr>
<tr><td>/api/meeting-consent/{meeting_id}/withdraw</td><td>POST</td><td>Consent zurueckziehen</td></tr>
</table>
<hr/>
<h2>6. Datenbank-Schema</h2>
<h3>Recordings Tabelle</h3>
<pre>
recordings (
id UUID PRIMARY KEY,
meeting_id VARCHAR(255) NOT NULL,
title VARCHAR(500),
storage_path VARCHAR(1000), -- MinIO Pfad
audio_path VARCHAR(1000), -- Audio fuer Transkription
duration_seconds INTEGER,
participant_count INTEGER,
status VARCHAR(50), -- uploaded, processing, ready, failed
created_by UUID,
recorded_at TIMESTAMP,
retention_days INTEGER DEFAULT 365,
deleted_at TIMESTAMP -- Soft-Delete
)
</pre>
<h3>Transcriptions Tabelle</h3>
<pre>
transcriptions (
id UUID PRIMARY KEY,
recording_id UUID REFERENCES recordings(id),
language VARCHAR(10) DEFAULT 'de',
model VARCHAR(100) DEFAULT 'large-v3',
status VARCHAR(50), -- pending, processing, completed, failed
full_text TEXT,
vtt_path VARCHAR(1000),
srt_path VARCHAR(1000),
confidence_score FLOAT,
word_count INTEGER,
processing_duration_seconds INTEGER,
created_at TIMESTAMP
)
</pre>
<h3>Consent Tabelle</h3>
<pre>
meeting_recording_consents (
id UUID PRIMARY KEY,
meeting_id VARCHAR(255) NOT NULL,
user_id UUID REFERENCES users(id),
consent_type VARCHAR(50), -- opt_in, announced
all_participants_consented BOOLEAN,
consented_at TIMESTAMP,
withdrawn_at TIMESTAMP
)
</pre>
<h3>Audit Log</h3>
<pre>
recording_audit_log (
id UUID PRIMARY KEY,
recording_id UUID,
user_id UUID,
action VARCHAR(100), -- created, viewed, deleted, exported
ip_address_hash VARCHAR(64), -- SHA-256 fuer Anonymisierung
created_at TIMESTAMP
)
</pre>
<hr/>
<h2>7. Open Source Lizenzen (SBOM)</h2>
<h3>Jitsi Stack</h3>
<table>
<tr><th>Komponente</th><th>Lizenz</th><th>Kommerziell</th><th>Quelle</th></tr>
<tr><td>Jitsi Meet</td><td>Apache-2.0</td><td>Ja</td><td>github.com/jitsi/jitsi-meet</td></tr>
<tr><td>Jibri</td><td>Apache-2.0</td><td>Ja</td><td>github.com/jitsi/jibri</td></tr>
<tr><td>Jicofo</td><td>Apache-2.0</td><td>Ja</td><td>github.com/jitsi/jicofo</td></tr>
<tr><td>Videobridge</td><td>Apache-2.0</td><td>Ja</td><td>github.com/jitsi/jitsi-videobridge</td></tr>
</table>
<h3>Transkription</h3>
<table>
<tr><th>Komponente</th><th>Lizenz</th><th>Kommerziell</th><th>Quelle</th></tr>
<tr><td>faster-whisper</td><td>MIT</td><td>Ja</td><td>github.com/SYSTRAN/faster-whisper</td></tr>
<tr><td>pyannote.audio</td><td>MIT</td><td>Ja</td><td>github.com/pyannote/pyannote-audio</td></tr>
<tr><td>FFmpeg</td><td>LGPL/GPL</td><td>Ja*</td><td>ffmpeg.org (*dynamisch gelinkt)</td></tr>
<tr><td>RQ</td><td>BSD-2-Clause</td><td>Ja</td><td>github.com/rq/rq</td></tr>
</table>
<h3>Infrastruktur</h3>
<table>
<tr><th>Komponente</th><th>Lizenz</th><th>Kommerziell</th><th>Quelle</th></tr>
<tr><td>MinIO</td><td>AGPL-3.0</td><td>Ja</td><td>github.com/minio/minio</td></tr>
<tr><td>PostgreSQL</td><td>PostgreSQL</td><td>Ja</td><td>postgresql.org</td></tr>
<tr><td>Valkey</td><td>BSD-3-Clause</td><td>Ja</td><td>github.com/valkey-io/valkey</td></tr>
<tr><td>Coturn</td><td>BSD-3-Clause</td><td>Ja</td><td>github.com/coturn/coturn</td></tr>
</table>
<hr/>
<h2>8. KI-Protokoll Generator (Geplant)</h2>
<h3>Meetily Integration</h3>
<p>Fuer automatische Meeting-Protokolle ist die Integration von Meetily geplant:</p>
<table>
<tr><th>Feature</th><th>Beschreibung</th></tr>
<tr><td>Zusammenfassung</td><td>KI-generierte Kurzfassung des Meetings</td></tr>
<tr><td>Action Items</td><td>Automatisch erkannte Aufgaben</td></tr>
<tr><td>Themen-Gliederung</td><td>Strukturierte Themenuebersicht</td></tr>
<tr><td>Entscheidungen</td><td>Dokumentierte Beschluesse</td></tr>
</table>
<h3>Technologie-Stack</h3>
<ul>
<li><strong>Meetily:</strong> Open Source (github.com/Zackriya-Solutions/meeting-minutes)</li>
<li><strong>Verarbeitung:</strong> 100% lokal mit Ollama LLMs</li>
<li><strong>Modelle:</strong> Llama 3, Mistral, oder Claude (optional)</li>
<li><strong>Export:</strong> Markdown, PDF, Word</li>
</ul>
<hr/>
<h2>9. Betrieb & Monitoring</h2>
<h3>Health Checks</h3>
<table>
<tr><th>Service</th><th>Endpoint</th><th>Erwartung</th></tr>
<tr><td>Jitsi Videobridge</td><td>/about/health</td><td>200 OK</td></tr>
<tr><td>Jibri</td><td>/jibri/api/v1.0/health</td><td>IDLE/BUSY</td></tr>
<tr><td>MinIO</td><td>/minio/health/live</td><td>200 OK</td></tr>
<tr><td>Transcription Worker</td><td>RQ Queue Status</td><td>Workers > 0</td></tr>
</table>
<h3>Backup-Strategie</h3>
<pre>
Backup-Komponenten:
├── PostgreSQL: Taeglich, 30 Tage Retention
├── MinIO Recordings: Woechentlich, 365 Tage Retention
├── Konfiguration: Git-versioniert
└── Secrets: Extern verschluesselt gespeichert
</pre>
<h3>Notfallprozeduren</h3>
<ol>
<li><strong>Jibri Recording fehlgeschlagen:</strong> Logs pruefen, Xvfb neu starten</li>
<li><strong>Transkription haengt:</strong> Worker-Queue leeren, Worker neu starten</li>
<li><strong>Storage voll:</strong> Alte Recordings gemaess Retention loeschen</li>
<li><strong>Datenpanne:</strong> Betroffene Recordings isolieren, DSB informieren</li>
</ol>
<hr/>
<h2>10. Kontakt & Support</h2>
<ul>
<li><strong>Technischer Support:</strong> support@breakpilot.de</li>
<li><strong>Datenschutzbeauftragter:</strong> dsb@breakpilot.de</li>
<li><strong>Dokumentation:</strong> docs.breakpilot.de</li>
<li><strong>GitHub:</strong> github.com/breakpilot</li>
</ul>
`,
},
// Mail/Unified Inbox
mail: {
title: 'Unified Inbox System-Info',
description: 'E-Mail-Management mit KI-Analyse und Automatisierung.',
version: '1.0',
architecture: {
layers: [
{ title: 'Inbox UI', components: ['Mail List', 'Compose', 'AI Summary'], color: '#3b82f6' },
{ title: 'Mail Service', components: ['IMAP Sync', 'SMTP Send', 'Parser'], color: '#8b5cf6' },
{ title: 'AI Pipeline', components: ['Classification', 'Summarization', 'Response Draft'], color: '#10b981' },
{ title: 'Storage', components: ['PostgreSQL', 'MinIO (Attachments)', 'Vector DB'], color: '#f59e0b' },
],
},
features: [
{ name: 'Multi-Account Support', status: 'active', description: 'Mehrere E-Mail-Konten' },
{ name: 'KI-Zusammenfassung', status: 'planned', description: 'Automatische E-Mail-Zusammenfassung' },
{ name: 'Smart Categorization', status: 'planned', description: 'KI-basierte Kategorisierung' },
{ name: 'Response Suggestions', status: 'planned', description: 'Antwort-Vorschlaege' },
],
roadmap: [
{ phase: 'Phase 1: Core (Q1)', priority: 'high', items: ['IMAP/SMTP Integration', 'Multi-Account', 'Search', 'Attachments'] },
{ phase: 'Phase 2: AI (Q2)', priority: 'high', items: ['E-Mail Classification', 'Priority Detection', 'Sentiment Analysis', 'Spam Detection'] },
{ phase: 'Phase 3: Automation (Q3)', priority: 'medium', items: ['Auto-Responses', 'Rules Engine', 'Workflow Triggers', 'CRM Integration'] },
],
technicalDetails: [
{ component: 'IMAP', technology: 'imaplib/imapclient', description: 'E-Mail Empfang' },
{ component: 'SMTP', technology: 'smtplib', description: 'E-Mail Versand' },
{ component: 'AI', technology: 'OpenAI GPT-4', description: 'Text Analysis' },
{ component: 'Search', technology: 'PostgreSQL FTS', description: 'Volltextsuche' },
],
auditInfo: [
{
category: 'E-Mail Konten',
items: [
{ label: 'Konfigurierte Konten', value: 'Variabel', status: 'ok' },
{ label: 'IMAP Sync', value: 'Aktiviert', status: 'ok' },
{ label: 'SMTP Versand', value: 'Aktiviert', status: 'ok' },
{ label: 'OAuth2 Support', value: 'Google, Microsoft', status: 'ok' },
],
},
{
category: 'Sicherheit',
items: [
{ label: 'Verschluesselung', value: 'TLS Required', status: 'ok' },
{ label: 'Credential Storage', value: 'Encrypted', status: 'ok' },
{ label: 'Spam-Filter', value: 'SpamAssassin', status: 'ok' },
{ label: 'Virus-Scan', value: 'ClamAV', status: 'ok' },
],
},
{
category: 'KI-Features',
items: [
{ label: 'Kategorisierung', value: 'Geplant', status: 'warning' },
{ label: 'Zusammenfassung', value: 'Geplant', status: 'warning' },
{ label: 'Antwort-Vorschlaege', value: 'Geplant', status: 'warning' },
{ label: 'Sentiment Analysis', value: 'Geplant', status: 'warning' },
],
},
],
fullDocumentation: `
<h2>Unified Inbox - E-Mail Management</h2>
<h3>1. Uebersicht</h3>
<p>Der Unified Inbox aggregiert E-Mails aus mehreren Konten in einer zentralen Oberflaeche. Geplant ist die Integration von KI-Features fuer automatische Kategorisierung und Zusammenfassung.</p>
<h3>2. Architektur</h3>
<pre>
┌─────────────────────────────────────────────────────────────────────┐
│ Unified Inbox UI │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────────────────┐ │
│ │ Inbox │ │ Compose │ │ AI Summary (planned) │ │
│ └──────────────┘ └──────────────┘ └──────────────────────────┘ │
└─────────────────────────────┬───────────────────────────────────────┘
v
┌─────────────────────────────────────────────────────────────────────┐
│ Mail Service │
│ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
│ │ IMAP Sync │ │ SMTP Send │ │ Parser │ │ AI Pipeline│ │
│ └────────────┘ └────────────┘ └────────────┘ └────────────┘ │
└─────────────────────────────┬───────────────────────────────────────┘
┌───────────────────┴───────────────────┐
│ │
v v
┌─────────────────────────┐ ┌─────────────────────────┐
│ External Mail │ │ Internal Storage │
│ ├── Gmail │ │ ├── PostgreSQL │
│ ├── Outlook │ │ ├── MinIO (Attachments)│
│ └── Custom IMAP │ │ └── Qdrant (Embeddings)│
└─────────────────────────┘ └─────────────────────────┘
</pre>
<h3>3. Unterstuetzte Provider</h3>
<table>
<tr><th>Provider</th><th>Auth-Methode</th><th>Features</th></tr>
<tr><td>Gmail</td><td>OAuth2</td><td>Labels, Push-Sync</td></tr>
<tr><td>Outlook/365</td><td>OAuth2</td><td>Folders, Categories</td></tr>
<tr><td>Custom IMAP</td><td>User/Pass</td><td>Standard IMAP</td></tr>
<tr><td>Exchange</td><td>OAuth2/EWS</td><td>Geplant</td></tr>
</table>
<h3>4. API Endpoints</h3>
<table>
<tr><th>Endpoint</th><th>Methode</th><th>Beschreibung</th></tr>
<tr><td>/api/mail/accounts</td><td>GET</td><td>Konfigurierte Konten</td></tr>
<tr><td>/api/mail/accounts</td><td>POST</td><td>Konto hinzufuegen</td></tr>
<tr><td>/api/mail/messages</td><td>GET</td><td>E-Mails abrufen</td></tr>
<tr><td>/api/mail/messages</td><td>POST</td><td>E-Mail senden</td></tr>
<tr><td>/api/mail/messages/{id}</td><td>GET</td><td>E-Mail-Details</td></tr>
<tr><td>/api/mail/sync</td><td>POST</td><td>Manueller Sync</td></tr>
</table>
<h3>5. Sync-Strategie</h3>
<pre>
Initial Sync
v
┌───────────────────────────────────────┐
│ 1. Fetch Folder Structure │
│ 2. Sync Last 30 Days │
│ 3. Index Messages │
│ 4. Generate Embeddings (optional) │
└─────────────────┬─────────────────────┘
v
Incremental Sync (alle 5 Min)
v
┌───────────────────────────────────────┐
│ 1. Check for new Messages (IDLE) │
│ 2. Fetch new Messages │
│ 3. Update Index │
│ 4. Process AI Pipeline │
└───────────────────────────────────────┘
</pre>
<h3>6. KI-Pipeline (Geplant)</h3>
<table>
<tr><th>Feature</th><th>Modell</th><th>Beschreibung</th></tr>
<tr><td>Kategorisierung</td><td>Fine-tuned Classifier</td><td>Inbox, Support, Newsletter, etc.</td></tr>
<tr><td>Prioritaet</td><td>Sentiment + Rules</td><td>Hoch, Mittel, Niedrig</td></tr>
<tr><td>Zusammenfassung</td><td>GPT-4o-mini</td><td>Kurzfassung langer E-Mails</td></tr>
<tr><td>Antwort-Draft</td><td>GPT-4o</td><td>Vorgeschlagene Antworten</td></tr>
</table>
<h3>7. Sicherheit</h3>
<ul>
<li><strong>Credentials:</strong> AES-256 verschluesselt in DB</li>
<li><strong>OAuth Tokens:</strong> Refresh Token rotiert</li>
<li><strong>Transport:</strong> TLS 1.2+ required</li>
<li><strong>Attachments:</strong> Virus-Scan vor Speicherung</li>
<li><strong>Spam:</strong> SpamAssassin Score-basiert</li>
</ul>
<h3>8. Datenschutz</h3>
<table>
<tr><th>Aspekt</th><th>Massnahme</th></tr>
<tr><td>E-Mail-Inhalte</td><td>Lokal gespeichert, nicht an Dritte</td></tr>
<tr><td>KI-Verarbeitung</td><td>Opt-in, PII-Filterung</td></tr>
<tr><td>Retention</td><td>Spiegelt Provider-Einstellung</td></tr>
<tr><td>Loeschung</td><td>Sync mit Provider</td></tr>
</table>
<h3>9. Suche</h3>
<pre>
Suchanfrage
├── Volltext (PostgreSQL FTS)
│ └── Subject, Body, Sender
├── Semantisch (Qdrant - geplant)
│ └── Bedeutungsbasierte Suche
└── Filter
├── Datum
├── Konto
├── Folder
└── Has Attachment
</pre>
<h3>10. Troubleshooting</h3>
<table>
<tr><th>Problem</th><th>Ursache</th><th>Loesung</th></tr>
<tr><td>Sync fehlgeschlagen</td><td>Credentials abgelaufen</td><td>Re-Auth via OAuth</td></tr>
<tr><td>E-Mails fehlen</td><td>Folder nicht subscribed</td><td>Folder-Auswahl pruefen</td></tr>
<tr><td>Versand fehlgeschlagen</td><td>SMTP-Limit erreicht</td><td>Provider-Limits beachten</td></tr>
<tr><td>Langsamer Sync</td><td>Grosse Mailbox</td><td>Incremental Sync nutzen</td></tr>
</table>
`,
},
// SBOM
sbom: {
title: 'SBOM System-Info',
description: 'Software Bill of Materials fuer Compliance und Security.',
version: '1.0',
architecture: {
layers: [
{ title: 'SBOM Dashboard', components: ['Dependency Tree', 'License Overview', 'CVE Alerts'], color: '#3b82f6' },
{ title: 'Generators', components: ['Syft', 'Trivy', 'CycloneDX'], color: '#8b5cf6' },
{ title: 'Analysis', components: ['License Checker', 'CVE Matcher', 'Outdated Detector'], color: '#10b981' },
{ title: 'Reports', components: ['JSON', 'SPDX', 'CycloneDX'], color: '#f59e0b' },
],
},
features: [
{ name: 'Dependency Scanning', status: 'active', description: 'Automatische Erkennung' },
{ name: 'License Compliance', status: 'active', description: 'Lizenz-Pruefung' },
{ name: 'CVE Matching', status: 'active', description: 'Schwachstellen-Erkennung' },
{ name: 'Automatic Updates', status: 'planned', description: 'Dependabot-artige Updates' },
],
roadmap: [
{ phase: 'Phase 1: Generation (Q1)', priority: 'high', items: ['Multi-Format Export', 'CI/CD Integration', 'Container SBOM', 'Runtime SBOM'] },
{ phase: 'Phase 2: Analysis (Q2)', priority: 'medium', items: ['License Risk Scoring', 'Transitive Dependencies', 'Version Comparison', 'Diff Reports'] },
{ phase: 'Phase 3: Governance (Q3)', priority: 'low', items: ['Policy Engine', 'Approval Workflow', 'Audit Trail', 'Supplier Management'] },
],
technicalDetails: [
{ component: 'Generator', technology: 'Syft', version: '1.x', description: 'SBOM Creation' },
{ component: 'Format', technology: 'CycloneDX', version: '1.5', description: 'Standard Format' },
{ component: 'CVE DB', technology: 'NVD/OSV', description: 'Vulnerability Data' },
{ component: 'License DB', technology: 'SPDX', description: 'License Identifiers' },
],
auditInfo: [
{
category: 'SBOM Status',
items: [
{ label: 'Letzte Generierung', value: 'CI/CD', status: 'ok' },
{ label: 'Format', value: 'CycloneDX 1.5', status: 'ok' },
{ label: 'Komponenten', value: 'Alle erfasst', status: 'ok' },
{ label: 'Transitive Deps', value: 'Inkludiert', status: 'ok' },
],
},
{
category: 'Vulnerability Status',
items: [
{ label: 'Kritische CVEs', value: '0', status: 'ok' },
{ label: 'Hohe CVEs', value: '0', status: 'ok' },
{ label: 'Outdated Packages', value: 'Tracking', status: 'warning' },
{ label: 'EOL Dependencies', value: '0', status: 'ok' },
],
},
{
category: 'License Compliance',
items: [
{ label: 'Erlaubte Lizenzen', value: 'MIT, Apache, BSD', status: 'ok' },
{ label: 'Copyleft (GPL)', value: '0', status: 'ok' },
{ label: 'Unbekannte Lizenzen', value: '0', status: 'ok' },
{ label: 'Kommerzielle', value: 'Review erforderlich', status: 'warning' },
],
},
],
fullDocumentation: `
<h2>Software Bill of Materials (SBOM)</h2>
<h3>1. Uebersicht</h3>
<p>Das SBOM-Modul generiert und analysiert die vollstaendige Komponentenliste aller Software-Abhaengigkeiten. Es dient der Compliance, Sicherheit und Supply-Chain-Transparenz.</p>
<h3>2. SBOM-Generierung</h3>
<pre>
Source Code
v
┌───────────────────────────────────────────────────────────────┐
│ SBOM Generators │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │
│ │ Syft │ │ Trivy │ │ Native Tooling │ │
│ │ (Primary) │ │ (Validation)│ │ (npm, go mod, pip) │ │
│ └──────┬──────┘ └──────┬──────┘ └──────────┬──────────┘ │
└─────────┼────────────────┼────────────────────┼───────────────┘
│ │ │
└────────────────┴────────────────────┘
v
┌────────────────┐
│ CycloneDX │
│ Format │
└────────────────┘
</pre>
<h3>3. Erfasste Komponenten</h3>
<table>
<tr><th>Typ</th><th>Quelle</th><th>Beispiele</th></tr>
<tr><td>npm packages</td><td>package-lock.json</td><td>react, next, tailwindcss</td></tr>
<tr><td>Go modules</td><td>go.sum</td><td>gin, gorm, jwt-go</td></tr>
<tr><td>Python packages</td><td>requirements.txt</td><td>fastapi, pydantic, httpx</td></tr>
<tr><td>Container Images</td><td>Dockerfile</td><td>node:20-alpine, postgres:16</td></tr>
<tr><td>OS Packages</td><td>apk, apt</td><td>openssl, libpq</td></tr>
</table>
<h3>4. API Endpoints</h3>
<table>
<tr><th>Endpoint</th><th>Methode</th><th>Beschreibung</th></tr>
<tr><td>/api/sbom/generate</td><td>POST</td><td>SBOM neu generieren</td></tr>
<tr><td>/api/sbom/latest</td><td>GET</td><td>Aktuelles SBOM</td></tr>
<tr><td>/api/sbom/vulnerabilities</td><td>GET</td><td>CVE-Liste</td></tr>
<tr><td>/api/sbom/licenses</td><td>GET</td><td>Lizenz-Uebersicht</td></tr>
<tr><td>/api/sbom/diff</td><td>GET</td><td>Vergleich mit vorheriger Version</td></tr>
</table>
<h3>5. Vulnerability Scanning</h3>
<pre>
SBOM
v
┌────────────────────────────────────────┐
│ Vulnerability Databases │
│ ├── NVD (National Vulnerability DB) │
│ ├── OSV (Open Source Vulnerabilities)│
│ ├── GitHub Advisory Database │
│ └── Vendor-specific (npm, Go, PyPI) │
└──────────────────┬─────────────────────┘
v
┌────────────────────────────────────────┐
│ CVE Matching Engine │
│ ├── Version Range Checking │
│ ├── CVSS Scoring │
│ └── Exploitability Assessment │
└──────────────────┬─────────────────────┘
v
┌────────────────────────────────────────┐
│ Alert & Report │
│ ├── Kritisch: Sofort-Benachrichtigung│
│ ├── Hoch: Tages-Report │
│ └── Mittel/Niedrig: Wochen-Report │
└────────────────────────────────────────┘
</pre>
<h3>6. License Compliance</h3>
<table>
<tr><th>Kategorie</th><th>Lizenzen</th><th>Status</th></tr>
<tr><td>Permissive (erlaubt)</td><td>MIT, Apache 2.0, BSD, ISC</td><td>✓ OK</td></tr>
<tr><td>Weak Copyleft</td><td>LGPL, MPL</td><td>⚠ Review</td></tr>
<tr><td>Strong Copyleft</td><td>GPL, AGPL</td><td>✗ Nicht erlaubt</td></tr>
<tr><td>Proprietaer</td><td>Commercial</td><td>⚠ Genehmigung</td></tr>
</table>
<h3>7. CI/CD Integration</h3>
<pre>
CI Pipeline
├── Build Stage
│ └── SBOM generieren
├── Security Stage
│ ├── CVE Scan
│ └── License Check
├── Gate
│ ├── Critical CVE → Block
│ ├── GPL License → Block
│ └── High CVE → Warning
└── Publish Stage
└── SBOM archivieren
</pre>
<h3>8. SBOM Format (CycloneDX)</h3>
<pre>
{
"bomFormat": "CycloneDX",
"specVersion": "1.5",
"version": 1,
"metadata": {
"timestamp": "2025-01-14T10:00:00Z",
"component": {
"name": "breakpilot-pwa",
"version": "1.0.0"
}
},
"components": [
{
"type": "library",
"name": "react",
"version": "19.0.0",
"purl": "pkg:npm/react@19.0.0",
"licenses": [{"id": "MIT"}],
"hashes": [{"alg": "SHA-256", "content": "..."}]
}
]
}
</pre>
<h3>9. Diff-Report</h3>
<table>
<tr><th>Aenderung</th><th>Details</th><th>Risiko</th></tr>
<tr><td>Neu hinzugefuegt</td><td>Package + Version</td><td>License/CVE Check</td></tr>
<tr><td>Aktualisiert</td><td>Alte → Neue Version</td><td>Breaking Changes</td></tr>
<tr><td>Entfernt</td><td>Package entfernt</td><td>Dependency Check</td></tr>
<tr><td>CVE behoben</td><td>CVE-ID</td><td>Positiv</td></tr>
</table>
<h3>10. Aufbewahrung & Compliance</h3>
<ul>
<li><strong>Retention:</strong> 5 Jahre (Compliance)</li>
<li><strong>Format:</strong> JSON + PDF Report</li>
<li><strong>Signierung:</strong> Digital signiert</li>
<li><strong>Audit:</strong> Jederzeit abrufbar</li>
</ul>
`,
},
// Brandbook
brandbook: {
title: 'Brandbook System-Info',
description: 'Corporate Design Guidelines und Style Guide.',
version: '1.0',
architecture: {
layers: [
{ title: 'Style Guide UI', components: ['Colors', 'Typography', 'Components'], color: '#3b82f6' },
{ title: 'Design Tokens', components: ['CSS Variables', 'Tailwind Config', 'Figma Tokens'], color: '#8b5cf6' },
{ title: 'Assets', components: ['Logo', 'Icons', 'Illustrations'], color: '#10b981' },
{ title: 'Documentation', components: ['Usage Guidelines', 'Examples', 'Do/Donts'], color: '#f59e0b' },
],
},
features: [
{ name: 'Farb-Palette', status: 'active', description: 'Primaer- und Sekundaerfarben' },
{ name: 'Typografie', status: 'active', description: 'Schriftarten und -groessen' },
{ name: 'Komponenten-Bibliothek', status: 'active', description: 'UI-Komponenten-Dokumentation' },
{ name: 'Figma Sync', status: 'planned', description: 'Design Token Synchronisation' },
],
roadmap: [
{ phase: 'Phase 1: Foundation (Q1)', priority: 'high', items: ['Design Tokens', 'Color System', 'Typography Scale', 'Spacing System'] },
{ phase: 'Phase 2: Components (Q2)', priority: 'medium', items: ['Button Variants', 'Form Elements', 'Cards', 'Navigation'] },
{ phase: 'Phase 3: Templates (Q3)', priority: 'low', items: ['Page Templates', 'E-Mail Templates', 'Print Templates', 'Social Media'] },
],
technicalDetails: [
{ component: 'CSS', technology: 'Tailwind CSS', version: '3.x', description: 'Utility Classes' },
{ component: 'Icons', technology: 'Heroicons', version: '2.x', description: 'SVG Icons' },
{ component: 'Fonts', technology: 'Inter/System', description: 'Web Fonts' },
{ component: 'Design', technology: 'Figma', description: 'Design Source' },
],
auditInfo: [
{
category: 'Design System Status',
items: [
{ label: 'Farbpalette', value: 'Definiert', status: 'ok' },
{ label: 'Typografie', value: 'Definiert', status: 'ok' },
{ label: 'Komponenten', value: '15+ Komponenten', status: 'ok' },
{ label: 'Figma Sync', value: 'Geplant', status: 'warning' },
],
},
{
category: 'Dokumentation',
items: [
{ label: 'Usage Guidelines', value: 'Vorhanden', status: 'ok' },
{ label: 'Code Examples', value: 'Vorhanden', status: 'ok' },
{ label: 'Do/Donts', value: 'Vorhanden', status: 'ok' },
{ label: 'Accessibility', value: 'WCAG 2.1 AA', status: 'ok' },
],
},
],
fullDocumentation: `
<h2>Brandbook & Design System</h2>
<h3>1. Uebersicht</h3>
<p>Das Brandbook definiert alle visuellen Elemente der BreakPilot-Marke. Es dient als zentrale Referenz fuer konsistentes Design ueber alle Produkte und Plattformen.</p>
<h3>2. Farbpalette</h3>
<table>
<tr><th>Name</th><th>Hex</th><th>Verwendung</th></tr>
<tr><td>Primary</td><td>#3B82F6</td><td>Buttons, Links, Akzente</td></tr>
<tr><td>Primary Dark</td><td>#1E40AF</td><td>Hover States</td></tr>
<tr><td>Secondary</td><td>#8B5CF6</td><td>Sekundaere Aktionen</td></tr>
<tr><td>Success</td><td>#10B981</td><td>Erfolg, Bestaetigung</td></tr>
<tr><td>Warning</td><td>#F59E0B</td><td>Warnungen</td></tr>
<tr><td>Error</td><td>#EF4444</td><td>Fehler, Loeschung</td></tr>
<tr><td>Slate 900</td><td>#0F172A</td><td>Text, Headings</td></tr>
<tr><td>Slate 500</td><td>#64748B</td><td>Sekundaerer Text</td></tr>
</table>
<h3>3. Typografie</h3>
<pre>
Font Family: Inter (System Fallback)
Scale:
├── Display: 2.25rem (36px) / Bold
├── H1: 1.875rem (30px) / Semibold
├── H2: 1.5rem (24px) / Semibold
├── H3: 1.25rem (20px) / Medium
├── Body: 1rem (16px) / Regular
├── Small: 0.875rem (14px) / Regular
└── Caption: 0.75rem (12px) / Regular
</pre>
<h3>4. Spacing System</h3>
<table>
<tr><th>Token</th><th>Wert</th><th>Verwendung</th></tr>
<tr><td>space-1</td><td>4px</td><td>Inline-Elemente</td></tr>
<tr><td>space-2</td><td>8px</td><td>Eng verwandte Elemente</td></tr>
<tr><td>space-3</td><td>12px</td><td>Standard-Gap</td></tr>
<tr><td>space-4</td><td>16px</td><td>Sections</td></tr>
<tr><td>space-6</td><td>24px</td><td>Grosse Sections</td></tr>
<tr><td>space-8</td><td>32px</td><td>Page Sections</td></tr>
</table>
<h3>5. Komponenten-Bibliothek</h3>
<pre>
Components/
├── Buttons/
│ ├── Primary Button
│ ├── Secondary Button
│ ├── Ghost Button
│ └── Icon Button
├── Forms/
│ ├── Input
│ ├── Select
│ ├── Checkbox
│ └── Radio
├── Feedback/
│ ├── Alert
│ ├── Toast
│ └── Badge
├── Layout/
│ ├── Card
│ ├── Modal
│ └── Sidebar
└── Navigation/
├── Tabs
├── Breadcrumb
└── Pagination
</pre>
<h3>6. Icon-System</h3>
<ul>
<li><strong>Library:</strong> Heroicons v2</li>
<li><strong>Style:</strong> Outline (24px), Solid (20px)</li>
<li><strong>Farbe:</strong> currentColor (erbt Text-Farbe)</li>
</ul>
<h3>7. Logo-Verwendung</h3>
<table>
<tr><th>Variante</th><th>Verwendung</th><th>Min. Groesse</th></tr>
<tr><td>Primary (Farbe)</td><td>Helle Hintergruende</td><td>120px breit</td></tr>
<tr><td>White</td><td>Dunkle Hintergruende</td><td>120px breit</td></tr>
<tr><td>Icon Only</td><td>Favicon, App Icon</td><td>32px</td></tr>
</table>
<h3>8. Accessibility</h3>
<ul>
<li><strong>Kontrast:</strong> Minimum 4.5:1 fuer Text</li>
<li><strong>Focus States:</strong> Sichtbarer Fokusring</li>
<li><strong>Keyboard:</strong> Alle interaktiven Elemente erreichbar</li>
<li><strong>Screen Reader:</strong> ARIA Labels vorhanden</li>
</ul>
<h3>9. Do's and Don'ts</h3>
<pre>
✓ Do:
- Konsistente Spacing verwenden
- Primary Color fuer CTAs
- Ausreichend Weissraum
- Hierarchie durch Typografie
✗ Don't:
- Farben mischen
- Logo verzerren
- Zu viele Schriftgroessen
- Zu wenig Kontrast
</pre>
<h3>10. Design Token Export</h3>
<p>Tokens sind verfuegbar als:</p>
<ul>
<li>CSS Custom Properties</li>
<li>Tailwind Config</li>
<li>Figma Variables (geplant)</li>
<li>JSON Token File</li>
</ul>
`,
},
// DSMS (Datenschutz-Management-System)
dsms: {
title: 'DSMS System-Info',
description: 'Datenschutz-Management-System fuer DSGVO-Compliance.',
version: '1.0',
privacyNotes: [
'Zentrale Verwaltung aller Datenschutz-Prozesse',
'Verzeichnis der Verarbeitungstaetigkeiten (VVT)',
'TOM-Dokumentation',
'Datenschutz-Folgenabschaetzung (DSFA)',
],
architecture: {
layers: [
{ title: 'DSMS Dashboard', components: ['VVT Editor', 'TOM Manager', 'DSFA Tool'], color: '#3b82f6' },
{ title: 'Compliance Engine', components: ['Risk Assessment', 'Gap Analysis', 'Audit Trail'], color: '#8b5cf6' },
{ title: 'Document Management', components: ['Policies', 'Procedures', 'Records'], color: '#10b981' },
{ title: 'Reporting', components: ['Compliance Reports', 'DPA Dashboard', 'Exports'], color: '#f59e0b' },
],
},
features: [
{ name: 'VVT-Verwaltung', status: 'active', description: 'Verzeichnis der Verarbeitungstaetigkeiten' },
{ name: 'TOM-Dokumentation', status: 'active', description: 'Technische und organisatorische Massnahmen' },
{ name: 'DSFA-Tool', status: 'planned', description: 'Datenschutz-Folgenabschaetzung' },
{ name: 'Audit-Management', status: 'planned', description: 'Interne und externe Audits' },
],
roadmap: [
{ phase: 'Phase 1: Dokumentation (Q1)', priority: 'high', items: ['VVT-Erstellung', 'TOM-Katalog', 'Policy-Templates', 'Rollenkonzept'] },
{ phase: 'Phase 2: Compliance (Q2)', priority: 'high', items: ['Gap-Analyse', 'Risk-Scoring', 'Massnahmen-Tracking', 'Deadline-Management'] },
{ phase: 'Phase 3: Automation (Q3)', priority: 'medium', items: ['Auto-Assessments', 'Compliance-Monitoring', 'Alert-System', 'Report-Generator'] },
],
technicalDetails: [
{ component: 'Framework', technology: 'DSGVO/GDPR', description: 'EU-Verordnung' },
{ component: 'Standards', technology: 'ISO 27701', description: 'Privacy Management' },
{ component: 'Storage', technology: 'PostgreSQL', description: 'Verschluesselt' },
{ component: 'Export', technology: 'PDF/Excel', description: 'Audit-Reports' },
],
auditInfo: [
{
category: 'DSGVO-Dokumentation',
items: [
{ label: 'VVT vorhanden', value: 'Ja', status: 'ok' },
{ label: 'TOM dokumentiert', value: 'Ja', status: 'ok' },
{ label: 'DSFA durchgefuehrt', value: 'Geplant', status: 'warning' },
{ label: 'Auftragsverarbeitung', value: 'Dokumentiert', status: 'ok' },
],
},
{
category: 'Organisatorisch',
items: [
{ label: 'DSB benannt', value: 'Ja', status: 'ok' },
{ label: 'Schulungen', value: 'Jaehrlich', status: 'ok' },
{ label: 'Incident Response', value: 'Definiert', status: 'ok' },
{ label: 'Policies aktuell', value: 'Review faellig', status: 'warning' },
],
},
{
category: 'Technisch',
items: [
{ label: 'Verschluesselung', value: 'AES-256', status: 'ok' },
{ label: 'Zugriffskontrolle', value: 'RBAC', status: 'ok' },
{ label: 'Logging', value: 'Aktiviert', status: 'ok' },
{ label: 'Backup', value: 'Taeglich', status: 'ok' },
],
},
],
fullDocumentation: `
<h2>Datenschutz-Management-System (DSMS)</h2>
<h3>1. Uebersicht</h3>
<p>Das DSMS bildet alle datenschutzrelevanten Prozesse und Dokumentationen ab. Es dient der Nachweispflicht gemaess DSGVO Art. 5 Abs. 2 (Rechenschaftspflicht).</p>
<h3>2. Kernkomponenten</h3>
<pre>
DSMS
├── Verzeichnis der Verarbeitungstaetigkeiten (VVT)
│ └── Art. 30 DSGVO
├── Technisch-Organisatorische Massnahmen (TOM)
│ └── Art. 32 DSGVO
├── Datenschutz-Folgenabschaetzung (DSFA)
│ └── Art. 35 DSGVO
├── Auftragsverarbeitung (AVV)
│ └── Art. 28 DSGVO
└── Policies & Schulungen
└── Interne Richtlinien
</pre>
<h3>3. VVT-Struktur</h3>
<table>
<tr><th>Feld</th><th>Beschreibung</th><th>Beispiel</th></tr>
<tr><td>Bezeichnung</td><td>Name der Verarbeitung</td><td>Nutzerregistrierung</td></tr>
<tr><td>Zweck</td><td>Verarbeitungszweck</td><td>Vertragserfuellung</td></tr>
<tr><td>Rechtsgrundlage</td><td>Art. 6 DSGVO</td><td>Art. 6 Abs. 1 lit. b</td></tr>
<tr><td>Kategorien Betroffener</td><td>Personengruppen</td><td>Schueler, Lehrer</td></tr>
<tr><td>Datenkategorien</td><td>Art der Daten</td><td>Stammdaten, E-Mail</td></tr>
<tr><td>Empfaenger</td><td>Datenempfaenger</td><td>Intern, Auftragsverarbeiter</td></tr>
<tr><td>Drittlandtransfer</td><td>Uebermittlung</td><td>Nein / Mit SCC</td></tr>
<tr><td>Loeschfrist</td><td>Aufbewahrung</td><td>Nach Vertragsende</td></tr>
</table>
<h3>4. TOM-Katalog</h3>
<pre>
Technisch-Organisatorische Massnahmen:
Vertraulichkeit (Art. 32 Abs. 1 lit. b):
├── Zutrittskontrolle: Rechenzentrum gesichert
├── Zugangskontrolle: SSH-Keys, MFA
├── Zugriffskontrolle: RBAC, Least Privilege
└── Weitergabekontrolle: TLS 1.3, Verschluesselung
Integritaet (Art. 32 Abs. 1 lit. b):
├── Eingabekontrolle: Audit-Logs
├── Trennungskontrolle: Multi-Tenant Isolation
└── Uebertragungskontrolle: API Authentication
Verfuegbarkeit (Art. 32 Abs. 1 lit. b):
├── Backup: Taeglich, 30 Tage Retention
├── Redundanz: Multi-AZ Deployment
└── Notfallplan: Dokumentiert
</pre>
<h3>5. DSFA-Prozess</h3>
<table>
<tr><th>Schritt</th><th>Beschreibung</th><th>Verantwortlich</th></tr>
<tr><td>1. Schwellwert-Analyse</td><td>DSFA erforderlich?</td><td>DSB</td></tr>
<tr><td>2. Beschreibung</td><td>Verarbeitung dokumentieren</td><td>Fachbereich</td></tr>
<tr><td>3. Risikobewertung</td><td>Eintrittswahrscheinlichkeit x Schaden</td><td>DSB + IT</td></tr>
<tr><td>4. Massnahmen</td><td>Risikominimierung</td><td>IT</td></tr>
<tr><td>5. Restrisiko</td><td>Bewertung, ggf. Konsultation</td><td>DSB</td></tr>
<tr><td>6. Dokumentation</td><td>DSFA-Report</td><td>DSB</td></tr>
</table>
<h3>6. Auftragsverarbeitung</h3>
<pre>
Auftragsverarbeiter-Uebersicht:
┌────────────────────────────────────────────────────┐
│ Anbieter │ Zweck │ Standort │ AVV │
├────────────────────────────────────────────────────┤
│ Hetzner │ Hosting │ DE │ ✓ │
│ vast.ai │ GPU Computing │ US/EU │ ✓ │
│ OpenAI │ LLM API │ US │ SCC │
│ Anthropic │ LLM API │ US │ SCC │
└────────────────────────────────────────────────────┘
</pre>
<h3>7. Schulungen</h3>
<ul>
<li><strong>Onboarding:</strong> Datenschutz-Grundlagen (Pflicht)</li>
<li><strong>Jaehrlich:</strong> Auffrischung + aktuelle Themen</li>
<li><strong>Spezial:</strong> IT-Sicherheit fuer Entwickler</li>
<li><strong>Nachweis:</strong> Dokumentierte Teilnahme</li>
</ul>
<h3>8. Incident Response</h3>
<pre>
Datenpanne erkannt
v
┌──────────────────────────────────────┐
│ 1. Sofortmassnahmen (Containment) │
│ - Zugriff sperren │
│ - Beweis sichern │
└─────────────────┬────────────────────┘
v
┌──────────────────────────────────────┐
│ 2. Bewertung (24h) │
│ - Schwere einschaetzen │
│ - Betroffene identifizieren │
└─────────────────┬────────────────────┘
v
┌──────────────────────────────────────┐
│ 3. Meldung (72h) │
│ - Aufsichtsbehoerde (Art. 33) │
│ - Betroffene (Art. 34) │
└─────────────────┬────────────────────┘
v
┌──────────────────────────────────────┐
│ 4. Nachbereitung │
│ - Root Cause Analysis │
│ - Massnahmen umsetzen │
│ - Dokumentation │
└──────────────────────────────────────┘
</pre>
<h3>9. Compliance-Dashboard</h3>
<table>
<tr><th>Bereich</th><th>Status</th><th>Naechste Pruefung</th></tr>
<tr><td>VVT</td><td>✓ Aktuell</td><td>Quartalsweise</td></tr>
<tr><td>TOM</td><td>✓ Aktuell</td><td>Jaehrlich</td></tr>
<tr><td>AVV</td><td>✓ Aktuell</td><td>Bei Aenderung</td></tr>
<tr><td>Schulungen</td><td>✓ Durchgefuehrt</td><td>Jaehrlich</td></tr>
<tr><td>DSFA</td><td>⚠ Offen</td><td>Bei neuer Verarbeitung</td></tr>
</table>
<h3>10. Export & Reporting</h3>
<ul>
<li><strong>VVT-Export:</strong> PDF, Excel</li>
<li><strong>TOM-Nachweis:</strong> PDF mit Unterschrift</li>
<li><strong>DSFA-Report:</strong> PDF</li>
<li><strong>Audit-Report:</strong> Compliance-Status</li>
</ul>
`,
},
// PCA Platform
pcaPlatform: {
title: 'PCA Platform System-Info',
description: 'Partner Content Access Platform fuer Content-Partner.',
version: '1.0',
architecture: {
layers: [
{ title: 'Partner Portal', components: ['Dashboard', 'Content Upload', 'Analytics'], color: '#3b82f6' },
{ title: 'Content Pipeline', components: ['Ingestion', 'Processing', 'Quality Check'], color: '#8b5cf6' },
{ title: 'Distribution', components: ['CDN', 'API Access', 'Embed Codes'], color: '#10b981' },
{ title: 'Monetization', components: ['Usage Tracking', 'Revenue Share', 'Invoicing'], color: '#f59e0b' },
],
},
features: [
{ name: 'Partner Onboarding', status: 'active', description: 'Self-Service Registrierung' },
{ name: 'Content Upload', status: 'active', description: 'Bulk-Upload und Metadaten' },
{ name: 'Analytics Dashboard', status: 'active', description: 'Nutzungsstatistiken' },
{ name: 'Revenue Tracking', status: 'planned', description: 'Umsatzbeteiligung' },
],
roadmap: [
{ phase: 'Phase 1: Core (Q1)', priority: 'high', items: ['Partner-Registrierung', 'Content-Upload', 'Basic Analytics', 'API Documentation'] },
{ phase: 'Phase 2: Quality (Q2)', priority: 'medium', items: ['Auto-Transcoding', 'Quality Gates', 'Metadata Validation', 'Preview System'] },
{ phase: 'Phase 3: Monetization (Q3)', priority: 'medium', items: ['Usage-based Billing', 'Revenue Reports', 'Payment Integration', 'Contract Management'] },
],
technicalDetails: [
{ component: 'Upload', technology: 'TUS Protocol', description: 'Resumable Uploads' },
{ component: 'Storage', technology: 'MinIO/S3', description: 'Object Storage' },
{ component: 'CDN', technology: 'CloudFlare', description: 'Content Delivery' },
{ component: 'API', technology: 'REST/GraphQL', description: 'Partner Access' },
],
auditInfo: [
{
category: 'Partner-Status',
items: [
{ label: 'Aktive Partner', value: 'Variabel', status: 'ok' },
{ label: 'Pending Approvals', value: 'Dashboard', status: 'ok' },
{ label: 'Content-Uploads', value: 'Tracking', status: 'ok' },
{ label: 'API-Nutzung', value: 'Metered', status: 'ok' },
],
},
{
category: 'Content Pipeline',
items: [
{ label: 'Upload-Status', value: 'Aktiv', status: 'ok' },
{ label: 'Transcoding', value: 'Automatisch', status: 'ok' },
{ label: 'Quality Gates', value: 'Aktiviert', status: 'ok' },
{ label: 'CDN Distribution', value: 'CloudFlare', status: 'ok' },
],
},
{
category: 'Monetarisierung',
items: [
{ label: 'Usage Tracking', value: 'Aktiv', status: 'ok' },
{ label: 'Revenue Share', value: 'Geplant', status: 'warning' },
{ label: 'Invoicing', value: 'Geplant', status: 'warning' },
{ label: 'Payout', value: 'Geplant', status: 'warning' },
],
},
],
fullDocumentation: `
<h2>Partner Content Access (PCA) Platform</h2>
<h3>1. Uebersicht</h3>
<p>Die PCA-Plattform ermoeglicht Content-Partnern das Hochladen, Verwalten und Monetarisieren ihrer Bildungsinhalte. Sie bietet Self-Service-Tools fuer Onboarding und Analytics.</p>
<h3>2. Partner-Workflow</h3>
<pre>
Partner Journey:
Registrierung
v
┌─────────────────────────┐
│ Onboarding Wizard │
│ - Firmendaten │
│ - Vertrag / AGB │
│ - API-Key Generierung │
└───────────┬─────────────┘
v
┌─────────────────────────┐
│ Content Upload │
│ - Bulk Upload │
│ - Metadata Editor │
│ - Preview │
└───────────┬─────────────┘
v
┌─────────────────────────┐
│ Quality Check │
│ - Format Validation │
│ - Metadata Check │
│ - Review (optional) │
└───────────┬─────────────┘
v
┌─────────────────────────┐
│ Publishing │
│ - CDN Distribution │
│ - API Access │
│ - Embed Codes │
└───────────┬─────────────┘
v
┌─────────────────────────┐
│ Analytics & Payout │
│ - Views/Downloads │
│ - Revenue Tracking │
│ - Monthly Reports │
└─────────────────────────┘
</pre>
<h3>3. Content-Typen</h3>
<table>
<tr><th>Typ</th><th>Formate</th><th>Max. Groesse</th><th>Processing</th></tr>
<tr><td>Video</td><td>MP4, MOV, MKV</td><td>5 GB</td><td>Transcoding</td></tr>
<tr><td>Audio</td><td>MP3, WAV, FLAC</td><td>500 MB</td><td>Normalisierung</td></tr>
<tr><td>Dokument</td><td>PDF, DOCX</td><td>100 MB</td><td>Preview Gen</td></tr>
<tr><td>Bild</td><td>JPG, PNG, WEBP</td><td>50 MB</td><td>Thumbnails</td></tr>
<tr><td>Interaktiv</td><td>H5P, SCORM</td><td>200 MB</td><td>Packaging</td></tr>
</table>
<h3>4. API Endpoints</h3>
<table>
<tr><th>Endpoint</th><th>Methode</th><th>Beschreibung</th></tr>
<tr><td>/api/pca/partners</td><td>GET</td><td>Partner-Liste</td></tr>
<tr><td>/api/pca/partners/{id}</td><td>GET</td><td>Partner-Details</td></tr>
<tr><td>/api/pca/content</td><td>POST</td><td>Content hochladen</td></tr>
<tr><td>/api/pca/content/{id}</td><td>GET</td><td>Content-Details</td></tr>
<tr><td>/api/pca/analytics</td><td>GET</td><td>Nutzungsstatistiken</td></tr>
<tr><td>/api/pca/embed/{id}</td><td>GET</td><td>Embed-Code</td></tr>
</table>
<h3>5. Upload-Protokoll (TUS)</h3>
<pre>
Resumable Upload Flow:
1. POST /uploads
→ Location: /uploads/abc123
2. PATCH /uploads/abc123
Upload-Offset: 0
Content-Length: 1000000
[Binary Data]
3. HEAD /uploads/abc123
Upload-Offset: 1000000
Upload-Length: 5000000
4. Repeat PATCH until complete
5. Processing triggered
</pre>
<h3>6. Metadaten-Schema</h3>
<pre>
{
"title": "Mathematik Grundlagen",
"description": "Einfuehrung in...",
"subject": "Mathematik",
"grade_level": ["5", "6", "7"],
"content_type": "video",
"duration_minutes": 15,
"language": "de",
"license": "CC-BY-SA-4.0",
"tags": ["Algebra", "Grundlagen"],
"author": {
"name": "Max Mustermann",
"organization": "Muster Verlag"
}
}
</pre>
<h3>7. Revenue Model</h3>
<table>
<tr><th>Modell</th><th>Beschreibung</th><th>Split</th></tr>
<tr><td>Views</td><td>Pro Aufruf</td><td>70/30</td></tr>
<tr><td>Downloads</td><td>Pro Download</td><td>70/30</td></tr>
<tr><td>Subscription</td><td>Anteilig</td><td>60/40</td></tr>
<tr><td>Enterprise</td><td>Lizenz</td><td>Individuell</td></tr>
</table>
<h3>8. Quality Gates</h3>
<ul>
<li><strong>Format:</strong> Unterstuetzte Formate, Codec-Check</li>
<li><strong>Metadaten:</strong> Pflichtfelder ausgefuellt</li>
<li><strong>Qualitaet:</strong> Min. 720p fuer Video</li>
<li><strong>Lizenz:</strong> Gueltige Lizenzangabe</li>
<li><strong>Moderation:</strong> Optionale manuelle Pruefung</li>
</ul>
<h3>9. Analytics-Dashboard</h3>
<table>
<tr><th>Metrik</th><th>Beschreibung</th><th>Granularitaet</th></tr>
<tr><td>Views</td><td>Gesamtaufrufe</td><td>Taeglich</td></tr>
<tr><td>Unique Views</td><td>Eindeutige Nutzer</td><td>Taeglich</td></tr>
<tr><td>Watch Time</td><td>Gesamtdauer</td><td>Pro Content</td></tr>
<tr><td>Completion Rate</td><td>% bis Ende</td><td>Pro Content</td></tr>
<tr><td>Downloads</td><td>Anzahl Downloads</td><td>Taeglich</td></tr>
</table>
<h3>10. Partner-Support</h3>
<pre>
Support-Kanaele:
├── Dokumentation (Self-Service)
├── API Reference (OpenAPI)
├── E-Mail Support (48h SLA)
├── Dedicated Manager (Enterprise)
└── Status Page (status.example.com)
</pre>
`,
},
// Education Search
eduSearch: {
title: 'Education Search System-Info',
description: 'Semantische Suche fuer Bildungsinhalte und Lehrmaterialien.',
version: '2.0',
architecture: {
layers: [
{ title: 'Search UI', components: ['Search Bar', 'Filters', 'Results Grid'], color: '#3b82f6' },
{ title: 'Search Engine', components: ['Query Parser', 'Ranking', 'Faceting'], color: '#8b5cf6' },
{ title: 'Indexing', components: ['Crawler', 'Text Extraction', 'Embedding Generator'], color: '#10b981' },
{ title: 'Data Layer', components: ['Qdrant', 'PostgreSQL', 'Elasticsearch'], color: '#f59e0b' },
],
},
features: [
{ name: 'Semantische Suche', status: 'active', description: 'Bedeutungsbasierte Suche mit Embeddings' },
{ name: 'Facettensuche', status: 'active', description: 'Filter nach Fach, Klassenstufe, Typ' },
{ name: 'Synonymerkennung', status: 'active', description: 'Automatische Begriffsexpansion' },
{ name: 'Personalisierung', status: 'planned', description: 'Nutzerspezifische Ergebnisse' },
],
roadmap: [
{ phase: 'Phase 1: Quality (Q1)', priority: 'high', items: ['Relevanz-Tuning', 'Spell Correction', 'Query Suggestions', 'Did-you-mean'] },
{ phase: 'Phase 2: Features (Q2)', priority: 'medium', items: ['Saved Searches', 'Search History', 'Alerts', 'Export Results'] },
{ phase: 'Phase 3: AI (Q3)', priority: 'medium', items: ['Query Understanding', 'Intent Classification', 'Answer Extraction', 'Knowledge Graph'] },
],
technicalDetails: [
{ component: 'Vector DB', technology: 'Qdrant', version: '1.12+', description: 'Semantic Search' },
{ component: 'Embeddings', technology: 'OpenAI', description: 'text-embedding-3-large' },
{ component: 'Full-Text', technology: 'PostgreSQL FTS', description: 'Keyword Search' },
{ component: 'UI', technology: 'React', description: 'Search Components' },
],
auditInfo: [
{
category: 'Search Performance',
items: [
{ label: 'Avg. Latency', value: '< 200ms', status: 'ok' },
{ label: 'Index Size', value: 'Skalierbar', status: 'ok' },
{ label: 'Uptime', value: '> 99.9%', status: 'ok' },
{ label: 'Cache Hit Ratio', value: '> 85%', status: 'ok' },
],
},
{
category: 'Content Coverage',
items: [
{ label: 'Indizierte Dokumente', value: 'Tracking', status: 'ok' },
{ label: 'Faecherabdeckung', value: 'Alle Kernfaecher', status: 'ok' },
{ label: 'Klassenstufen', value: '1-13', status: 'ok' },
{ label: 'Aktualitaet', value: 'Taeglich', status: 'ok' },
],
},
{
category: 'AI Features',
items: [
{ label: 'Semantic Search', value: 'Aktiv', status: 'ok' },
{ label: 'Embedding Model', value: 'text-embedding-3', status: 'ok' },
{ label: 'Query Expansion', value: 'Geplant', status: 'warning' },
{ label: 'Personalisierung', value: 'Geplant', status: 'warning' },
],
},
],
fullDocumentation: `
<h2>Education Search - Semantische Bildungssuche</h2>
<h3>1. Uebersicht</h3>
<p>Die Education Search kombiniert klassische Volltextsuche mit semantischer Vektorsuche fuer hochrelevante Suchergebnisse in Bildungsinhalten.</p>
<h3>2. Such-Architektur</h3>
<pre>
Suchanfrage
v
┌─────────────────────────────────────────────────────────────────┐
│ Query Processor │
│ ┌────────────────┐ ┌────────────────┐ ┌────────────────────┐│
│ │ Tokenization │ │ Spell Check │ │ Query Expansion ││
│ └────────────────┘ └────────────────┘ └────────────────────┘│
└──────────────────────────────┬──────────────────────────────────┘
┌────────────────┴────────────────┐
│ │
v v
┌─────────────────────────┐ ┌─────────────────────────┐
│ Keyword Search │ │ Semantic Search │
│ (PostgreSQL FTS) │ │ (Qdrant) │
│ ┌─────────────────┐ │ │ ┌─────────────────┐ │
│ │ GIN Index │ │ │ │ HNSW Index │ │
│ └─────────────────┘ │ │ └─────────────────┘ │
└───────────┬─────────────┘ └───────────┬─────────────┘
│ │
└─────────────────┬───────────────┘
v
┌───────────────────────┐
│ Result Fusion │
│ (RRF Algorithm) │
└───────────┬───────────┘
v
┌───────────────────────┐
│ Re-Ranking │
│ (Relevance Model) │
└───────────────────────┘
</pre>
<h3>3. Facetten-Filter</h3>
<table>
<tr><th>Facette</th><th>Optionen</th><th>Typ</th></tr>
<tr><td>Fach</td><td>Mathematik, Deutsch, Englisch, ...</td><td>Multi-Select</td></tr>
<tr><td>Klassenstufe</td><td>1-13</td><td>Range</td></tr>
<tr><td>Content-Typ</td><td>Video, PDF, Arbeitsblatt, ...</td><td>Multi-Select</td></tr>
<tr><td>Lizenz</td><td>CC-BY, CC-BY-SA, ...</td><td>Multi-Select</td></tr>
<tr><td>Sprache</td><td>DE, EN, FR, ...</td><td>Single-Select</td></tr>
</table>
<h3>4. API Endpoints</h3>
<table>
<tr><th>Endpoint</th><th>Methode</th><th>Beschreibung</th></tr>
<tr><td>/api/edu-search/search</td><td>GET</td><td>Suche ausfuehren</td></tr>
<tr><td>/api/edu-search/suggest</td><td>GET</td><td>Autocomplete</td></tr>
<tr><td>/api/edu-search/facets</td><td>GET</td><td>Facetten-Counts</td></tr>
<tr><td>/api/edu-search/similar/{id}</td><td>GET</td><td>Aehnliche Inhalte</td></tr>
</table>
<h3>5. Embedding-Pipeline</h3>
<pre>
Neues Dokument
v
┌─────────────────────────────┐
│ 1. Text Extraction │
│ - PDF: PyMuPDF │
│ - Video: Whisper │
│ - HTML: BeautifulSoup │
└───────────┬─────────────────┘
v
┌─────────────────────────────┐
│ 2. Chunking │
│ - 512 Token Chunks │
│ - 50 Token Overlap │
└───────────┬─────────────────┘
v
┌─────────────────────────────┐
│ 3. Embedding Generation │
│ - OpenAI text-embedding │
│ - 3072 Dimensions │
└───────────┬─────────────────┘
v
┌─────────────────────────────┐
│ 4. Vector Storage │
│ - Qdrant Collection │
│ - HNSW Index │
└─────────────────────────────┘
</pre>
<h3>6. Relevanz-Tuning</h3>
<table>
<tr><th>Signal</th><th>Gewicht</th><th>Beschreibung</th></tr>
<tr><td>Titel-Match</td><td>3.0x</td><td>Query im Titel</td></tr>
<tr><td>Semantic Score</td><td>1.5x</td><td>Cosine Similarity</td></tr>
<tr><td>Freshness</td><td>1.2x</td><td>Neuere Inhalte</td></tr>
<tr><td>Popularity</td><td>1.1x</td><td>Views/Downloads</td></tr>
<tr><td>Quality Score</td><td>1.0x</td><td>Bewertungen</td></tr>
</table>
<h3>7. Performance-Optimierung</h3>
<ul>
<li><strong>Caching:</strong> Query-Cache (5 Min TTL)</li>
<li><strong>Prefetch:</strong> Top-Facetten vorgeladen</li>
<li><strong>Pagination:</strong> Cursor-basiert</li>
<li><strong>Index:</strong> Sharding bei grossen Datenmengen</li>
</ul>
<h3>8. Monitoring</h3>
<table>
<tr><th>Metrik</th><th>Ziel</th><th>Alert</th></tr>
<tr><td>P99 Latency</td><td>< 500ms</td><td>> 1s</td></tr>
<tr><td>Zero Results Rate</td><td>< 5%</td><td>> 10%</td></tr>
<tr><td>Click-Through Rate</td><td>> 30%</td><td>< 20%</td></tr>
<tr><td>Index Lag</td><td>< 1h</td><td>> 4h</td></tr>
</table>
<h3>9. Datenschutz</h3>
<ul>
<li><strong>Query Logging:</strong> Anonymisiert nach 30 Tagen</li>
<li><strong>Personalisierung:</strong> Opt-in</li>
<li><strong>Keine PII:</strong> In Suchlogs keine Nutzer-IDs</li>
</ul>
<h3>10. Geplante Features</h3>
<ol>
<li>Query Understanding: Intent-Erkennung</li>
<li>Personalisierung: Basierend auf Historie</li>
<li>Federated Search: Externe Quellen</li>
<li>Answer Extraction: Direkte Antworten</li>
</ol>
`,
},
// Note: staffSearch and uniCrawler removed (person-crawling discontinued)
// System only crawls institution data (schools, universities) - no person data
__removed_person_crawling_note: {
title: 'Removed Configs Note',
description: 'staffSearch and uniCrawler configs removed',
version: '1.0',
architecture: {
layers: [],
},
features: [],
roadmap: [],
technicalDetails: [],
auditInfo: [],
fullDocumentation: 'Person crawling functionality removed. System only crawls institution data.',
},
// Backlog
backlog: {
title: 'Backlog System-Info',
description: 'Produkt-Backlog und Feature-Tracking.',
version: '1.0',
architecture: {
layers: [
{ title: 'Backlog UI', components: ['Board View', 'List View', 'Roadmap'], color: '#3b82f6' },
{ title: 'Planning', components: ['Sprint Planning', 'Estimation', 'Prioritization'], color: '#8b5cf6' },
{ title: 'Tracking', components: ['Progress', 'Velocity', 'Burndown'], color: '#10b981' },
{ title: 'Integration', components: ['GitHub', 'Jira', 'Notion'], color: '#f59e0b' },
],
},
features: [
{ name: 'Feature Tracking', status: 'active', description: 'Anforderungsverwaltung' },
{ name: 'Prioritization', status: 'active', description: 'MoSCoW/RICE Methoden' },
{ name: 'Sprint Planning', status: 'active', description: 'Agile Planung' },
{ name: 'Dependency Tracking', status: 'planned', description: 'Feature-Abhaengigkeiten' },
],
roadmap: [
{ phase: 'Phase 1: Core (Q1)', priority: 'high', items: ['Kanban Board', 'Story Points', 'Labels/Tags', 'Assignees'] },
{ phase: 'Phase 2: Planning (Q2)', priority: 'medium', items: ['Sprint Backlog', 'Velocity Charts', 'Capacity Planning', 'Release Planning'] },
{ phase: 'Phase 3: Intelligence (Q3)', priority: 'low', items: ['Auto-Prioritization', 'Effort Prediction', 'Risk Identification', 'Stakeholder Reports'] },
],
technicalDetails: [
{ component: 'UI', technology: 'React DnD', description: 'Drag & Drop' },
{ component: 'Storage', technology: 'PostgreSQL', description: 'Relational Data' },
{ component: 'Sync', technology: 'GitHub API', description: 'Issue Sync' },
{ component: 'Export', technology: 'CSV/JSON', description: 'Data Export' },
],
auditInfo: [
{
category: 'Backlog Status',
items: [
{ label: 'Offene Items', value: 'Tracking', status: 'ok' },
{ label: 'In Progress', value: 'Tracking', status: 'ok' },
{ label: 'Completed (Sprint)', value: 'Tracking', status: 'ok' },
{ label: 'Backlog Grooming', value: 'Woechentlich', status: 'ok' },
],
},
{
category: 'Priorisierung',
items: [
{ label: 'Must Have', value: 'Tracking', status: 'ok' },
{ label: 'Should Have', value: 'Tracking', status: 'ok' },
{ label: 'Could Have', value: 'Tracking', status: 'ok' },
{ label: 'Wont Have', value: 'Tracking', status: 'ok' },
],
},
{
category: 'Integration',
items: [
{ label: 'GitHub Sync', value: 'Aktiv', status: 'ok' },
{ label: 'Jira Sync', value: 'Optional', status: 'ok' },
{ label: 'Slack Notifications', value: 'Konfigurierbar', status: 'ok' },
{ label: 'Webhooks', value: 'Aktiv', status: 'ok' },
],
},
],
fullDocumentation: `
<h2>Backlog Management System</h2>
<h3>1. Uebersicht</h3>
<p>Das Backlog-Modul verwaltet alle Feature-Anfragen, Bugs und Verbesserungen. Es unterstuetzt agile Methoden wie Scrum und Kanban.</p>
<h3>2. Item-Typen</h3>
<table>
<tr><th>Typ</th><th>Icon</th><th>Beschreibung</th></tr>
<tr><td>Epic</td><td>⚡</td><td>Grosses Feature, mehrere Stories</td></tr>
<tr><td>Story</td><td>📖</td><td>User Story mit Akzeptanzkriterien</td></tr>
<tr><td>Task</td><td>✓</td><td>Technische Aufgabe</td></tr>
<tr><td>Bug</td><td>🐛</td><td>Fehlerbericht</td></tr>
<tr><td>Improvement</td><td>💡</td><td>Verbesserungsvorschlag</td></tr>
</table>
<h3>3. Workflow</h3>
<pre>
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ Backlog │ → │ Selected │ → │ In Dev │ → │ Review │ → │ Done │
└──────────┘ └──────────┘ └──────────┘ └──────────┘ └──────────┘
│ │ │ │ │
│ │ │ │ │
Priorisiert Sprint Entwicklung Code Review Abgeschlossen
Planning & Testing & QA
</pre>
<h3>4. Item-Struktur</h3>
<pre>
{
"id": "BP-123",
"type": "story",
"title": "Als Nutzer moechte ich...",
"description": "...",
"acceptance_criteria": [
"Gegeben..., Wenn..., Dann..."
],
"priority": "must_have",
"story_points": 5,
"labels": ["frontend", "ux"],
"assignee": "user_id",
"sprint": "Sprint 12",
"epic": "BP-100",
"created_at": "2025-01-14T10:00:00Z",
"updated_at": "2025-01-14T12:00:00Z"
}
</pre>
<h3>5. Priorisierung (MoSCoW)</h3>
<table>
<tr><th>Prioritaet</th><th>Beschreibung</th><th>Behandlung</th></tr>
<tr><td>Must Have</td><td>Unverzichtbar</td><td>Im naechsten Sprint</td></tr>
<tr><td>Should Have</td><td>Wichtig</td><td>Baldmoeglichst</td></tr>
<tr><td>Could Have</td><td>Wuenschenswert</td><td>Wenn Zeit</td></tr>
<tr><td>Wont Have</td><td>Nicht jetzt</td><td>Spaeter evaluieren</td></tr>
</table>
<h3>6. API Endpoints</h3>
<table>
<tr><th>Endpoint</th><th>Methode</th><th>Beschreibung</th></tr>
<tr><td>/api/backlog/items</td><td>GET</td><td>Items listen</td></tr>
<tr><td>/api/backlog/items</td><td>POST</td><td>Neues Item</td></tr>
<tr><td>/api/backlog/items/{id}</td><td>PATCH</td><td>Item aktualisieren</td></tr>
<tr><td>/api/backlog/sprints</td><td>GET</td><td>Sprints listen</td></tr>
<tr><td>/api/backlog/kanban</td><td>GET</td><td>Board-Ansicht</td></tr>
</table>
<h3>7. Sprint Planning</h3>
<pre>
Sprint Planning Flow:
1. Velocity berechnen
└── Durchschnitt der letzten 3 Sprints
2. Kapazitaet ermitteln
└── Teamgroesse × Verfuegbarkeit
3. Items auswaehlen
├── Priorisierte Items
├── Story Points summieren
└── Kapazitaet nicht ueberschreiten
4. Sprint Goal definieren
└── Uebergreifendes Ziel
5. Sprint starten
└── 2 Wochen Timeebox
</pre>
<h3>8. Metriken</h3>
<table>
<tr><th>Metrik</th><th>Beschreibung</th><th>Ziel</th></tr>
<tr><td>Velocity</td><td>Story Points/Sprint</td><td>Stabil</td></tr>
<tr><td>Cycle Time</td><td>Zeit bis Done</td><td>Sinkend</td></tr>
<tr><td>Lead Time</td><td>Backlog bis Done</td><td>Sinkend</td></tr>
<tr><td>Burndown</td><td>Remaining Work</td><td>Linear</td></tr>
</table>
<h3>9. GitHub Integration</h3>
<pre>
Sync-Konfiguration:
GitHub Issues → Backlog Items
├── Labels → Typ-Mapping
├── Milestones → Sprints
├── Assignees → Team-Members
└── Comments → Bidirektional
Automatisierung:
├── PR merged → Item nach Done
├── Branch erstellt → Item nach In Dev
└── Review requested → Item nach Review
</pre>
<h3>10. Reporting</h3>
<ul>
<li><strong>Burndown Chart:</strong> Sprint-Fortschritt</li>
<li><strong>Velocity Chart:</strong> Trend ueber Sprints</li>
<li><strong>Cumulative Flow:</strong> WIP-Analyse</li>
<li><strong>Sprint Report:</strong> Completed vs Planned</li>
</ul>
`,
},
// Zeugnisse Crawler
zeugnisseCrawler: {
title: 'Zeugnisse Crawler System-Info',
description: 'Crawler fuer Zeugnisformulierungen und Bewertungstexte.',
version: '1.0',
privacyNotes: [
'Nur anonymisierte Textbausteine',
'Keine personenbezogenen Daten',
'Quellennachweis fuer alle Texte',
],
architecture: {
layers: [
{ title: 'Admin UI', components: ['Source Manager', 'Text Editor', 'Categories'], color: '#3b82f6' },
{ title: 'Crawler', components: ['PDF Parser', 'Text Extractor', 'Classifier'], color: '#8b5cf6' },
{ title: 'Processing', components: ['Deduplication', 'Quality Check', 'Tagging'], color: '#10b981' },
{ title: 'Database', components: ['Text Corpus', 'Categories', 'Search Index'], color: '#f59e0b' },
],
},
features: [
{ name: 'PDF-Parsing', status: 'active', description: 'Extraktion aus Zeugnis-PDFs' },
{ name: 'Kategorisierung', status: 'active', description: 'Automatische Einordnung' },
{ name: 'Qualitaetssicherung', status: 'active', description: 'Review-Workflow' },
{ name: 'KI-Generierung', status: 'planned', description: 'Neue Formulierungen' },
],
roadmap: [
{ phase: 'Phase 1: Corpus (Q1)', priority: 'high', items: ['PDF Import', 'Text Cleaning', 'Category System', 'Search Function'] },
{ phase: 'Phase 2: Quality (Q2)', priority: 'medium', items: ['Duplicate Detection', 'Quality Scoring', 'Source Tracking', 'Review Workflow'] },
{ phase: 'Phase 3: AI (Q3)', priority: 'medium', items: ['Style Analysis', 'Generation', 'Personalization', 'Compliance Check'] },
],
technicalDetails: [
{ component: 'PDF', technology: 'PyMuPDF', description: 'PDF Parsing' },
{ component: 'NLP', technology: 'spaCy', description: 'Text Analysis' },
{ component: 'Search', technology: 'Qdrant', description: 'Semantic Search' },
{ component: 'Storage', technology: 'PostgreSQL', description: 'Text Database' },
],
auditInfo: [
{
category: 'Corpus Status',
items: [
{ label: 'Formulierungen', value: 'Tracking', status: 'ok' },
{ label: 'Kategorien', value: 'Definiert', status: 'ok' },
{ label: 'Qualitaet geprueft', value: 'Review', status: 'ok' },
{ label: 'Letzte Aktualisierung', value: 'Woechentlich', status: 'ok' },
],
},
{
category: 'Datenschutz',
items: [
{ label: 'Anonymisierung', value: 'Vollstaendig', status: 'ok' },
{ label: 'Quellennachweis', value: 'Vorhanden', status: 'ok' },
{ label: 'Keine PII', value: 'Verifiziert', status: 'ok' },
{ label: 'Lizenzstatus', value: 'Geprueft', status: 'ok' },
],
},
{
category: 'KI-Features',
items: [
{ label: 'Kategorisierung', value: 'Automatisch', status: 'ok' },
{ label: 'Stilanalyse', value: 'Geplant', status: 'warning' },
{ label: 'Generierung', value: 'Geplant', status: 'warning' },
{ label: 'Qualitaets-Scoring', value: 'Aktiv', status: 'ok' },
],
},
],
fullDocumentation: `
<h2>Zeugnisse Crawler - Formulierungsdatenbank</h2>
<h3>1. Uebersicht</h3>
<p>Der Zeugnisse Crawler sammelt und kategorisiert anonymisierte Zeugnisformulierungen. Er dient als Referenzdatenbank fuer die Erstellung von Arbeitszeugnissen.</p>
<h3>2. Datenquellen</h3>
<pre>
Quellen:
├── Oeffentliche Muster-Zeugnisse
│ └── Arbeitsagentur, IHK
├── Anonymisierte Beispiele
│ └── Von Nutzern eingereicht
├── Fachliteratur
│ └── Zeugnis-Handbuecher
└── Generierte Beispiele
└── KI-erweitert (geplant)
</pre>
<h3>3. Kategorie-System</h3>
<table>
<tr><th>Kategorie</th><th>Unterkategorien</th><th>Beispiel</th></tr>
<tr><td>Leistung</td><td>sehr gut, gut, befriedigend, ...</td><td>"stets zur vollsten Zufriedenheit"</td></tr>
<tr><td>Sozialverhalten</td><td>Kollegen, Vorgesetzte, Kunden</td><td>"war bei allen beliebt"</td></tr>
<tr><td>Fachwissen</td><td>Theorie, Praxis, Weiterbildung</td><td>"verfuegt ueber fundiertes..."</td></tr>
<tr><td>Arbeitsweise</td><td>Selbstaendigkeit, Sorgfalt, ...</td><td>"arbeitet aeusserst zuverlaessig"</td></tr>
<tr><td>Schlussformel</td><td>Danksagung, Wuensche</td><td>"Wir wuenschen alles Gute..."</td></tr>
</table>
<h3>4. Formulierungs-Schema</h3>
<pre>
{
"id": "zeug-123",
"text": "Herr/Frau X hat die ihm/ihr uebertragenen Aufgaben...",
"category": "leistung",
"subcategory": "gesamtbewertung",
"rating": 2, // 1=sehr gut, 6=ungenuegend
"gender_neutral": true,
"source": "muster_vorlage",
"verified": true,
"usage_count": 150,
"created_at": "2025-01-14T10:00:00Z"
}
</pre>
<h3>5. API Endpoints</h3>
<table>
<tr><th>Endpoint</th><th>Methode</th><th>Beschreibung</th></tr>
<tr><td>/api/zeugnisse/search</td><td>GET</td><td>Formulierungen suchen</td></tr>
<tr><td>/api/zeugnisse/categories</td><td>GET</td><td>Kategorien listen</td></tr>
<tr><td>/api/zeugnisse/suggest</td><td>POST</td><td>Passende Formulierungen</td></tr>
<tr><td>/api/zeugnisse/contribute</td><td>POST</td><td>Neue Formulierung einreichen</td></tr>
</table>
<h3>6. PDF-Parsing Pipeline</h3>
<pre>
PDF-Dokument
v
┌───────────────────────────────────────┐
│ 1. Text Extraction (PyMuPDF) │
│ - OCR falls noetig (Tesseract) │
└─────────────────┬─────────────────────┘
v
┌───────────────────────────────────────┐
│ 2. Anonymisierung │
│ - Namen entfernen │
│ - Firmennamen entfernen │
│ - Daten generalisieren │
└─────────────────┬─────────────────────┘
v
┌───────────────────────────────────────┐
│ 3. Segmentierung │
│ - Absaetze trennen │
│ - Formulierungen extrahieren │
└─────────────────┬─────────────────────┘
v
┌───────────────────────────────────────┐
│ 4. Klassifizierung │
│ - Kategorie zuordnen │
│ - Rating ableiten │
│ - Qualitaet bewerten │
└───────────────────────────────────────┘
</pre>
<h3>7. Rating-Dekodierung</h3>
<table>
<tr><th>Formulierung</th><th>Rating</th><th>Bedeutung</th></tr>
<tr><td>"stets zur vollsten Zufriedenheit"</td><td>1</td><td>Sehr gut</td></tr>
<tr><td>"zur vollsten Zufriedenheit"</td><td>2</td><td>Gut</td></tr>
<tr><td>"zur vollen Zufriedenheit"</td><td>3</td><td>Befriedigend</td></tr>
<tr><td>"zur Zufriedenheit"</td><td>4</td><td>Ausreichend</td></tr>
<tr><td>"im Grossen und Ganzen..."</td><td>5</td><td>Mangelhaft</td></tr>
<tr><td>"hat sich bemueht"</td><td>6</td><td>Ungenuegend</td></tr>
</table>
<h3>8. Qualitaetssicherung</h3>
<ul>
<li><strong>Automated:</strong> Duplikat-Erkennung, Format-Check</li>
<li><strong>Review:</strong> Manuelles Review neuer Eintraege</li>
<li><strong>Rating Check:</strong> Plausibilitaetspruefung</li>
<li><strong>Usage Tracking:</strong> Beliebte Formulierungen</li>
</ul>
<h3>9. Semantische Suche</h3>
<pre>
Suchanfrage: "gute Teamarbeit"
v
┌───────────────────────────────────────┐
│ 1. Embedding generieren │
│ 2. Qdrant Vector Search │
│ 3. Keyword-Filter anwenden │
│ 4. Rating-Filter anwenden │
│ 5. Ergebnisse ranken │
└───────────────────────────────────────┘
v
Ergebnisse:
├── "war ein geschaetztes Teammitglied" (0.95)
├── "fuegte sich gut ins Team ein" (0.89)
└── "trug aktiv zur Teamarbeit bei" (0.85)
</pre>
<h3>10. Compliance</h3>
<ul>
<li><strong>Keine personenbezogenen Daten:</strong> Vollstaendig anonymisiert</li>
<li><strong>Quellennachweis:</strong> Herkunft dokumentiert</li>
<li><strong>Lizenzpruefung:</strong> Nur freie Inhalte</li>
<li><strong>Qualitaetsstandard:</strong> Nur positive Bewertungen (&ge; 3)</li>
</ul>
`,
},
// Training
training: {
title: 'Training System-Info',
description: 'ML Model Training und Fine-Tuning Dashboard.',
version: '1.0',
architecture: {
layers: [
{ title: 'Training UI', components: ['Experiment Tracker', 'Metrics Dashboard', 'Model Registry'], color: '#3b82f6' },
{ title: 'Training Pipeline', components: ['Data Loader', 'Trainer', 'Evaluator'], color: '#8b5cf6' },
{ title: 'Compute', components: ['GPU Cluster', 'Job Scheduler', 'Resource Manager'], color: '#10b981' },
{ title: 'Storage', components: ['Dataset Store', 'Model Artifacts', 'Checkpoints'], color: '#f59e0b' },
],
},
features: [
{ name: 'Experiment Tracking', status: 'active', description: 'Versuchsprotokollierung' },
{ name: 'Hyperparameter Tuning', status: 'active', description: 'Automatische Optimierung' },
{ name: 'Model Versioning', status: 'active', description: 'Modellversionierung' },
{ name: 'Distributed Training', status: 'planned', description: 'Multi-GPU Training' },
],
roadmap: [
{ phase: 'Phase 1: MLOps (Q1)', priority: 'high', items: ['Experiment Tracking', 'Model Registry', 'Artifact Storage', 'Reproducibility'] },
{ phase: 'Phase 2: Automation (Q2)', priority: 'medium', items: ['Auto-Tuning', 'Pipeline Orchestration', 'A/B Deployment', 'Rollback'] },
{ phase: 'Phase 3: Scale (Q3)', priority: 'medium', items: ['Distributed Training', 'Cost Optimization', 'Resource Scheduling', 'Multi-Cloud'] },
],
technicalDetails: [
{ component: 'ML', technology: 'PyTorch', version: '2.x', description: 'Training Framework' },
{ component: 'Tracking', technology: 'MLflow/W&B', description: 'Experiment Tracking' },
{ component: 'GPU', technology: 'vast.ai', description: 'Cloud GPUs' },
{ component: 'Storage', technology: 'MinIO', description: 'Artifact Store' },
],
auditInfo: [
{
category: 'Training Pipeline',
items: [
{ label: 'Aktive Jobs', value: 'Tracking', status: 'ok' },
{ label: 'GPU Verfuegbarkeit', value: 'vast.ai', status: 'ok' },
{ label: 'Model Registry', value: 'MLflow', status: 'ok' },
{ label: 'Experiment Tracking', value: 'Aktiviert', status: 'ok' },
],
},
{
category: 'Ressourcen',
items: [
{ label: 'GPU Budget', value: 'Konfiguriert', status: 'ok' },
{ label: 'Storage', value: 'MinIO', status: 'ok' },
{ label: 'Compute Limits', value: 'Definiert', status: 'ok' },
{ label: 'Auto-Shutdown', value: 'Aktiviert', status: 'ok' },
],
},
{
category: 'Compliance',
items: [
{ label: 'Datensatz-Herkunft', value: 'Dokumentiert', status: 'ok' },
{ label: 'Model Cards', value: 'Vorhanden', status: 'ok' },
{ label: 'Bias-Pruefung', value: 'Geplant', status: 'warning' },
{ label: 'Audit Trail', value: 'Aktiviert', status: 'ok' },
],
},
],
fullDocumentation: `
<h2>ML Training Dashboard</h2>
<h3>1. Uebersicht</h3>
<p>Das Training-Modul ermoeglicht das Training und Fine-Tuning von ML-Modellen mit Experiment-Tracking, Model Registry und GPU-Management.</p>
<h3>2. Training-Architektur</h3>
<pre>
┌─────────────────────────────────────────────────────────────────┐
│ Training Dashboard │
│ ┌────────────────┐ ┌────────────────┐ ┌────────────────────┐│
│ │ Experiment │ │ Model │ │ Resource ││
│ │ Tracker │ │ Registry │ │ Monitor ││
│ └────────────────┘ └────────────────┘ └────────────────────┘│
└────────────────────────────┬────────────────────────────────────┘
v
┌─────────────────────────────────────────────────────────────────┐
│ Training Pipeline │
│ ┌────────────────┐ ┌────────────────┐ ┌────────────────────┐│
│ │ Data Loader │ │ Trainer │ │ Evaluator ││
│ └────────────────┘ └────────────────┘ └────────────────────┘│
└────────────────────────────┬────────────────────────────────────┘
┌──────────────────┴──────────────────┐
│ │
v v
┌─────────────────────────┐ ┌─────────────────────────┐
│ GPU Cluster │ │ Storage │
│ (vast.ai) │ │ (MinIO) │
│ ├── RTX 4090 │ │ ├── Datasets │
│ ├── A100 │ │ ├── Checkpoints │
│ └── H100 │ │ └── Models │
└─────────────────────────┘ └─────────────────────────┘
</pre>
<h3>3. Experiment-Struktur</h3>
<pre>
{
"experiment_id": "exp-20250114-001",
"name": "Fine-tune GPT for Education",
"model_type": "causal_lm",
"base_model": "meta-llama/Llama-2-7b",
"dataset": "education-qa-v2",
"hyperparameters": {
"learning_rate": 2e-5,
"batch_size": 16,
"epochs": 3,
"warmup_steps": 500,
"weight_decay": 0.01
},
"metrics": {
"train_loss": 0.45,
"eval_loss": 0.52,
"eval_accuracy": 0.89
},
"status": "completed",
"gpu": "A100-80GB",
"duration_hours": 4.5,
"cost_usd": 6.75
}
</pre>
<h3>4. API Endpoints</h3>
<table>
<tr><th>Endpoint</th><th>Methode</th><th>Beschreibung</th></tr>
<tr><td>/api/training/experiments</td><td>GET</td><td>Experimente listen</td></tr>
<tr><td>/api/training/experiments</td><td>POST</td><td>Neues Experiment</td></tr>
<tr><td>/api/training/experiments/{id}</td><td>GET</td><td>Experiment-Details</td></tr>
<tr><td>/api/training/models</td><td>GET</td><td>Model Registry</td></tr>
<tr><td>/api/training/runs/{id}/stop</td><td>POST</td><td>Training stoppen</td></tr>
</table>
<h3>5. Training-Workflow</h3>
<pre>
Neues Experiment
v
┌───────────────────────────────────────┐
│ 1. Konfiguration │
│ - Modell auswaehlen │
│ - Dataset zuweisen │
│ - Hyperparameter setzen │
└─────────────────┬─────────────────────┘
v
┌───────────────────────────────────────┐
│ 2. Ressourcen-Allokation │
│ - GPU-Instanz starten │
│ - Daten laden │
│ - Environment setup │
└─────────────────┬─────────────────────┘
v
┌───────────────────────────────────────┐
│ 3. Training │
│ - Forward/Backward Pass │
│ - Metriken loggen │
│ - Checkpoints speichern │
└─────────────────┬─────────────────────┘
v
┌───────────────────────────────────────┐
│ 4. Evaluation │
│ - Validation Set │
│ - Benchmarks │
│ - A/B Vergleich │
└─────────────────┬─────────────────────┘
v
┌───────────────────────────────────────┐
│ 5. Deployment (optional) │
│ - Model Registry │
│ - Staging/Production │
│ - Rollout │
└───────────────────────────────────────┘
</pre>
<h3>6. Hyperparameter-Tuning</h3>
<table>
<tr><th>Methode</th><th>Beschreibung</th><th>Use Case</th></tr>
<tr><td>Grid Search</td><td>Alle Kombinationen</td><td>Kleine Suchräume</td></tr>
<tr><td>Random Search</td><td>Zufaellige Stichproben</td><td>Grosse Suchräume</td></tr>
<tr><td>Bayesian</td><td>Informierte Suche</td><td>Teure Experimente</td></tr>
<tr><td>Population Based</td><td>Evolutionaer</td><td>Kontinuierliches Training</td></tr>
</table>
<h3>7. Metriken & Monitoring</h3>
<pre>
Tracking:
├── Loss (Train/Eval)
├── Accuracy/F1/BLEU
├── Learning Rate Schedule
├── GPU Utilization
├── Memory Usage
└── Training Speed (samples/sec)
Alerts:
├── Loss exploding
├── GPU OOM
├── Training stalled
└── Budget exceeded
</pre>
<h3>8. Model Registry</h3>
<table>
<tr><th>Status</th><th>Beschreibung</th><th>Aktion</th></tr>
<tr><td>Draft</td><td>In Entwicklung</td><td>Experimentieren</td></tr>
<tr><td>Staging</td><td>Zur Evaluation</td><td>A/B Testing</td></tr>
<tr><td>Production</td><td>Live</td><td>Serving</td></tr>
<tr><td>Archived</td><td>Veraltet</td><td>Backup</td></tr>
</table>
<h3>9. Kostenmanagement</h3>
<ul>
<li><strong>Budget-Limits:</strong> Pro Experiment/Tag/Monat</li>
<li><strong>Auto-Stop:</strong> Bei Inaktivität</li>
<li><strong>Spot-Instances:</strong> Kostenreduktion</li>
<li><strong>Reporting:</strong> Kosten pro Experiment</li>
</ul>
<h3>10. Best Practices</h3>
<ol>
<li>Immer Baseline-Experiment als Referenz</li>
<li>Checkpoints alle N Schritte speichern</li>
<li>Early Stopping bei Overfitting</li>
<li>Model Card fuer jedes produktive Modell</li>
<li>Reproduzierbarkeit durch Seed-Setting</li>
</ol>
`,
},
// Content Management
content: {
title: 'Content Management System-Info',
description: 'Verwaltung von Bildungsinhalten und Medien.',
version: '1.5',
architecture: {
layers: [
{ title: 'Content UI', components: ['Media Library', 'Editor', 'Preview'], color: '#3b82f6' },
{ title: 'Processing', components: ['Transcoding', 'Thumbnail Gen', 'OCR'], color: '#8b5cf6' },
{ title: 'Delivery', components: ['CDN', 'Streaming', 'Download'], color: '#10b981' },
{ title: 'Storage', components: ['MinIO', 'PostgreSQL', 'Qdrant'], color: '#f59e0b' },
],
},
features: [
{ name: 'Media Upload', status: 'active', description: 'Multi-Format Upload' },
{ name: 'Auto-Processing', status: 'active', description: 'Automatische Konvertierung' },
{ name: 'Search & Filter', status: 'active', description: 'Content-Suche' },
{ name: 'Version Control', status: 'planned', description: 'Inhaltsversionierung' },
],
roadmap: [
{ phase: 'Phase 1: Core (Q1)', priority: 'high', items: ['Bulk Upload', 'Metadata Editor', 'Tagging System', 'Folder Structure'] },
{ phase: 'Phase 2: Media (Q2)', priority: 'medium', items: ['Video Streaming', 'Adaptive Bitrate', 'Subtitle Support', 'Audio Transcription'] },
{ phase: 'Phase 3: AI (Q3)', priority: 'low', items: ['Auto-Tagging', 'Content Moderation', 'Similarity Search', 'Auto-Description'] },
],
technicalDetails: [
{ component: 'Storage', technology: 'MinIO', description: 'S3-Compatible' },
{ component: 'Video', technology: 'FFmpeg', description: 'Transcoding' },
{ component: 'CDN', technology: 'CloudFlare', description: 'Delivery' },
{ component: 'Search', technology: 'Qdrant', description: 'Similarity' },
],
auditInfo: [
{
category: 'Content Status',
items: [
{ label: 'Gesamt-Assets', value: 'Tracking', status: 'ok' },
{ label: 'Veroeffentlicht', value: 'Tracking', status: 'ok' },
{ label: 'In Review', value: 'Tracking', status: 'ok' },
{ label: 'Storage genutzt', value: 'Monitoring', status: 'ok' },
],
},
{
category: 'Processing',
items: [
{ label: 'Transcoding Queue', value: 'Aktiv', status: 'ok' },
{ label: 'Thumbnail Gen', value: 'Automatisch', status: 'ok' },
{ label: 'OCR Pipeline', value: 'Aktiv', status: 'ok' },
{ label: 'CDN Sync', value: 'Aktiv', status: 'ok' },
],
},
{
category: 'Qualitaet',
items: [
{ label: 'Format-Standards', value: 'Definiert', status: 'ok' },
{ label: 'Metadata-Validierung', value: 'Aktiv', status: 'ok' },
{ label: 'Content-Moderation', value: 'Geplant', status: 'warning' },
{ label: 'Accessibility', value: 'In Arbeit', status: 'warning' },
],
},
],
fullDocumentation: `
<h2>Content Management System</h2>
<h3>1. Uebersicht</h3>
<p>Das CMS verwaltet alle Bildungsinhalte: Videos, PDFs, Arbeitsblätter und interaktive Medien. Es bietet Upload, Verarbeitung, Suche und Auslieferung.</p>
<h3>2. Content-Architektur</h3>
<pre>
┌─────────────────────────────────────────────────────────────────┐
│ Content Dashboard │
│ ┌────────────────┐ ┌────────────────┐ ┌────────────────────┐│
│ │ Media Library │ │ Editor │ │ Preview ││
│ └────────────────┘ └────────────────┘ └────────────────────┘│
└────────────────────────────┬────────────────────────────────────┘
v
┌─────────────────────────────────────────────────────────────────┐
│ Processing Pipeline │
│ ┌────────────────┐ ┌────────────────┐ ┌────────────────────┐│
│ │ Upload Handler │ │ Transcoder │ │ Indexer ││
│ │ (TUS Protocol) │ │ (FFmpeg) │ │ (Embeddings) ││
│ └────────────────┘ └────────────────┘ └────────────────────┘│
└────────────────────────────┬────────────────────────────────────┘
┌──────────────────┴──────────────────┐
│ │
v v
┌─────────────────────────┐ ┌─────────────────────────┐
│ Object Storage │ │ CDN │
│ (MinIO) │ │ (CloudFlare) │
│ ├── Originals │ │ ├── Thumbnails │
│ ├── Transcoded │ │ ├── Streaming │
│ └── Thumbnails │ │ └── Downloads │
└─────────────────────────┘ └─────────────────────────┘
</pre>
<h3>3. Unterstuetzte Formate</h3>
<table>
<tr><th>Typ</th><th>Eingabe</th><th>Ausgabe</th><th>Max Groesse</th></tr>
<tr><td>Video</td><td>MP4, MOV, MKV, AVI</td><td>MP4 (H.264), HLS</td><td>5 GB</td></tr>
<tr><td>Audio</td><td>MP3, WAV, FLAC, M4A</td><td>MP3, AAC</td><td>500 MB</td></tr>
<tr><td>Dokument</td><td>PDF, DOCX, PPTX</td><td>PDF, Thumbnails</td><td>100 MB</td></tr>
<tr><td>Bild</td><td>JPG, PNG, WEBP, GIF</td><td>WEBP, Thumbnails</td><td>50 MB</td></tr>
<tr><td>Interaktiv</td><td>H5P, SCORM</td><td>Package</td><td>200 MB</td></tr>
</table>
<h3>4. API Endpoints</h3>
<table>
<tr><th>Endpoint</th><th>Methode</th><th>Beschreibung</th></tr>
<tr><td>/api/content/upload</td><td>POST</td><td>Upload initiieren (TUS)</td></tr>
<tr><td>/api/content/assets</td><td>GET</td><td>Assets listen</td></tr>
<tr><td>/api/content/assets/{id}</td><td>GET</td><td>Asset-Details</td></tr>
<tr><td>/api/content/assets/{id}</td><td>PATCH</td><td>Metadaten aktualisieren</td></tr>
<tr><td>/api/content/search</td><td>GET</td><td>Content suchen</td></tr>
</table>
<h3>5. Metadata-Schema</h3>
<pre>
{
"id": "asset-uuid",
"title": "Mathematik Erklaervideo",
"description": "...",
"type": "video",
"subject": "Mathematik",
"grade_levels": [5, 6, 7],
"language": "de",
"duration_seconds": 600,
"file_size_bytes": 150000000,
"mime_type": "video/mp4",
"dimensions": { "width": 1920, "height": 1080 },
"thumbnail_url": "https://cdn.../thumb.webp",
"stream_url": "https://cdn.../stream.m3u8",
"download_url": "https://cdn.../download.mp4",
"tags": ["Algebra", "Grundlagen"],
"license": "CC-BY-SA-4.0",
"created_at": "2025-01-14T10:00:00Z",
"status": "published"
}
</pre>
<h3>6. Video-Transcoding</h3>
<pre>
Input Video
v
┌───────────────────────────────────────┐
│ 1. Analyse │
│ - Codec, Resolution, Bitrate │
│ - Audio Channels │
└─────────────────┬─────────────────────┘
v
┌───────────────────────────────────────┐
│ 2. Transcoding (FFmpeg) │
│ - 1080p (5 Mbps) │
│ - 720p (2.5 Mbps) │
│ - 480p (1 Mbps) │
│ - 360p (0.5 Mbps) │
└─────────────────┬─────────────────────┘
v
┌───────────────────────────────────────┐
│ 3. HLS Packaging │
│ - Segmente (10s) │
│ - Master Playlist │
│ - Adaptive Bitrate │
└─────────────────┬─────────────────────┘
v
┌───────────────────────────────────────┐
│ 4. CDN Upload │
│ - Edge Caching │
│ - Signed URLs │
└───────────────────────────────────────┘
</pre>
<h3>7. Ordner-Struktur</h3>
<pre>
Content Library/
├── Faecher/
│ ├── Mathematik/
│ │ ├── Klasse 5/
│ │ └── Klasse 6/
│ ├── Deutsch/
│ └── Englisch/
├── Sammlungen/
│ ├── Pruefungsvorbereitung/
│ └── Ferienkurse/
└── Archiv/
</pre>
<h3>8. Suche & Filter</h3>
<ul>
<li><strong>Volltext:</strong> Titel, Beschreibung, Tags</li>
<li><strong>Semantisch:</strong> Bedeutungsbasiert</li>
<li><strong>Filter:</strong> Typ, Fach, Klassenstufe, Lizenz</li>
<li><strong>Sortierung:</strong> Datum, Titel, Beliebtheit</li>
</ul>
<h3>9. Workflow-Status</h3>
<table>
<tr><th>Status</th><th>Beschreibung</th><th>Sichtbar</th></tr>
<tr><td>Uploading</td><td>Upload laeuft</td><td>Nein</td></tr>
<tr><td>Processing</td><td>Transcoding/Thumbnail</td><td>Nein</td></tr>
<tr><td>Draft</td><td>Entwurf</td><td>Nur Autor</td></tr>
<tr><td>Review</td><td>In Pruefung</td><td>Reviewer</td></tr>
<tr><td>Published</td><td>Veroeffentlicht</td><td>Alle</td></tr>
<tr><td>Archived</td><td>Archiviert</td><td>Admin</td></tr>
</table>
<h3>10. Monitoring</h3>
<table>
<tr><th>Metrik</th><th>Beschreibung</th><th>Alert</th></tr>
<tr><td>Storage Usage</td><td>Genutzter Speicher</td><td>> 80%</td></tr>
<tr><td>Processing Queue</td><td>Wartende Jobs</td><td>> 100</td></tr>
<tr><td>CDN Bandwidth</td><td>Traffic</td><td>> Limit</td></tr>
<tr><td>Error Rate</td><td>Fehlgeschlagene Jobs</td><td>> 5%</td></tr>
</table>
`,
},
// Documentation
docs: {
title: 'Documentation System-Info',
description: 'Zentrale Dokumentationsplattform und Wissensmanagement.',
version: '1.0',
architecture: {
layers: [
{ title: 'Docs UI', components: ['Reader', 'Search', 'Navigation'], color: '#3b82f6' },
{ title: 'Content Engine', components: ['Markdown Parser', 'Version Control', 'Export'], color: '#8b5cf6' },
{ title: 'Search', components: ['Full-Text', 'Semantic', 'Facets'], color: '#10b981' },
{ title: 'Storage', components: ['Git Repo', 'PostgreSQL', 'Qdrant'], color: '#f59e0b' },
],
},
features: [
{ name: 'Markdown Support', status: 'active', description: 'GitHub-Flavored Markdown' },
{ name: 'Search', status: 'active', description: 'Volltext- und semantische Suche' },
{ name: 'Versioning', status: 'active', description: 'Git-basierte Versionierung' },
{ name: 'API Docs', status: 'planned', description: 'OpenAPI Integration' },
],
roadmap: [
{ phase: 'Phase 1: Core (Q1)', priority: 'high', items: ['Markdown Rendering', 'Navigation Tree', 'Search Index', 'Dark Mode'] },
{ phase: 'Phase 2: Features (Q2)', priority: 'medium', items: ['API Reference', 'Code Examples', 'Interactive Demos', 'Feedback System'] },
{ phase: 'Phase 3: AI (Q3)', priority: 'low', items: ['AI Search', 'Auto-Suggestions', 'Translation', 'Doc Generation'] },
],
technicalDetails: [
{ component: 'Renderer', technology: 'MDX', description: 'Enhanced Markdown' },
{ component: 'Search', technology: 'Algolia/Qdrant', description: 'Fast Search' },
{ component: 'Hosting', technology: 'Next.js', description: 'Static Generation' },
{ component: 'Version', technology: 'Git', description: 'Source Control' },
],
auditInfo: [
{
category: 'Dokumentation Status',
items: [
{ label: 'Seiten gesamt', value: 'Tracking', status: 'ok' },
{ label: 'Letzte Aktualisierung', value: 'Git-basiert', status: 'ok' },
{ label: 'Broken Links', value: 'Geprueft', status: 'ok' },
{ label: 'Search Index', value: 'Aktuell', status: 'ok' },
],
},
{
category: 'API Documentation',
items: [
{ label: 'OpenAPI Spec', value: 'Vorhanden', status: 'ok' },
{ label: 'Code Examples', value: 'Vorhanden', status: 'ok' },
{ label: 'Changelog', value: 'Aktuell', status: 'ok' },
{ label: 'Versioning', value: 'Aktiviert', status: 'ok' },
],
},
{
category: 'Accessibility',
items: [
{ label: 'Dark Mode', value: 'Vorhanden', status: 'ok' },
{ label: 'Keyboard Navigation', value: 'Funktioniert', status: 'ok' },
{ label: 'Screen Reader', value: 'Kompatibel', status: 'ok' },
{ label: 'Mobile', value: 'Responsive', status: 'ok' },
],
},
],
fullDocumentation: `
<h2>Documentation Platform</h2>
<h3>1. Uebersicht</h3>
<p>Die Dokumentationsplattform bietet zentrale technische Dokumentation fuer Entwickler, APIs und Endnutzer. Sie unterstuetzt Markdown, Versionierung und semantische Suche.</p>
<h3>2. Architektur</h3>
<pre>
┌─────────────────────────────────────────────────────────────────┐
│ Documentation Site │
│ ┌────────────────┐ ┌────────────────┐ ┌────────────────────┐│
│ │ Navigation │ │ Content │ │ Search ││
│ │ (Sidebar) │ │ (MDX Render) │ │ (Algolia/Qdrant) ││
│ └────────────────┘ └────────────────┘ └────────────────────┘│
└────────────────────────────┬────────────────────────────────────┘
v
┌─────────────────────────────────────────────────────────────────┐
│ Build Pipeline │
│ ├── Markdown/MDX Parsing │
│ ├── Static Site Generation (Next.js) │
│ ├── Search Index Generation │
│ └── Link Validation │
└────────────────────────────┬────────────────────────────────────┘
v
┌─────────────────────────────────────────────────────────────────┐
│ Source │
│ ├── Git Repository (Versioned) │
│ ├── OpenAPI Specs (Auto-generated) │
│ └── Code Comments (Extracted) │
└─────────────────────────────────────────────────────────────────┘
</pre>
<h3>3. Content-Typen</h3>
<table>
<tr><th>Typ</th><th>Format</th><th>Beschreibung</th></tr>
<tr><td>Guides</td><td>MDX</td><td>Schritt-fuer-Schritt Anleitungen</td></tr>
<tr><td>API Reference</td><td>OpenAPI</td><td>Endpoint-Dokumentation</td></tr>
<tr><td>Concepts</td><td>MDX</td><td>Erklaerungen und Konzepte</td></tr>
<tr><td>Tutorials</td><td>MDX + Code</td><td>Hands-on Beispiele</td></tr>
<tr><td>Changelog</td><td>Markdown</td><td>Versionshistorie</td></tr>
</table>
<h3>4. MDX Features</h3>
<pre>
Erweiterte Markdown-Syntax:
# Standard Markdown
**bold**, *italic*, \`code\`
# Code-Bloecke mit Highlighting
\`\`\`typescript
const example = "code"
\`\`\`
# Custom Components
<Callout type="warning">
Wichtiger Hinweis
</Callout>
<Tabs>
<Tab label="JavaScript">...</Tab>
<Tab label="Python">...</Tab>
</Tabs>
# Interaktive Elemente
<ApiPlayground endpoint="/api/example" />
</pre>
<h3>5. API Endpoints</h3>
<table>
<tr><th>Endpoint</th><th>Methode</th><th>Beschreibung</th></tr>
<tr><td>/api/docs/search</td><td>GET</td><td>Dokumentation durchsuchen</td></tr>
<tr><td>/api/docs/pages</td><td>GET</td><td>Seitenstruktur</td></tr>
<tr><td>/api/docs/feedback</td><td>POST</td><td>Feedback einreichen</td></tr>
<tr><td>/api/docs/versions</td><td>GET</td><td>Verfuegbare Versionen</td></tr>
</table>
<h3>6. Suche</h3>
<pre>
Suchanfrage
v
┌───────────────────────────────────────┐
│ 1. Query Processing │
│ - Tokenization │
│ - Stemming │
│ - Synonyme │
└─────────────────┬─────────────────────┘
┌───────┴───────┐
│ │
v v
┌─────────────────┐ ┌─────────────────┐
│ Keyword Search │ │ Semantic Search │
│ (Algolia) │ │ (Qdrant) │
└────────┬────────┘ └────────┬────────┘
│ │
└──────────┬─────────┘
v
┌─────────────────────┐
│ Result Ranking │
│ - Relevance Score │
│ - Recency │
│ - Popularity │
└─────────────────────┘
</pre>
<h3>7. Versionierung</h3>
<table>
<tr><th>Version</th><th>Branch</th><th>Status</th></tr>
<tr><td>v3.x (latest)</td><td>main</td><td>Aktuell</td></tr>
<tr><td>v2.x</td><td>v2</td><td>Maintained</td></tr>
<tr><td>v1.x</td><td>v1</td><td>Deprecated</td></tr>
</table>
<h3>8. Contribution Workflow</h3>
<pre>
Dokumentation aendern:
1. Fork/Branch erstellen
2. Markdown bearbeiten
3. Lokal pruefen (npm run dev)
4. Pull Request erstellen
5. Review & Merge
6. Auto-Deploy
</pre>
<h3>9. Analytics</h3>
<ul>
<li><strong>Page Views:</strong> Beliebteste Seiten</li>
<li><strong>Search Queries:</strong> Haeufige Suchanfragen</li>
<li><strong>Feedback:</strong> Hilfreich/Nicht hilfreich</li>
<li><strong>404 Tracking:</strong> Fehlende Seiten</li>
</ul>
<h3>10. Qualitaetssicherung</h3>
<table>
<tr><th>Check</th><th>Tool</th><th>CI-Integration</th></tr>
<tr><td>Broken Links</td><td>Custom Script</td><td>Ja</td></tr>
<tr><td>Spelling</td><td>cspell</td><td>Ja</td></tr>
<tr><td>Formatting</td><td>Prettier</td><td>Ja</td></tr>
<tr><td>Code Samples</td><td>mdx-lint</td><td>Ja</td></tr>
</table>
`,
},
// Game (Unity WebGL)
game: {
title: 'Game System-Info',
description: 'Unity WebGL Spiel-Integration fuer Gamification.',
version: '1.0',
architecture: {
layers: [
{ title: 'Game UI', components: ['Game Canvas', 'Loading Screen', 'Score Display'], color: '#3b82f6' },
{ title: 'Unity Runtime', components: ['WebGL Player', 'Asset Bundles', 'Physics'], color: '#000000' },
{ title: 'Backend Bridge', components: ['Score API', 'Progress Sync', 'Leaderboard'], color: '#10b981' },
{ title: 'Storage', components: ['Player Data', 'Achievements', 'Analytics'], color: '#f59e0b' },
],
},
features: [
{ name: 'WebGL Rendering', status: 'active', description: 'Browser-basiertes Spiel' },
{ name: 'Progress Tracking', status: 'active', description: 'Fortschrittsspeicherung' },
{ name: 'Leaderboard', status: 'planned', description: 'Bestenlisten' },
{ name: 'Achievements', status: 'planned', description: 'Erfolge und Badges' },
],
roadmap: [
{ phase: 'Phase 1: Core (Q1)', priority: 'high', items: ['WebGL Optimization', 'Mobile Support', 'Save System', 'Auth Integration'] },
{ phase: 'Phase 2: Social (Q2)', priority: 'medium', items: ['Multiplayer', 'Chat', 'Friend System', 'Challenges'] },
{ phase: 'Phase 3: Gamification (Q3)', priority: 'low', items: ['Achievement System', 'Rewards', 'Seasons', 'Events'] },
],
technicalDetails: [
{ component: 'Engine', technology: 'Unity', version: '2022 LTS', description: 'Game Engine' },
{ component: 'Platform', technology: 'WebGL 2.0', description: 'Browser Runtime' },
{ component: 'Compression', technology: 'Brotli', description: 'Asset Compression' },
{ component: 'API', technology: 'REST/WebSocket', description: 'Backend Communication' },
],
auditInfo: [
{
category: 'Game Status',
items: [
{ label: 'Build Version', value: 'Tracking', status: 'ok' },
{ label: 'WebGL Kompatibilitaet', value: 'Getestet', status: 'ok' },
{ label: 'Mobile Support', value: 'In Arbeit', status: 'warning' },
{ label: 'Performance', value: 'Optimiert', status: 'ok' },
],
},
{
category: 'Integration',
items: [
{ label: 'Auth Integration', value: 'Aktiv', status: 'ok' },
{ label: 'Progress Sync', value: 'Aktiv', status: 'ok' },
{ label: 'Leaderboard', value: 'Geplant', status: 'warning' },
{ label: 'Achievements', value: 'Geplant', status: 'warning' },
],
},
{
category: 'Assets',
items: [
{ label: 'Bundle Size', value: 'Optimiert', status: 'ok' },
{ label: 'Kompression', value: 'Brotli', status: 'ok' },
{ label: 'Lazy Loading', value: 'Aktiviert', status: 'ok' },
{ label: 'CDN', value: 'CloudFlare', status: 'ok' },
],
},
],
fullDocumentation: `
<h2>Unity WebGL Game Integration</h2>
<h3>1. Uebersicht</h3>
<p>Das Game-Modul integriert Unity-basierte Lernspiele als WebGL-Anwendungen in die Web-Plattform. Es ermoeglicht Gamification von Lerninhalten.</p>
<h3>2. Architektur</h3>
<pre>
┌─────────────────────────────────────────────────────────────────┐
│ Web Application │
│ ┌────────────────────────────────────────────────────────────┐ │
│ │ Game Container │ │
│ │ ┌───────────────────────────────────────────────────────┐ │ │
│ │ │ Unity WebGL Canvas │ │ │
│ │ │ │ │ │
│ │ │ ┌─────────────┐ ┌─────────────┐ │ │ │
│ │ │ │ Scene │ │ UI │ │ │ │
│ │ │ │ Objects │ │ Layer │ │ │ │
│ │ │ └─────────────┘ └─────────────┘ │ │ │
│ │ │ │ │ │
│ │ └───────────────────────────────────────────────────────┘ │ │
│ └────────────────────────────────────────────────────────────┘ │
│ │ │
│ v │
│ ┌────────────────────────────────────────────────────────────┐ │
│ │ Unity Bridge (jslib) │ │
│ └────────────────────────────────────────────────────────────┘ │
└────────────────────────────┬────────────────────────────────────┘
v
┌─────────────────────────────────────────────────────────────────┐
│ Backend API │
│ ├── /api/game/auth (JWT Validation) │
│ ├── /api/game/progress (Save/Load) │
│ ├── /api/game/leaderboard (Rankings) │
│ └── /api/game/events (Analytics) │
└─────────────────────────────────────────────────────────────────┘
</pre>
<h3>3. Unity Build Settings</h3>
<table>
<tr><th>Einstellung</th><th>Wert</th><th>Grund</th></tr>
<tr><td>Compression</td><td>Brotli</td><td>Beste Kompression</td></tr>
<tr><td>Code Stripping</td><td>Medium</td><td>Bundle-Groesse</td></tr>
<tr><td>WebGL Memory</td><td>256 MB</td><td>Stabil</td></tr>
<tr><td>Exception Handling</td><td>Explicitly Thrown</td><td>Performance</td></tr>
<tr><td>Graphics API</td><td>WebGL 2.0</td><td>Features</td></tr>
</table>
<h3>4. API Endpoints</h3>
<table>
<tr><th>Endpoint</th><th>Methode</th><th>Beschreibung</th></tr>
<tr><td>/api/game/session</td><td>POST</td><td>Session starten</td></tr>
<tr><td>/api/game/progress</td><td>GET</td><td>Spielstand laden</td></tr>
<tr><td>/api/game/progress</td><td>POST</td><td>Spielstand speichern</td></tr>
<tr><td>/api/game/leaderboard</td><td>GET</td><td>Bestenliste</td></tr>
<tr><td>/api/game/events</td><td>POST</td><td>Analytics-Events</td></tr>
</table>
<h3>5. Bridge Communication</h3>
<pre>
JavaScript → Unity:
├── SendMessage(objectName, methodName, value)
├── JSON Serialization fuer komplexe Daten
└── Event Queue fuer Batch-Operationen
Unity → JavaScript:
├── jslib Plugin: [DllImport("__Internal")]
├── Callback Pattern
└── JSON Response
</pre>
<h3>6. Save System</h3>
<pre>
{
"player_id": "user-uuid",
"game_id": "math-adventure",
"progress": {
"level": 5,
"score": 1250,
"stars": [3, 3, 2, 2, 1],
"unlocked": ["item-1", "item-2"],
"last_checkpoint": "level5-mid"
},
"settings": {
"sound": true,
"music_volume": 0.7,
"difficulty": "normal"
},
"updated_at": "2025-01-14T12:00:00Z"
}
</pre>
<h3>7. Performance-Optimierung</h3>
<ul>
<li><strong>Asset Bundles:</strong> Lazy Loading grosser Assets</li>
<li><strong>Texture Compression:</strong> DXT/ETC2</li>
<li><strong>Object Pooling:</strong> Wiederverwendung von Objekten</li>
<li><strong>LOD:</strong> Level of Detail fuer 3D-Modelle</li>
<li><strong>Batching:</strong> Draw Call Reduktion</li>
</ul>
<h3>8. Loading Flow</h3>
<pre>
Seite geladen
v
┌───────────────────────────────────────┐
│ 1. Container initialisieren │
│ - Canvas vorbereiten │
│ - Loading UI anzeigen │
└─────────────────┬─────────────────────┘
v
┌───────────────────────────────────────┐
│ 2. Unity Loader │
│ - .data (Assets) │
│ - .wasm (Code) │
│ - .js (Framework) │
└─────────────────┬─────────────────────┘
v
┌───────────────────────────────────────┐
│ 3. Initialisierung │
│ - User Auth pruefen │
│ - Progress laden │
│ - Scene starten │
└─────────────────┬─────────────────────┘
v
┌───────────────────────────────────────┐
│ 4. Game Ready │
│ - Loading UI ausblenden │
│ - Input aktivieren │
└───────────────────────────────────────┘
</pre>
<h3>9. Analytics Events</h3>
<table>
<tr><th>Event</th><th>Daten</th><th>Verwendung</th></tr>
<tr><td>game_start</td><td>session_id</td><td>Session Tracking</td></tr>
<tr><td>level_complete</td><td>level, score, time</td><td>Progression</td></tr>
<tr><td>achievement</td><td>achievement_id</td><td>Engagement</td></tr>
<tr><td>error</td><td>error_type, details</td><td>Debugging</td></tr>
<tr><td>game_end</td><td>session_duration</td><td>Retention</td></tr>
</table>
<h3>10. Browser-Kompatibilitaet</h3>
<table>
<tr><th>Browser</th><th>Desktop</th><th>Mobile</th></tr>
<tr><td>Chrome</td><td>✓</td><td>✓</td></tr>
<tr><td>Firefox</td><td>✓</td><td>✓</td></tr>
<tr><td>Safari</td><td>✓</td><td>⚠ (iOS Limits)</td></tr>
<tr><td>Edge</td><td>✓</td><td>✓</td></tr>
</table>
`,
},
// Onboarding
onboarding: {
title: 'Onboarding System-Info',
description: 'Benutzer- und Schul-Onboarding Workflow.',
version: '2.0',
architecture: {
layers: [
{ title: 'Onboarding UI', components: ['Wizard', 'Progress Bar', 'Tutorials'], color: '#3b82f6' },
{ title: 'Workflow Engine', components: ['Step Manager', 'Validation', 'Skip Logic'], color: '#8b5cf6' },
{ title: 'Data Collection', components: ['Forms', 'File Upload', 'Verification'], color: '#10b981' },
{ title: 'Integration', components: ['CRM', 'School Service', 'Notification'], color: '#f59e0b' },
],
},
features: [
{ name: 'Multi-Step Wizard', status: 'active', description: 'Gefuehrter Prozess' },
{ name: 'Progress Tracking', status: 'active', description: 'Fortschrittsanzeige' },
{ name: 'Document Upload', status: 'active', description: 'Vertragsuploads' },
{ name: 'Self-Service', status: 'planned', description: 'Autonomes Onboarding' },
],
roadmap: [
{ phase: 'Phase 1: UX (Q1)', priority: 'high', items: ['Wizard Redesign', 'Mobile Optimization', 'Error Handling', 'Help System'] },
{ phase: 'Phase 2: Automation (Q2)', priority: 'medium', items: ['Auto-Verification', 'Document OCR', 'Pre-fill Data', 'Status Updates'] },
{ phase: 'Phase 3: Analytics (Q3)', priority: 'low', items: ['Funnel Analysis', 'Drop-off Points', 'A/B Testing', 'Conversion Optimization'] },
],
technicalDetails: [
{ component: 'Wizard', technology: 'React Hook Form', description: 'Form Management' },
{ component: 'Validation', technology: 'Zod', description: 'Schema Validation' },
{ component: 'Storage', technology: 'PostgreSQL', description: 'Progress Data' },
{ component: 'Files', technology: 'MinIO', description: 'Document Storage' },
],
auditInfo: [
{
category: 'Onboarding Status',
items: [
{ label: 'Conversion Rate', value: 'Tracking', status: 'ok' },
{ label: 'Avg. Completion Time', value: 'Tracking', status: 'ok' },
{ label: 'Drop-off Points', value: 'Analysiert', status: 'ok' },
{ label: 'Support Tickets', value: 'Tracking', status: 'ok' },
],
},
{
category: 'Prozess',
items: [
{ label: 'Wizard Steps', value: 'Konfiguriert', status: 'ok' },
{ label: 'Validation', value: 'Aktiv', status: 'ok' },
{ label: 'Document Upload', value: 'Aktiv', status: 'ok' },
{ label: 'Auto-Verification', value: 'Geplant', status: 'warning' },
],
},
{
category: 'Integration',
items: [
{ label: 'CRM Sync', value: 'Aktiv', status: 'ok' },
{ label: 'E-Mail Notifications', value: 'Aktiv', status: 'ok' },
{ label: 'School Service', value: 'Aktiv', status: 'ok' },
{ label: 'Billing', value: 'Aktiv', status: 'ok' },
],
},
],
fullDocumentation: `
<h2>Onboarding Wizard</h2>
<h3>1. Uebersicht</h3>
<p>Der Onboarding Wizard fuehrt neue Nutzer und Schulen durch den Registrierungsprozess. Er sammelt notwendige Daten, Dokumente und Consents.</p>
<h3>2. Wizard-Architektur</h3>
<pre>
┌─────────────────────────────────────────────────────────────────┐
│ Onboarding Wizard UI │
│ ┌────────────────────────────────────────────────────────────┐ │
│ │ Progress Bar: [=====> ] 40% │ │
│ └────────────────────────────────────────────────────────────┘ │
│ ┌────────────────────────────────────────────────────────────┐ │
│ │ Current Step │ │
│ │ │ │
│ │ ┌─────────────────────────────────────────────────┐ │ │
│ │ │ Form / Upload / Info │ │ │
│ │ └─────────────────────────────────────────────────┘ │ │
│ │ │ │
│ │ [ Zurueck ] [ Weiter ] │ │
│ └────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
</pre>
<h3>3. Wizard Steps (Schulen)</h3>
<table>
<tr><th>Step</th><th>Titel</th><th>Felder</th><th>Pflicht</th></tr>
<tr><td>1</td><td>Schuldaten</td><td>Name, Typ, Bundesland</td><td>Ja</td></tr>
<tr><td>2</td><td>Ansprechpartner</td><td>Name, E-Mail, Telefon</td><td>Ja</td></tr>
<tr><td>3</td><td>Adresse</td><td>Strasse, PLZ, Ort</td><td>Ja</td></tr>
<tr><td>4</td><td>Vertrag</td><td>Paket-Auswahl, Upload</td><td>Ja</td></tr>
<tr><td>5</td><td>Datenschutz</td><td>AVV, Consents</td><td>Ja</td></tr>
<tr><td>6</td><td>Bestaetigung</td><td>Zusammenfassung</td><td>-</td></tr>
</table>
<h3>4. API Endpoints</h3>
<table>
<tr><th>Endpoint</th><th>Methode</th><th>Beschreibung</th></tr>
<tr><td>/api/onboarding/start</td><td>POST</td><td>Wizard starten</td></tr>
<tr><td>/api/onboarding/{id}/step/{n}</td><td>GET</td><td>Step-Daten laden</td></tr>
<tr><td>/api/onboarding/{id}/step/{n}</td><td>POST</td><td>Step speichern</td></tr>
<tr><td>/api/onboarding/{id}/complete</td><td>POST</td><td>Abschliessen</td></tr>
<tr><td>/api/onboarding/{id}/status</td><td>GET</td><td>Fortschritt</td></tr>
</table>
<h3>5. Validation-Schema</h3>
<pre>
const schoolDataSchema = z.object({
name: z.string().min(2).max(100),
type: z.enum([
"grundschule",
"hauptschule",
"realschule",
"gymnasium",
"gesamtschule",
"berufsschule"
]),
bundesland: z.enum([...bundeslaender]),
studentCount: z.number().positive().optional(),
website: z.string().url().optional()
});
</pre>
<h3>6. Document Upload</h3>
<pre>
Dokument-Upload Flow:
1. Datei auswaehlen
└── Typ-Pruefung (PDF, max 10 MB)
2. Upload starten
└── Progress-Anzeige
3. Virus-Scan
└── ClamAV
4. Speicherung
└── MinIO mit Verschluesselung
5. Verifikation (optional)
└── Manuell oder OCR
</pre>
<h3>7. Status-Workflow</h3>
<pre>
┌──────────┐ ┌──────────┐ ┌───────────┐ ┌───────────┐
│ Started │ → │ Progress │ → │ Submitted │ → │ Verified │
└──────────┘ └──────────┘ └───────────┘ └───────────┘
│ │
│ v
│ ┌───────────┐
│ │ Activated │
│ └───────────┘
v
┌───────────┐
│ Incomplete│
└───────────┘
</pre>
<h3>8. E-Mail-Benachrichtigungen</h3>
<table>
<tr><th>Trigger</th><th>Template</th><th>Empfaenger</th></tr>
<tr><td>Start</td><td>Willkommen</td><td>Ansprechpartner</td></tr>
<tr><td>Pausiert (7 Tage)</td><td>Erinnerung</td><td>Ansprechpartner</td></tr>
<tr><td>Submitted</td><td>Bestaetigung</td><td>Ansprechpartner</td></tr>
<tr><td>Verified</td><td>Aktivierung</td><td>Ansprechpartner</td></tr>
<tr><td>Incomplete</td><td>Fehlende Daten</td><td>Ansprechpartner</td></tr>
</table>
<h3>9. Analytics</h3>
<ul>
<li><strong>Funnel:</strong> Drop-off pro Step</li>
<li><strong>Completion Rate:</strong> Abschlussquote</li>
<li><strong>Avg. Time:</strong> Durchschnittliche Dauer</li>
<li><strong>Error Rate:</strong> Validierungsfehler</li>
</ul>
<h3>10. A/B Testing (geplant)</h3>
<pre>
Test-Varianten:
├── Step-Reihenfolge
├── Formular-Layout
├── CTA-Texte
├── Hilfe-Inhalte
└── Erfolgsmeldungen
Metriken:
├── Conversion Rate
├── Time to Complete
└── Drop-off Rate
</pre>
`,
},
// Unity Bridge
unityBridge: {
title: 'Unity Bridge System-Info',
description: 'Kommunikationsschicht zwischen Web-App und Unity WebGL.',
version: '1.0',
architecture: {
layers: [
{ title: 'Web Interface', components: ['Message Bus', 'Event Handlers', 'State Sync'], color: '#3b82f6' },
{ title: 'Bridge Layer', components: ['jslib Interface', 'Message Queue', 'Serialization'], color: '#8b5cf6' },
{ title: 'Unity Side', components: ['C# Handlers', 'Event System', 'Data Models'], color: '#000000' },
{ title: 'Shared', components: ['Protocol Buffers', 'Type Definitions', 'Validation'], color: '#f59e0b' },
],
},
features: [
{ name: 'Bidirektionale Kommunikation', status: 'active', description: 'Web <-> Unity Messaging' },
{ name: 'State Synchronisation', status: 'active', description: 'Zustandsabgleich' },
{ name: 'Event System', status: 'active', description: 'Event-basierte Kommunikation' },
{ name: 'Type Safety', status: 'planned', description: 'Typsichere Schnittstelle' },
],
roadmap: [
{ phase: 'Phase 1: Stability (Q1)', priority: 'high', items: ['Error Handling', 'Reconnection Logic', 'Message Validation', 'Logging'] },
{ phase: 'Phase 2: Performance (Q2)', priority: 'medium', items: ['Message Batching', 'Compression', 'Lazy Loading', 'Memory Management'] },
{ phase: 'Phase 3: Features (Q3)', priority: 'low', items: ['Binary Protocol', 'Streaming', 'Debugging Tools', 'Hot Reload'] },
],
technicalDetails: [
{ component: 'Web', technology: 'TypeScript', description: 'Type-safe JS' },
{ component: 'Bridge', technology: 'jslib', description: 'Unity Plugin' },
{ component: 'Unity', technology: 'C#', description: 'Game Logic' },
{ component: 'Protocol', technology: 'JSON/Binary', description: 'Message Format' },
],
auditInfo: [
{
category: 'Bridge Status',
items: [
{ label: 'Connection', value: 'Aktiv', status: 'ok' },
{ label: 'Message Queue', value: 'Stabil', status: 'ok' },
{ label: 'Error Rate', value: '< 0.1%', status: 'ok' },
{ label: 'Latency', value: '< 10ms', status: 'ok' },
],
},
{
category: 'Protokoll',
items: [
{ label: 'Serialization', value: 'JSON', status: 'ok' },
{ label: 'Validation', value: 'Aktiv', status: 'ok' },
{ label: 'Compression', value: 'Geplant', status: 'warning' },
{ label: 'Binary Mode', value: 'Geplant', status: 'warning' },
],
},
{
category: 'Debugging',
items: [
{ label: 'Message Logging', value: 'Optional', status: 'ok' },
{ label: 'Performance Monitor', value: 'Aktiv', status: 'ok' },
{ label: 'Error Tracking', value: 'Sentry', status: 'ok' },
{ label: 'Dev Tools', value: 'In Entwicklung', status: 'warning' },
],
},
],
fullDocumentation: `
<h2>Unity Bridge - Web-Unity Kommunikation</h2>
<h3>1. Uebersicht</h3>
<p>Die Unity Bridge ermoeglicht bidirektionale Kommunikation zwischen der Web-Anwendung (JavaScript/TypeScript) und Unity WebGL (C#). Sie abstrahiert die jslib-Schnittstelle.</p>
<h3>2. Architektur</h3>
<pre>
┌─────────────────────────────────────────────────────────────────┐
│ Web Application │
│ ┌────────────────────────────────────────────────────────────┐ │
│ │ UnityBridge (TypeScript) │ │
│ │ ├── MessageBus │ │
│ │ ├── EventEmitter │ │
│ │ ├── StateSync │ │
│ │ └── ErrorHandler │ │
│ └────────────────────────────────────────────────────────────┘ │
│ │ │
│ │ SendMessage / Callback │
│ │ │
└──────────────────────────────┼───────────────────────────────────┘
┌──────────────────────────────┼───────────────────────────────────┐
│ Unity WebGL │
│ │ │
│ ┌────────────────────────────────────────────────────────────┐ │
│ │ BridgeManager (C#) │ │
│ │ ├── MessageReceiver │ │
│ │ ├── EventDispatcher │ │
│ │ ├── StateManager │ │
│ │ └── ExternalInterface (jslib) │ │
│ └────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
</pre>
<h3>3. Message-Protokoll</h3>
<pre>
{
"type": "event" | "command" | "query" | "response",
"id": "msg-uuid",
"timestamp": 1705234800000,
"channel": "game" | "ui" | "system",
"payload": {
"action": "player_score",
"data": {
"score": 100,
"level": 5
}
}
}
</pre>
<h3>4. JavaScript API</h3>
<pre>
// Bridge initialisieren
const bridge = new UnityBridge({
unityInstance: unityRef,
gameObjectName: "BridgeManager"
});
// Event an Unity senden
bridge.send("player.action", {
action: "jump",
force: 10
});
// Event von Unity empfangen
bridge.on("game.score", (data) => {
console.log("Score:", data.score);
});
// Query mit Response
const result = await bridge.query("game.state");
console.log("Current level:", result.level);
</pre>
<h3>5. C# API</h3>
<pre>
// BridgeManager.cs
public class BridgeManager : MonoBehaviour
{
// Von JavaScript empfangen
public void OnBridgeMessage(string json)
{
var message = JsonUtility.FromJson<BridgeMessage>(json);
HandleMessage(message);
}
// An JavaScript senden
public void SendToWeb(string channel, object data)
{
var json = JsonUtility.ToJson(data);
WebBridge.SendMessage(channel, json);
}
}
</pre>
<h3>6. Event-Kanaele</h3>
<table>
<tr><th>Kanal</th><th>Richtung</th><th>Beschreibung</th></tr>
<tr><td>game.*</td><td>Unity → Web</td><td>Game Events</td></tr>
<tr><td>player.*</td><td>Bidirektional</td><td>Player Actions</td></tr>
<tr><td>ui.*</td><td>Web → Unity</td><td>UI Commands</td></tr>
<tr><td>system.*</td><td>Bidirektional</td><td>System Events</td></tr>
<tr><td>auth.*</td><td>Web → Unity</td><td>Auth State</td></tr>
</table>
<h3>7. State Synchronisation</h3>
<pre>
Web State Unity State
│ │
│ ┌────────────────┐ │
├───>│ State Sync │<───┤
│ │ (Bidirectional) │
│ └────────────────┘ │
│ │
v v
┌─────────┐ ┌─────────┐
│ React │ │ Unity │
│ Store │ │ State │
└─────────┘ └─────────┘
Sync Events:
├── Initial Sync (Game Load)
├── Delta Sync (Changes only)
└── Full Sync (Recovery)
</pre>
<h3>8. Error Handling</h3>
<pre>
Error Types:
├── ConnectionError: Bridge nicht verbunden
├── TimeoutError: Keine Antwort
├── ParseError: JSON ungueltig
├── ValidationError: Schema-Fehler
└── UnityError: C#-Exception
Recovery:
├── Auto-Reconnect (3 Versuche)
├── Message Queue (bis reconnect)
└── Fallback UI (bei Dauerfehler)
</pre>
<h3>9. Performance</h3>
<table>
<tr><th>Metrik</th><th>Ziel</th><th>Messung</th></tr>
<tr><td>Latency</td><td>< 10ms</td><td>Per-Message</td></tr>
<tr><td>Throughput</td><td>1000 msg/s</td><td>Batch Test</td></tr>
<tr><td>Memory</td><td>< 1MB Queue</td><td>Monitoring</td></tr>
<tr><td>CPU</td><td>< 1%</td><td>Profiler</td></tr>
</table>
<h3>10. Debugging</h3>
<pre>
// Debug Mode aktivieren
bridge.setDebug(true);
// Message Inspector
bridge.onAny((channel, data) => {
console.log(\`[\${channel}]\`, data);
});
// Performance Monitor
bridge.getMetrics();
// {
// messagesSent: 1234,
// messagesReceived: 5678,
// avgLatency: 5.2,
// errors: 2
// }
</pre>
`,
},
// RAG System
rag: {
title: 'RAG System-Info',
description: 'Retrieval Augmented Generation fuer intelligente Dokumentensuche.',
version: '2.5',
architecture: {
layers: [
{ title: 'RAG UI', components: ['Chat Interface', 'Document Viewer', 'Source Citations'], color: '#3b82f6' },
{ title: 'RAG Pipeline', components: ['Query Processor', 'Retriever', 'Generator'], color: '#8b5cf6' },
{ title: 'Vector Store', components: ['Qdrant', 'Embedding Service', 'Index Manager'], color: '#10b981' },
{ title: 'Document Store', components: ['MinIO', 'PostgreSQL', 'Chunk Cache'], color: '#f59e0b' },
],
},
features: [
{ name: 'Semantic Search', status: 'active', description: 'Bedeutungsbasierte Suche' },
{ name: 'Source Citations', status: 'active', description: 'Quellenangaben in Antworten' },
{ name: 'Multi-Document', status: 'active', description: 'Suche ueber mehrere Dokumente' },
{ name: 'Hybrid Search', status: 'active', description: 'Kombination semantisch + keyword' },
{ name: 'Conversation Memory', status: 'planned', description: 'Kontextbewahrung' },
],
roadmap: [
{ phase: 'Phase 1: Quality (Q1)', priority: 'high', items: ['Relevanz-Tuning', 'Chunk Optimization', 'Re-Ranking', 'Answer Quality'] },
{ phase: 'Phase 2: Scale (Q2)', priority: 'high', items: ['Index Sharding', 'Cache Layer', 'Batch Processing', 'Multi-Tenant'] },
{ phase: 'Phase 3: Intelligence (Q3)', priority: 'medium', items: ['Query Expansion', 'Self-Reflection', 'Multi-Hop QA', 'Knowledge Graph'] },
],
technicalDetails: [
{ component: 'Vector DB', technology: 'Qdrant', version: '1.12+', description: 'Similarity Search' },
{ component: 'Embeddings', technology: 'OpenAI', description: 'text-embedding-3-large' },
{ component: 'LLM', technology: 'GPT-4o / Claude', description: 'Answer Generation' },
{ component: 'Chunking', technology: 'LangChain', description: 'Document Processing' },
],
privacyNotes: [
'Dokumente werden lokal verarbeitet',
'Embeddings enthalten keine Klartextdaten',
'LLM-Anfragen sind tenant-isoliert',
],
auditInfo: [
{
category: 'RAG Pipeline',
items: [
{ label: 'Indexierte Dokumente', value: 'Tracking', status: 'ok' },
{ label: 'Vector DB Status', value: 'Qdrant Online', status: 'ok' },
{ label: 'Embedding Model', value: 'text-embedding-3', status: 'ok' },
{ label: 'LLM Provider', value: 'Multi-Provider', status: 'ok' },
],
},
{
category: 'Qualitaet',
items: [
{ label: 'Retrieval Precision', value: 'Tracking', status: 'ok' },
{ label: 'Answer Accuracy', value: 'Evaluation', status: 'ok' },
{ label: 'Halluzinations-Rate', value: 'Monitoring', status: 'ok' },
{ label: 'Citation Accuracy', value: '> 95%', status: 'ok' },
],
},
{
category: 'Performance',
items: [
{ label: 'Avg. Latency', value: '< 3s', status: 'ok' },
{ label: 'Cache Hit Rate', value: '> 30%', status: 'ok' },
{ label: 'Concurrent Users', value: 'Skalierbar', status: 'ok' },
{ label: 'Cost per Query', value: 'Tracking', status: 'ok' },
],
},
],
fullDocumentation: `
<h2>RAG System - Retrieval Augmented Generation</h2>
<h3>1. Uebersicht</h3>
<p>Das RAG-System kombiniert Dokumenten-Retrieval mit LLM-Generation fuer praezise, quellenbasierte Antworten auf Nutzeranfragen.</p>
<h3>2. RAG-Pipeline</h3>
<pre>
User Query
v
┌───────────────────────────────────────────────────────────────┐
│ Query Processing │
│ ├── Query Analysis (Intent, Entities) │
│ ├── Query Expansion (Synonyme, Reformulierung) │
│ └── Embedding Generation │
└────────────────────────────┬──────────────────────────────────┘
v
┌───────────────────────────────────────────────────────────────┐
│ Retrieval │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ Vector Search │ │ Keyword Search │ │
│ │ (Qdrant) │ │ (PostgreSQL) │ │
│ └────────┬────────┘ └────────┬────────┘ │
│ │ │ │
│ └──────────┬───────────┘ │
│ v │
│ ┌─────────────────────┐ │
│ │ Hybrid Fusion │ │
│ │ (RRF Algorithm) │ │
│ └─────────────────────┘ │
└────────────────────────┬──────────────────────────────────────┘
v
┌───────────────────────────────────────────────────────────────┐
│ Re-Ranking │
│ ├── Cross-Encoder Scoring │
│ ├── Metadata Filtering │
│ └── Diversity Sampling │
└────────────────────────┬──────────────────────────────────────┘
v
┌───────────────────────────────────────────────────────────────┐
│ Generation │
│ ├── Context Assembly │
│ ├── Prompt Engineering │
│ ├── LLM Call (GPT-4o / Claude) │
│ └── Citation Extraction │
└────────────────────────┬──────────────────────────────────────┘
v
┌───────────────────────────────────────────────────────────────┐
│ Response │
│ ├── Answer Text │
│ ├── Source Citations │
│ └── Confidence Score │
└───────────────────────────────────────────────────────────────┘
</pre>
<h3>3. Chunking-Strategie</h3>
<table>
<tr><th>Parameter</th><th>Wert</th><th>Grund</th></tr>
<tr><td>Chunk Size</td><td>512 Tokens</td><td>Optimal fuer Retrieval</td></tr>
<tr><td>Overlap</td><td>50 Tokens</td><td>Kontext-Erhalt</td></tr>
<tr><td>Splitter</td><td>Semantic</td><td>Natuerliche Grenzen</td></tr>
<tr><td>Metadata</td><td>Document, Page, Section</td><td>Zitation</td></tr>
</table>
<h3>4. API Endpoints</h3>
<table>
<tr><th>Endpoint</th><th>Methode</th><th>Beschreibung</th></tr>
<tr><td>/api/rag/query</td><td>POST</td><td>Frage stellen</td></tr>
<tr><td>/api/rag/documents</td><td>GET</td><td>Dokumente listen</td></tr>
<tr><td>/api/rag/documents</td><td>POST</td><td>Dokument indexieren</td></tr>
<tr><td>/api/rag/collections</td><td>GET</td><td>Sammlungen</td></tr>
<tr><td>/api/rag/evaluate</td><td>POST</td><td>Antwort bewerten</td></tr>
</table>
<h3>5. Prompt-Template</h3>
<pre>
System:
Du bist ein hilfreicher Assistent fuer Bildungsinhalte.
Beantworte Fragen basierend auf den gegebenen Dokumenten.
Zitiere immer die Quellen in [1], [2] Format.
Wenn du dir nicht sicher bist, sage es.
Context:
[1] {chunk_1_text}
[2] {chunk_2_text}
[3] {chunk_3_text}
User:
{user_question}
Regeln:
- Nur Informationen aus dem Kontext verwenden
- Bei Unsicherheit "Ich weiss nicht" sagen
- Quellen mit [n] zitieren
- Praezise und strukturiert antworten
</pre>
<h3>6. Qualitaets-Metriken</h3>
<table>
<tr><th>Metrik</th><th>Beschreibung</th><th>Ziel</th></tr>
<tr><td>Precision@K</td><td>Relevante unter Top-K</td><td>> 80%</td></tr>
<tr><td>Recall@K</td><td>Gefundene Relevante</td><td>> 70%</td></tr>
<tr><td>NDCG</td><td>Ranking-Qualitaet</td><td>> 0.85</td></tr>
<tr><td>Answer Relevance</td><td>LLM-Evaluation</td><td>> 4/5</td></tr>
<tr><td>Faithfulness</td><td>Fakten-Treue</td><td>> 95%</td></tr>
</table>
<h3>7. Caching</h3>
<pre>
Cache-Strategie:
├── Query Cache
│ ├── Key: Query Embedding Hash
│ ├── TTL: 24 Stunden
│ └── Invalidierung: Bei Index-Update
├── Retrieval Cache
│ ├── Key: Query + Collection
│ ├── TTL: 1 Stunde
│ └── Top-K Results
└── Answer Cache
├── Key: Query Hash + Context Hash
├── TTL: 24 Stunden
└── Full Response
</pre>
<h3>8. Multi-Tenant</h3>
<ul>
<li><strong>Collection per Tenant:</strong> Isolierte Vektoren</li>
<li><strong>Access Control:</strong> RBAC auf Collection-Ebene</li>
<li><strong>Query Routing:</strong> Automatisch zu Tenant-Collection</li>
<li><strong>Audit-Log:</strong> Pro Tenant</li>
</ul>
<h3>9. Evaluation-Pipeline</h3>
<pre>
Test-Datensatz
├── Frage-Antwort-Paare (Golden Set)
v
┌───────────────────────────────────────┐
│ RAG Pipeline │
└─────────────────┬─────────────────────┘
v
┌───────────────────────────────────────┐
│ Evaluation Metrics │
│ ├── Retrieval: Precision, Recall │
│ ├── Generation: BLEU, ROUGE │
│ ├── LLM-as-Judge: Relevance, Correct │
│ └── Human Eval: Subset │
└─────────────────┬─────────────────────┘
v
┌───────────────────────────────────────┐
│ Report & Regression Detection │
└───────────────────────────────────────┘
</pre>
<h3>10. Optimierungs-Roadmap</h3>
<ol>
<li><strong>Hybrid Search:</strong> Kombination Vektor + Keyword (✓)</li>
<li><strong>Re-Ranking:</strong> Cross-Encoder (✓)</li>
<li><strong>Query Expansion:</strong> LLM-basiert (In Arbeit)</li>
<li><strong>Multi-Hop QA:</strong> Verkettete Abfragen (Geplant)</li>
<li><strong>Self-Reflection:</strong> Antwort-Pruefung (Geplant)</li>
</ol>
`,
},
workflow: {
title: 'BPMN Workflow Engine',
description: 'Camunda 7 basierte Geschaeftsprozess-Automatisierung',
version: '7.21.0',
architecture: {
layers: [
{
title: 'Frontend',
color: '#3b82f6',
components: ['bpmn-js Editor', 'React Components', 'Python Studio Module']
},
{
title: 'Backend',
color: '#8b5cf6',
components: ['FastAPI Proxy', 'Camunda REST API', 'Task Management']
},
{
title: 'BPMN Engine',
color: '#10b981',
components: ['Camunda 7', 'Process Executor', 'Job Executor']
},
{
title: 'Datenbank',
color: '#f59e0b',
components: ['PostgreSQL', 'Camunda Schema', 'Process History']
}
]
},
features: [
{ name: 'BPMN 2.0 Modellierung', status: 'active' as const, description: 'Visueller Prozess-Editor mit bpmn-js' },
{ name: 'Process Deployment', status: 'active' as const, description: 'Prozesse in Camunda deployen' },
{ name: 'Task Management', status: 'active' as const, description: 'User Tasks bearbeiten und delegieren' },
{ name: 'Service Tasks', status: 'active' as const, description: 'Automatische Serviceaufrufe' },
{ name: 'Timer Events', status: 'active' as const, description: 'Zeitgesteuerte Prozessschritte' },
{ name: 'Process History', status: 'planned' as const, description: 'Historische Prozessdaten und Analytics' }
],
roadmap: [
{
phase: 'Phase 1: Editor & Deployment',
priority: 'high' as const,
items: ['bpmn-js Editor Integration', 'Camunda Docker Setup', 'REST API Proxy', 'Task Inbox']
},
{
phase: 'Phase 2: Consent Workflow',
priority: 'high' as const,
items: ['Document Status BPMN', 'DSB Approval Task', 'Scheduled Publishing', 'Notification Tasks']
},
{
phase: 'Phase 3: GDPR Workflows',
priority: 'medium' as const,
items: ['DSR Request Processing', 'Deadline Monitoring', 'Data Export Automation', 'Deletion Workflow']
}
],
technicalDetails: [
{ component: 'BPMN Engine', technology: 'Camunda 7.21.0', description: 'Apache 2.0 Lizenz' },
{ component: 'Editor Library', technology: 'bpmn-js', version: '17.11.1' },
{ component: 'API Port', technology: '8089', description: 'REST API Proxy' },
{ component: 'Datenbank', technology: 'PostgreSQL', description: 'camunda Schema' }
],
privacyNotes: [
'Prozessdaten werden lokal in PostgreSQL gespeichert',
'Keine externen Cloud-Dienste fuer BPMN-Engine',
'Camunda Community Edition unter Apache 2.0 Lizenz',
'Audit-Trail fuer alle Prozessaktivitaeten'
],
auditInfo: [
{
category: 'Camunda Engine',
items: [
{ label: 'Version', value: '7.21.0', status: 'ok' as const },
{ label: 'Lizenz', value: 'Apache 2.0', status: 'ok' as const },
{ label: 'Health Check', value: '/api/bpmn/health', status: 'ok' as const }
]
},
{
category: 'Datenschutz',
items: [
{ label: 'Datenstandort', value: 'Lokal (PostgreSQL)', status: 'ok' as const },
{ label: 'Audit-Trail', value: 'Aktiviert', status: 'ok' as const },
{ label: 'Externe Dienste', value: 'Keine', status: 'ok' as const }
]
}
],
fullDocumentation: `
<h2>BPMN Workflow Engine - Dokumentation</h2>
<h3>1. Uebersicht</h3>
<p>Die BPMN Workflow Engine basiert auf Camunda 7 (Apache 2.0 Lizenz) und ermoeglicht die Modellierung und Automatisierung von Geschaeftsprozessen.</p>
<h3>2. API-Endpoints</h3>
<table>
<tr><th>Endpoint</th><th>Methode</th><th>Beschreibung</th></tr>
<tr><td>/api/bpmn/health</td><td>GET</td><td>Engine Health-Check</td></tr>
<tr><td>/api/bpmn/process-definition</td><td>GET</td><td>Alle Prozess-Definitionen</td></tr>
<tr><td>/api/bpmn/process-definition/{key}/start</td><td>POST</td><td>Prozess starten</td></tr>
<tr><td>/api/bpmn/task</td><td>GET</td><td>Offene Tasks</td></tr>
<tr><td>/api/bpmn/task/{id}/complete</td><td>POST</td><td>Task abschliessen</td></tr>
<tr><td>/api/bpmn/deployment/create</td><td>POST</td><td>BPMN deployen</td></tr>
</table>
<h3>3. Camunda starten</h3>
<pre>
# Mit BPMN-Profil starten
docker-compose --profile bpmn up -d camunda
# Web UI oeffnen
open http://localhost:8089/camunda
</pre>
<h3>4. Lizenz</h3>
<p><strong>Apache License 2.0</strong> - Die Camunda Community Edition ist vollstaendig Open Source und darf ohne Einschraenkungen kommerziell genutzt werden.</p>
`,
},
}