Website (14 monoliths split): - compliance/page.tsx (1,519 → 9), docs/audit (1,262 → 20) - quality (1,231 → 16), alerts (1,203 → 10), docs (1,202 → 11) - i18n.ts (1,173 → 8 language files) - unity-bridge (1,094 → 12), backlog (1,087 → 6) - training (1,066 → 8), rag (1,063 → 8) - Deleted index_original.ts (4,899 LOC dead backup) Studio-v2 (5 monoliths split): - meet/page.tsx (1,481 → 9), messages (1,166 → 9) - AlertsB2BContext.tsx (1,165 → 5 modules) - alerts-b2b/page.tsx (1,019 → 6), korrektur/archiv (1,001 → 6) All existing imports preserved. Zero new TypeScript errors. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
387 lines
27 KiB
TypeScript
387 lines
27 KiB
TypeScript
/**
|
|
* Static data for Developer Documentation Page
|
|
*/
|
|
|
|
import type { ServiceNode, ArchitectureLayer, ServiceDefinition } from './types'
|
|
|
|
// Documentation paths for VS Code links
|
|
export const docPaths: Record<string, string> = {
|
|
'postgres': 'docs/architecture/data-model.md',
|
|
'backend': 'docs/backend/README.md',
|
|
'consent-service': 'docs/consent-service/README.md',
|
|
'billing-service': 'docs/billing/billing-service-api.md',
|
|
'edu-search-service': 'docs/api/edu-search-seeds-api.md',
|
|
'dsms-gateway': 'docs/dsms/README.md',
|
|
'pca-platform': 'docs/api/pca-platform-api.md',
|
|
'matrix-synapse': 'docs/matrix/README.md',
|
|
'jitsi': 'docs/jitsi/README.md',
|
|
'mailpit': 'docs/guides/email-and-auth-testing.md',
|
|
'llm-gateway': 'docs/llm-platform/README.md',
|
|
'website': 'docs/website/README.md',
|
|
'opensearch': 'docs/llm-platform/guides/ollama-setup.md',
|
|
'klausur': 'klausur-service/docs/RAG-Admin-Spec.md',
|
|
'qdrant': 'klausur-service/docs/RAG-Admin-Spec.md',
|
|
'minio': 'klausur-service/docs/RAG-Admin-Spec.md',
|
|
}
|
|
|
|
// Base path for project (used for VS Code links)
|
|
export const PROJECT_BASE_PATH = '/Users/benjaminadmin/Projekte/breakpilot-pwa'
|
|
|
|
// All services in the architecture (30+ services)
|
|
export const ARCHITECTURE_SERVICES: ServiceNode[] = [
|
|
// Frontends
|
|
{ id: 'website', name: 'Admin Frontend', type: 'frontend', port: '3000', technology: 'Next.js 15', description: 'Admin Dashboard, Edu-Search, DSMS, Consent', connections: ['backend', 'consent-service'] },
|
|
{ id: 'studio', name: 'Lehrer Studio', type: 'frontend', port: '8000', technology: 'FastAPI + JS', description: 'Klausur, School, Stundenplan Module', connections: ['backend'] },
|
|
{ id: 'creator', name: 'Creator Studio', type: 'frontend', port: '-', technology: 'Vue 3', description: 'Content Creation Interface', connections: ['backend'] },
|
|
{ id: 'policy-ui', name: 'Policy Vault UI', type: 'frontend', port: '4200', technology: 'Angular 17', description: 'Richtlinien-Verwaltung', connections: ['policy-api'] },
|
|
|
|
// Python Backend
|
|
{ id: 'backend', name: 'Main Backend', type: 'backend', port: '8000', technology: 'Python FastAPI', description: 'Haupt-API, DevSecOps, Studio UI', connections: ['postgres', 'vault', 'redis', 'qdrant', 'minio'] },
|
|
{ id: 'klausur', name: 'Klausur Service', type: 'backend', port: '8086', technology: 'Python FastAPI', description: 'BYOEH Abitur-Klausurkorrektur, RAG Admin, NiBiS Ingestion', connections: ['postgres', 'minio', 'qdrant'] },
|
|
|
|
// Go Microservices
|
|
{ id: 'consent-service', name: 'Consent Service', type: 'backend', port: '8081', technology: 'Go Gin', description: 'DSGVO Consent Management', connections: ['postgres'] },
|
|
{ id: 'school-service', name: 'School Service', type: 'backend', port: '8084', technology: 'Go Gin', description: 'Klausuren, Noten, Zeugnisse', connections: ['postgres'] },
|
|
{ id: 'billing-service', name: 'Billing Service', type: 'backend', port: '8083', technology: 'Go Gin', description: 'Stripe Integration', connections: ['postgres'] },
|
|
{ id: 'dsms-gateway', name: 'DSMS Gateway', type: 'backend', port: '8082', technology: 'Go', description: 'IPFS REST API', connections: ['ipfs'] },
|
|
|
|
// Node.js Services
|
|
{ id: 'h5p', name: 'H5P Service', type: 'backend', port: '8085', technology: 'Node.js', description: 'Interaktive Inhalte', connections: ['postgres', 'minio'] },
|
|
{ id: 'policy-api', name: 'Policy Vault API', type: 'backend', port: '3001', technology: 'NestJS', description: 'Richtlinien-Verwaltung API', connections: ['postgres'] },
|
|
|
|
// Databases
|
|
{ id: 'postgres', name: 'PostgreSQL', type: 'database', port: '5432', technology: 'PostgreSQL 16', description: 'Hauptdatenbank', connections: [] },
|
|
{ id: 'synapse-db', name: 'Synapse DB', type: 'database', port: '-', technology: 'PostgreSQL 16', description: 'Matrix Datenbank', connections: [] },
|
|
{ id: 'mariadb', name: 'MariaDB', type: 'database', port: '-', technology: 'MariaDB 10.6', description: 'ERPNext Datenbank', connections: [] },
|
|
{ id: 'mongodb', name: 'MongoDB', type: 'database', port: '27017', technology: 'MongoDB 7', description: 'LibreChat Datenbank', connections: [] },
|
|
|
|
// Cache & Queue
|
|
{ id: 'redis', name: 'Redis', type: 'cache', port: '6379', technology: 'Redis Alpine', description: 'Cache & Sessions', connections: [] },
|
|
|
|
// Search Engines
|
|
{ id: 'qdrant', name: 'Qdrant', type: 'search', port: '6333', technology: 'Qdrant 1.7', description: 'Vector DB - NiBiS EWH (7352 Chunks), BYOEH', connections: [] },
|
|
{ id: 'opensearch', name: 'OpenSearch', type: 'search', port: '9200', technology: 'OpenSearch 2.x', description: 'Volltext-Suche', connections: [] },
|
|
{ id: 'meilisearch', name: 'Meilisearch', type: 'search', port: '7700', technology: 'Meilisearch', description: 'Instant Search', connections: [] },
|
|
|
|
// Storage
|
|
{ id: 'minio', name: 'MinIO', type: 'storage', port: '9000/9001', technology: 'MinIO', description: 'S3-kompatibel - RAG Dokumente, Landes/Lehrer-Daten', connections: [] },
|
|
{ id: 'ipfs', name: 'IPFS (Kubo)', type: 'storage', port: '5001', technology: 'IPFS 0.24', description: 'Dezentral', connections: [] },
|
|
|
|
// Security
|
|
{ id: 'vault', name: 'Vault', type: 'security', port: '8200', technology: 'HashiCorp Vault', description: 'Secrets Management', connections: [] },
|
|
{ id: 'keycloak', name: 'Keycloak', type: 'security', port: '8180', technology: 'Keycloak 23', description: 'SSO/OIDC', connections: ['postgres'] },
|
|
|
|
// Communication
|
|
{ id: 'synapse', name: 'Matrix Synapse', type: 'communication', port: '8008', technology: 'Matrix', description: 'E2EE Messenger', connections: ['synapse-db'] },
|
|
{ id: 'jitsi', name: 'Jitsi Meet', type: 'communication', port: '8443', technology: 'Jitsi', description: 'Videokonferenz', connections: [] },
|
|
|
|
// AI/LLM
|
|
{ id: 'librechat', name: 'LibreChat', type: 'ai', port: '3080', technology: 'LibreChat', description: 'Multi-LLM Chat', connections: ['mongodb', 'qdrant'] },
|
|
{ id: 'ragflow', name: 'RAGFlow', type: 'ai', port: '9380', technology: 'RAGFlow', description: 'RAG Pipeline', connections: ['qdrant', 'opensearch'] },
|
|
|
|
// ERP
|
|
{ id: 'erpnext', name: 'ERPNext', type: 'erp', port: '8090', technology: 'ERPNext v15', description: 'Open Source ERP', connections: ['mariadb', 'redis'] },
|
|
]
|
|
|
|
// Architecture layers
|
|
export const LAYERS: ArchitectureLayer[] = [
|
|
{ id: 'presentation', name: 'Presentation Layer', description: 'User Interfaces & Frontends', types: ['frontend'] },
|
|
{ id: 'application', name: 'Application Layer', description: 'Business Logic & APIs', types: ['backend'] },
|
|
{ id: 'data', name: 'Data Layer', description: 'Databases, Cache & Search', types: ['database', 'cache', 'search'] },
|
|
{ id: 'infrastructure', name: 'Infrastructure Layer', description: 'Storage, Security & Communication', types: ['storage', 'security', 'communication', 'ai', 'erp'] },
|
|
]
|
|
|
|
// Service definitions with ports, technologies, and API info
|
|
export const services: ServiceDefinition[] = [
|
|
{
|
|
id: 'postgres',
|
|
name: 'PostgreSQL',
|
|
type: 'database',
|
|
port: 5432,
|
|
container: 'breakpilot-pwa-postgres',
|
|
description: 'Zentrale Datenbank für alle Services',
|
|
purpose: 'Persistente Datenspeicherung für Benutzer, Dokumente, Consents und alle Anwendungsdaten mit pgvector für Embedding-Suche.',
|
|
tech: ['PostgreSQL 15', 'pgvector'],
|
|
healthEndpoint: null,
|
|
endpoints: [],
|
|
envVars: ['POSTGRES_USER', 'POSTGRES_PASSWORD', 'POSTGRES_DB'],
|
|
},
|
|
{
|
|
id: 'backend',
|
|
name: 'Python Backend',
|
|
type: 'backend',
|
|
port: 8000,
|
|
container: 'breakpilot-pwa-backend',
|
|
description: 'FastAPI Backend mit AI-Integration und GDPR-Export',
|
|
purpose: 'Zentrale API-Schicht für das Studio-Frontend mit AI-gestützter Arbeitsblatt-Generierung, Multi-LLM-Integration und DSGVO-konformem Datenexport.',
|
|
tech: ['Python 3.11', 'FastAPI', 'SQLAlchemy', 'Pydantic'],
|
|
healthEndpoint: '/health',
|
|
endpoints: [
|
|
{ method: 'GET', path: '/api/v1/health', description: 'Health Check' },
|
|
{ method: 'POST', path: '/api/v1/chat', description: 'AI Chat Endpoint' },
|
|
{ method: 'GET', path: '/api/v1/gdpr/export', description: 'DSGVO Datenexport' },
|
|
{ method: 'POST', path: '/api/v1/seeds', description: 'Edu Search Seeds' },
|
|
],
|
|
envVars: ['DATABASE_URL', 'JWT_SECRET', 'OPENAI_API_KEY', 'ANTHROPIC_API_KEY'],
|
|
},
|
|
{
|
|
id: 'consent-service',
|
|
name: 'Consent Service',
|
|
type: 'backend',
|
|
port: 8081,
|
|
container: 'breakpilot-pwa-consent-service',
|
|
description: 'Go-basierter Consent-Management-Service',
|
|
purpose: 'DSGVO-konforme Einwilligungsverwaltung mit Versionierung, Audit-Trail und rechtssicherer Dokumentenspeicherung für Schulen.',
|
|
tech: ['Go 1.21', 'Gin', 'GORM', 'JWT'],
|
|
healthEndpoint: '/health',
|
|
endpoints: [
|
|
{ method: 'GET', path: '/api/v1/health', description: 'Health Check' },
|
|
{ method: 'GET', path: '/api/v1/consent/check', description: 'Consent Status pruefen' },
|
|
{ method: 'POST', path: '/api/v1/consent/grant', description: 'Consent erteilen' },
|
|
{ method: 'GET', path: '/api/v1/documents', description: 'Rechtsdokumente abrufen' },
|
|
{ method: 'GET', path: '/api/v1/communication/status', description: 'Matrix/Jitsi Status' },
|
|
{ method: 'POST', path: '/api/v1/communication/rooms', description: 'Matrix Raum erstellen' },
|
|
{ method: 'POST', path: '/api/v1/communication/meetings', description: 'Jitsi Meeting erstellen' },
|
|
],
|
|
envVars: ['DATABASE_URL', 'JWT_SECRET', 'PORT', 'MATRIX_HOMESERVER_URL', 'JITSI_BASE_URL'],
|
|
},
|
|
{
|
|
id: 'billing-service',
|
|
name: 'Billing Service',
|
|
type: 'backend',
|
|
port: 8083,
|
|
container: 'breakpilot-pwa-billing-service',
|
|
description: 'Stripe-basiertes Billing mit Trial & Subscription',
|
|
purpose: 'Monetarisierung der Plattform mit 7-Tage-Trial, gestuften Abo-Modellen (Basic/Standard/Premium) und automatischer Nutzungslimitierung.',
|
|
tech: ['Go 1.21', 'Gin', 'Stripe API', 'pgx'],
|
|
healthEndpoint: '/health',
|
|
endpoints: [
|
|
{ method: 'GET', path: '/api/v1/billing/status', description: 'Subscription Status' },
|
|
{ method: 'POST', path: '/api/v1/billing/trial/start', description: 'Trial starten' },
|
|
{ method: 'POST', path: '/api/v1/billing/webhook', description: 'Stripe Webhooks' },
|
|
],
|
|
envVars: ['DATABASE_URL', 'STRIPE_SECRET_KEY', 'STRIPE_WEBHOOK_SECRET'],
|
|
},
|
|
{
|
|
id: 'edu-search-service',
|
|
name: 'Edu Search Service',
|
|
type: 'backend',
|
|
port: 8086,
|
|
container: 'breakpilot-edu-search',
|
|
description: 'Bildungsquellen-Crawler mit OpenSearch-Integration',
|
|
purpose: 'Automatisches Crawlen und Indexieren von Bildungsressourcen (OER, Lehrpläne, Schulbücher) für RAG-gestützte Arbeitsblatterstellung.',
|
|
tech: ['Go 1.23', 'Gin', 'OpenSearch', 'Colly'],
|
|
healthEndpoint: '/v1/health',
|
|
endpoints: [
|
|
{ method: 'GET', path: '/v1/health', description: 'Health Check' },
|
|
{ method: 'GET', path: '/v1/search', description: 'Dokumentensuche' },
|
|
{ method: 'POST', path: '/v1/crawl/start', description: 'Crawler starten' },
|
|
{ method: 'GET', path: '/api/v1/staff/stats', description: 'Staff Statistiken' },
|
|
{ method: 'POST', path: '/api/v1/admin/crawl/staff', description: 'Staff Crawl starten' },
|
|
],
|
|
envVars: ['OPENSEARCH_URL', 'DB_HOST', 'DB_USER', 'DB_PASSWORD'],
|
|
},
|
|
{
|
|
id: 'dsms-gateway',
|
|
name: 'DSMS Gateway',
|
|
type: 'backend',
|
|
port: 8082,
|
|
container: 'breakpilot-pwa-dsms-gateway',
|
|
description: 'Datenschutz-Management Gateway',
|
|
purpose: 'Dezentrale Dokumentenspeicherung mit IPFS-Integration für manipulationssichere Audit-Logs und Rechtsdokumente.',
|
|
tech: ['Go 1.21', 'Gin', 'IPFS'],
|
|
healthEndpoint: '/health',
|
|
endpoints: [
|
|
{ method: 'GET', path: '/health', description: 'Health Check' },
|
|
{ method: 'POST', path: '/api/v1/documents', description: 'Dokument speichern' },
|
|
],
|
|
envVars: ['IPFS_URL', 'DATABASE_URL'],
|
|
},
|
|
{
|
|
id: 'pca-platform',
|
|
name: 'PCA Platform',
|
|
type: 'backend',
|
|
port: 8084,
|
|
container: 'breakpilot-pca-platform',
|
|
description: 'Payment Card Adapter für Taschengeld-Management',
|
|
purpose: 'Fintech-Integration für Schüler-Taschengeld mit virtuellen Karten, Spending-Limits und Echtzeit-Transaktionsverfolgung für Eltern.',
|
|
tech: ['Go 1.21', 'Gin', 'Stripe Issuing', 'pgx'],
|
|
healthEndpoint: '/health',
|
|
endpoints: [
|
|
{ method: 'GET', path: '/api/v1/health', description: 'Health Check' },
|
|
{ method: 'POST', path: '/api/v1/cards/create', description: 'Virtuelle Karte erstellen' },
|
|
{ method: 'GET', path: '/api/v1/transactions', description: 'Transaktionen abrufen' },
|
|
{ method: 'POST', path: '/api/v1/wallet/topup', description: 'Wallet aufladen' },
|
|
],
|
|
envVars: ['DATABASE_URL', 'STRIPE_SECRET_KEY', 'STRIPE_WEBHOOK_SECRET'],
|
|
},
|
|
{
|
|
id: 'matrix-synapse',
|
|
name: 'Matrix Synapse',
|
|
type: 'communication',
|
|
port: 8448,
|
|
container: 'breakpilot-synapse',
|
|
description: 'Ende-zu-Ende verschlüsselter Messenger',
|
|
purpose: 'Sichere Kommunikation zwischen Lehrern und Eltern mit E2EE, Raum-Management und DSGVO-konformer Nachrichtenspeicherung.',
|
|
tech: ['Matrix Protocol', 'Synapse', 'PostgreSQL'],
|
|
healthEndpoint: '/_matrix/client/versions',
|
|
endpoints: [
|
|
{ method: 'GET', path: '/_matrix/client/versions', description: 'Client Versions' },
|
|
{ method: 'POST', path: '/_matrix/client/v3/login', description: 'Matrix Login' },
|
|
{ method: 'POST', path: '/_matrix/client/v3/createRoom', description: 'Raum erstellen' },
|
|
],
|
|
envVars: ['SYNAPSE_SERVER_NAME', 'POSTGRES_HOST', 'SYNAPSE_REGISTRATION_SHARED_SECRET'],
|
|
},
|
|
{
|
|
id: 'jitsi',
|
|
name: 'Jitsi Meet',
|
|
type: 'communication',
|
|
port: 8443,
|
|
container: 'breakpilot-jitsi',
|
|
description: 'Videokonferenz-Plattform',
|
|
purpose: 'Virtuelle Elterngespräche und Klassenkonferenzen mit optionaler JWT-Authentifizierung und Embedded-Integration ins Studio.',
|
|
tech: ['Jitsi Meet', 'Prosody', 'JWT Auth'],
|
|
healthEndpoint: '/http-bind',
|
|
endpoints: [
|
|
{ method: 'GET', path: '/http-bind', description: 'BOSH Endpoint' },
|
|
{ method: 'GET', path: '/config.js', description: 'Jitsi Konfiguration' },
|
|
],
|
|
envVars: ['JITSI_APP_ID', 'JITSI_APP_SECRET', 'PUBLIC_URL'],
|
|
},
|
|
{
|
|
id: 'mailpit',
|
|
name: 'Mailpit (SMTP)',
|
|
type: 'infrastructure',
|
|
port: 1025,
|
|
container: 'breakpilot-pwa-mailpit',
|
|
description: 'E-Mail-Testing und Vorschau',
|
|
purpose: 'Lokaler SMTP-Server für E-Mail-Vorschau im Development mit Web-UI auf Port 8025 zur Überprüfung von Lifecycle-Emails.',
|
|
tech: ['Mailpit', 'SMTP', 'Web UI'],
|
|
healthEndpoint: null,
|
|
endpoints: [
|
|
{ method: 'GET', path: '/', description: 'Web UI (Port 8025)' },
|
|
],
|
|
envVars: ['MP_SMTP_AUTH', 'MP_SMTP_AUTH_ALLOW_INSECURE'],
|
|
},
|
|
{
|
|
id: 'llm-gateway',
|
|
name: 'LLM Gateway',
|
|
type: 'backend',
|
|
port: 8085,
|
|
container: 'breakpilot-llm-gateway',
|
|
description: 'Multi-Provider LLM Router',
|
|
purpose: 'Einheitliche API für verschiedene LLM-Anbieter (OpenAI, Anthropic, Ollama) mit Provider-Switching, Token-Tracking und Fallback-Logik.',
|
|
tech: ['Python 3.11', 'FastAPI', 'LiteLLM'],
|
|
healthEndpoint: '/health',
|
|
endpoints: [
|
|
{ method: 'GET', path: '/health', description: 'Health Check' },
|
|
{ method: 'POST', path: '/v1/chat/completions', description: 'Chat Completion (OpenAI-kompatibel)' },
|
|
{ method: 'GET', path: '/v1/models', description: 'Verfügbare Modelle' },
|
|
],
|
|
envVars: ['OPENAI_API_KEY', 'ANTHROPIC_API_KEY', 'OLLAMA_BASE_URL'],
|
|
},
|
|
{
|
|
id: 'website',
|
|
name: 'Website (Next.js)',
|
|
type: 'frontend',
|
|
port: 3000,
|
|
container: 'breakpilot-pwa-website',
|
|
description: 'Next.js 14 Frontend mit App Router',
|
|
purpose: 'Admin-Dashboard, Landing-Page und API-Routing für das Next.js Frontend mit Server Components und Edge Functions.',
|
|
tech: ['Next.js 14', 'React 18', 'TypeScript', 'Tailwind CSS'],
|
|
healthEndpoint: null,
|
|
endpoints: [
|
|
{ method: 'GET', path: '/', description: 'Landing Page' },
|
|
{ method: 'GET', path: '/admin', description: 'Admin Dashboard' },
|
|
{ method: 'GET', path: '/app', description: 'Benutzer-App (redirect to :8000)' },
|
|
],
|
|
envVars: ['NEXT_PUBLIC_API_URL', 'NEXTAUTH_SECRET'],
|
|
},
|
|
{
|
|
id: 'opensearch',
|
|
name: 'OpenSearch',
|
|
type: 'database',
|
|
port: 9200,
|
|
container: 'breakpilot-opensearch',
|
|
description: 'Volltextsuche und Vektorsuche',
|
|
purpose: 'Hochperformante Suche in Bildungsressourcen mit k-NN für semantische Ähnlichkeitssuche und BM25 für Keyword-Matching.',
|
|
tech: ['OpenSearch 2.11', 'k-NN Plugin'],
|
|
healthEndpoint: '/',
|
|
endpoints: [
|
|
{ method: 'GET', path: '/_cluster/health', description: 'Cluster Health' },
|
|
{ method: 'POST', path: '/bp_documents_v1/_search', description: 'Dokumentensuche' },
|
|
],
|
|
envVars: ['OPENSEARCH_JAVA_OPTS'],
|
|
},
|
|
]
|
|
|
|
// ASCII architecture diagram
|
|
export const DATAFLOW_DIAGRAM = `
|
|
BreakPilot Platform - Datenfluss
|
|
|
|
┌─────────────────────────────────────────────────────────────────────────────────────────────┐
|
|
│ FRONTEND LAYER │
|
|
├─────────────────────────────────────────────────────────────────────────────────────────────┤
|
|
│ ┌─────────────────────┐ ┌─────────────────────┐ ┌─────────────────────┐ │
|
|
│ │ Admin Frontend │ │ Lehrer Studio │ │ Policy Vault UI │ │
|
|
│ │ Next.js :3000 │ │ FastAPI :8000 │ │ Angular :4200 │ │
|
|
│ └──────────┬──────────┘ └──────────┬──────────┘ └──────────┬──────────┘ │
|
|
└─────────────┼───────────────────────────┼───────────────────────────┼────────────────────────┘
|
|
│ │ │
|
|
▼ ▼ ▼
|
|
┌─────────────────────────────────────────────────────────────────────────────────────────────┐
|
|
│ BACKEND LAYER │
|
|
├───────────────────┬───────────────────┬───────────────────┬─────────────────────────────────┤
|
|
│ ┌───────────────┐ │ ┌───────────────┐ │ ┌───────────────┐ │ ┌───────────────┐ │
|
|
│ │ Consent :8081 │ │ │ Billing :8083 │ │ │ School :8084 │ │ │ DSMS GW :8082 │ │
|
|
│ │ Go/Gin │ │ │ Go/Stripe │ │ │ Go/Gin │ │ │ Go/IPFS │ │
|
|
│ │ DSGVO Consent │ │ │ Subscriptions │ │ │ Noten/Zeugnis │ │ │ Audit Storage │ │
|
|
│ └───────┬───────┘ │ └───────┬───────┘ │ └───────┬───────┘ │ └───────┬───────┘ │
|
|
│ │ │ │ │ │ │ │ │
|
|
│ ▼ │ ▼ │ ▼ │ ▼ │
|
|
│ ┌───────────────┐ │ ┌───────────────┐ │ ┌───────────────┐ │ ┌───────────────┐ │
|
|
│ │ Klausur :8086 │ │ │ H5P :8085 │ │ │ Policy API │ │ │ LLM Services │ │
|
|
│ │ Python/BYOEH │ │ │ Node.js │ │ │ NestJS :3001 │ │ │ LibreChat/RAG │ │
|
|
│ │ Abiturkorrek. │ │ │ Interaktiv │ │ │ Richtlinien │ │ │ KI-Assistenz │ │
|
|
│ └───────┬───────┘ │ └───────┬───────┘ │ └───────┬───────┘ │ └───────┬───────┘ │
|
|
└─────────┼─────────┴─────────┼─────────┴─────────┼─────────┴─────────┼───────────────────────┘
|
|
│ │ │ │
|
|
▼ ▼ ▼ ▼
|
|
┌─────────────────────────────────────────────────────────────────────────────────────────────┐
|
|
│ DATA LAYER │
|
|
├───────────────────┬───────────────────┬───────────────────┬─────────────────────────────────┤
|
|
│ ┌───────────────┐ │ ┌───────────────┐ │ ┌───────────────┐ │ ┌───────────────┐ │
|
|
│ │ PostgreSQL │◄┼►│ Redis │ │ │ Qdrant │ │ │ OpenSearch │ │
|
|
│ │ :5432 │ │ │ :6379 Cache │ │ │ :6333 Vector │ │ │ :9200 Search │ │
|
|
│ │ Hauptdaten │ │ │ Sessions │ │ │ RAG Embeddings│ │ │ Volltext │ │
|
|
│ └───────────────┘ │ └───────────────┘ │ └───────────────┘ │ └───────────────┘ │
|
|
└───────────────────┴───────────────────┴───────────────────┴─────────────────────────────────┘
|
|
│
|
|
▼
|
|
┌─────────────────────────────────────────────────────────────────────────────────────────────┐
|
|
│ INFRASTRUCTURE LAYER │
|
|
├───────────────────┬───────────────────┬───────────────────┬─────────────────────────────────┤
|
|
│ ┌───────────────┐ │ ┌───────────────┐ │ ┌───────────────┐ │ ┌───────────────┐ │
|
|
│ │ Vault :8200 │ │ │ Keycloak :8180│ │ │ MinIO :9000 │ │ │ IPFS :5001 │ │
|
|
│ │ Secrets Mgmt │ │ │ SSO/OIDC Auth │ │ │ S3 Storage │ │ │ Dezentral │ │
|
|
│ └───────────────┘ │ └───────────────┘ │ └───────────────┘ │ └───────────────┘ │
|
|
│ ┌───────────────┐ │ ┌───────────────┐ │ ┌───────────────┐ │ │
|
|
│ │ Matrix :8008 │ │ │ Jitsi :8443 │ │ │ ERPNext :8090 │ │ │
|
|
│ │ E2EE Chat │ │ │ Video Calls │ │ │ Open ERP │ │ │
|
|
│ └───────────────┘ │ └───────────────┘ │ └───────────────┘ │ │
|
|
└───────────────────┴───────────────────┴───────────────────┴─────────────────────────────────┘
|
|
|
|
═══════════════════════════════════════════════════════════════════════════════════════════════
|
|
Legende: ──► Datenfluss ◄──► Bidirektional │ Layer-Grenze ┌─┐ Service-Box
|
|
═══════════════════════════════════════════════════════════════════════════════════════════════
|
|
`
|
|
|
|
// Tab definitions
|
|
export const TAB_DEFINITIONS = [
|
|
{ id: 'overview', label: 'Architektur' },
|
|
{ id: 'services', label: 'Services' },
|
|
{ id: 'api', label: 'API Reference' },
|
|
{ id: 'docker', label: 'Docker' },
|
|
{ id: 'testing', label: 'Testing' },
|
|
] as const
|