# BreakPilot - System-Architektur

## Uebersicht

BreakPilot ist eine modulare Bildungs- und Compliance-Plattform, aufgeteilt in drei unabhaengige Docker Compose Projekte:

```
┌────────────────────────────────────────────────────────────────────────────┐
│                              Browser                                       │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐  │
│  │ Studio v2    │  │ Admin Lehrer │  │ Admin Compl. │  │ Dev Portal   │  │
│  │ (443)        │  │ (3002)       │  │ (3007)       │  │ (3006)       │  │
│  └──────┬───────┘  └──────┬───────┘  └──────┬───────┘  └──────┬───────┘  │
└─────────┼──────────────────┼──────────────────┼──────────────────┼─────────┘
          │                  │                  │                  │
          ▼                  ▼                  ▼                  ▼
┌─────────────────────────────────────────────────────────────────────────────┐
│                        bp-core-nginx (Reverse Proxy + TLS)                  │
│                   Ports: 80, 443, 3000-3008, 8000-8097                      │
└────────┬──────────────────┬──────────────────┬──────────────────────────────┘
         │                  │                  │
         ▼                  ▼                  ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ breakpilot-core │ │breakpilot-lehrer│ │breakpilot-compl.│
│   (Shared)      │ │   (Team A)      │ │   (Team B)      │
│                 │ │                 │ │                 │
│ PostgreSQL      │ │ Studio v2       │ │ Admin Compliance│
│ Valkey          │ │ Admin Lehrer    │ │ Developer Portal│
│ Vault           │ │ Website         │ │ Backend Compl.  │
│ Qdrant          │ │ Backend Lehrer  │ │ AI Compliance   │
│ MinIO           │ │ Klausur Service │ │   SDK (Go)      │
│ Embedding       │ │ Voice Service   │ │ DSMS (IPFS)     │
│ RAG Service     │ │ School Service  │ │ Document Crawler│
│ Consent (Go)    │ │ Geo Service     │ │                 │
│ Billing (Go)    │ │ PaddleOCR       │ │                 │
│ Backend Core    │ │ Agent Core      │ │                 │
│ Admin Core      │ │ Transcription   │ │                 │
│ Jitsi (5x)      │ │ BreakPilot Drive│ │                 │
│ Night Scheduler │ │                 │ │                 │
│ Health Agg.     │ │                 │ │                 │
│ Gitea Actions  │ │                 │ │                 │
│ ERP (optional)  │ │                 │ │                 │
└─────────────────┘ └─────────────────┘ └─────────────────┘
         │                  │                  │
         └──────────────────┴──────────────────┘
                    breakpilot-network
                  (gemeinsames Docker-Netzwerk)
```

---

## Drei-Projekt-Architektur

### breakpilot-core (Shared Infrastructure)

Stellt gemeinsam genutzte Infrastruktur bereit. Beide Teams (Lehrer + Compliance) haengen von Core ab.

**Container-Prefix:** `bp-core-*`

| Kategorie | Services |
|-----------|----------|
| Datenbank & Cache | PostgreSQL (PostGIS 16), Valkey |
| Security | Vault, Vault-Init, Vault-Agent |
| AI/ML | Embedding Service, RAG Service, Qdrant |
| Storage | MinIO (S3) |
| Business Logic | Consent Service (Go), Billing Service (Go), Backend Core (Python) |
| Frontend | Admin Core (Next.js, Port 3008) |
| Networking | Nginx (Reverse Proxy + TLS) |
| Monitoring | Health Aggregator |
| DevOps | Gitea, Gitea Actions (act_runner), Night Scheduler, Mailpit |
| Kommunikation | Jitsi Meet (5 Container), Synapse (Matrix Chat) |
| ERP | ERPNext (optional, 9 Container) |

### breakpilot-lehrer (Team A: Bildung)

Alle Services fuer Lehrkraefte und den Bildungsbereich.

**Container-Prefix:** `bp-lehrer-*`

| Service | Container | Port | Beschreibung |
|---------|-----------|------|--------------|
| Admin Lehrer | bp-lehrer-admin | 3002 | Lehrer-Dashboard (Next.js) |
| Studio v2 | bp-lehrer-studio-v2 | 443 | Lehrer-/Schueler-Studio (Next.js) |
| Website | bp-lehrer-website | 3000 | Oeffentliche Website (Next.js) |
| Backend Lehrer | bp-lehrer-backend | 8001 | API Backend (Python/FastAPI) |
| Klausur Service | bp-lehrer-klausur-service | 8086 | Pruefungen, OCR, RAG (Python) |
| School Service | bp-lehrer-school-service | 8084 | Schulverwaltung (Go) |
| Voice Service | bp-lehrer-voice-service | 8091 | Spracheingabe (Python) |
| Geo Service | bp-lehrer-geo-service | 8088 | Geo-Daten/PostGIS (Python) |
| PaddleOCR | bp-lehrer-paddleocr | - | OCR Engine (Profil: ocr) |
| BreakPilot Drive | bp-lehrer-breakpilot-drive | - | Lernspiel (Profil: game) |
| Agent Core | bp-lehrer-agent-core | - | Multi-Agent System (Profil: dev) |
| Transcription Worker | bp-lehrer-transcription | - | Audio-Transkription (Profil: recording) |

