/** * Static data for Developer Documentation Page */ import type { ServiceNode, ArchitectureLayer, ServiceDefinition } from './types' // Documentation paths for VS Code links export const docPaths: Record = { '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