### breakpilot-compliance (Team B: DSGVO/Compliance)

Alle Services fuer das Compliance-Produkt (DSGVO, AI Act, BSI).

**Container-Prefix:** `bp-compliance-*`

| Service | Container | Port | Beschreibung |
|---------|-----------|------|--------------|
| Admin Compliance | bp-compliance-admin | 3007 | Compliance-Dashboard (Next.js) |
| Developer Portal | bp-compliance-developer-portal | 3006 | API-Dokumentation (Next.js) |
| Backend Compliance | bp-compliance-backend | 8002 | Compliance API (Python/FastAPI) |
| AI Compliance SDK | bp-compliance-ai-sdk | 8090/8093 | DSGVO-konforme KI (Go) |
| DSMS Node | bp-compliance-dsms-node | 4001/5001 | IPFS Node |
| DSMS Gateway | bp-compliance-dsms-gateway | 8082 | IPFS Gateway (Node.js) |
| Document Crawler | bp-compliance-document-crawler | 8098 | Web-Crawler (Python) |

---

## Netzwerk-Architektur

### Gemeinsames Docker-Netzwerk

Alle drei Projekte nutzen dasselbe Docker-Netzwerk `breakpilot-network`:

```yaml
# In jedem docker-compose.yml:
networks:
  breakpilot-network:
    external: true
```

Container koennen sich gegenseitig ueber ihre Container-Namen erreichen:
- `bp-lehrer-backend` → `bp-core-postgres:5432`
- `bp-compliance-ai-sdk` → `bp-core-qdrant:6333`
- `bp-core-nginx` → `bp-lehrer-studio-v2:3001`

### Nginx Routing

Der zentrale Nginx in Core routet alle Anfragen an die richtigen Container:

| Port | Upstream | Projekt |
|------|----------|---------|
| 443 | bp-lehrer-studio-v2:3001 + Jitsi | Lehrer + Core |
| 3000 | bp-lehrer-website:3000 | Lehrer |
| 3002 | bp-lehrer-admin:3000 | Lehrer |
| 3006 | bp-compliance-developer-portal:3000 | Compliance |
| 3007 | bp-compliance-admin:3000 | Compliance |
| 3008 | bp-core-admin:3000 | Core |
| 8000 | bp-core-backend:8000 | Core |
| 8001 | bp-lehrer-backend:8001 | Lehrer |
| 8002 | bp-compliance-backend:8002 | Compliance |
| 8086 | bp-lehrer-klausur-service:8086 | Lehrer |
| 8091 | bp-lehrer-voice-service:8091 | Lehrer |
| 8093 | bp-compliance-ai-sdk:8090 | Compliance |
| 8443 | bp-core-jitsi-web:80 | Core |

---

## Sicherheit

### Authentifizierung & Autorisierung

| Schicht | Komponente | Beschreibung |
|---------|------------|--------------|
| **Authentifizierung** | Keycloak (Prod) / Lokales JWT (Dev) | Token-Validierung via JWKS oder HS256 |
| **Autorisierung** | RBAC (Eigenentwicklung) | Domaenenspezifische Berechtigungen |

### Basis-Rollen

| Rolle | Beschreibung |
|-------|--------------|
| `user` | Normaler Benutzer |
| `teacher` / `lehrer` | Lehrkraft |
| `admin` | Administrator |
| `data_protection_officer` | Datenschutzbeauftragter |

### Sicherheitsfeatures

- JWT-basierte Authentifizierung (RS256/HS256)
- CORS konfiguriert pro Service
- DSGVO-konformes Consent-Management (Core)
- **HashiCorp Vault** fuer Secrets-Management
- **DevSecOps Pipeline** mit Trivy, Semgrep, Gitleaks

Siehe:
- [Auth-System](auth-system.md)
- [Secrets Management](secrets-management.md)
- [DevSecOps](devsecops.md)

---

## Deployment

### Start-Reihenfolge

```bash
# 1. Core zuerst (Infrastruktur)
docker compose -f breakpilot-core/docker-compose.yml up -d

# 2. Lehrer-Stack
docker compose -f breakpilot-lehrer/docker-compose.yml up -d

# 3. Compliance-Stack
docker compose -f breakpilot-compliance/docker-compose.yml up -d
```

### Health-Checks

```bash
# Core Health (alle Infrastruktur-Services)
curl https://macmini:8099/health

# Lehrer Backend
curl https://macmini:8001/health

# Compliance Backend
curl https://macmini:8002/health

# AI SDK
curl https://macmini:8093/health
```

---

## Erweiterung

### Neuen Service zu einem Projekt hinzufuegen

1. Service-Definition in das jeweilige `docker-compose.yml` hinzufuegen
2. Container-Name mit dem richtigen Prefix versehen (`bp-core-*`, `bp-lehrer-*`, `bp-compliance-*`)
3. Netzwerk `breakpilot-network` zuweisen
4. Falls HTTPS noetig: Nginx-Route in `breakpilot-core/nginx/conf.d/default.conf` hinzufuegen
5. Dokumentation in der jeweiligen MkDocs-Instanz aktualisieren
