// ==================== SYSTEM INFO CONFIG ==================== export const companionSystemInfo = { title: 'Companion Module System Info', description: 'Technische Details zur Classroom State Machine', version: '1.1.0', architecture: { layers: [ { title: 'Frontend Layer', components: [ 'companion.py (Lesson-Modus UI)', 'Mode Toggle (Begleiter/Stunde/Klassisch)', 'Timer Display Component', 'Phase Timeline Component', 'Suggestions Cards', 'Material Design Icons (CDN)', ], color: 'bg-blue-50', }, { title: 'API Layer', components: [ 'classroom_api.py (FastAPI Router)', 'POST /sessions - Session erstellen', 'POST /sessions/{id}/start - Stunde starten', 'POST /sessions/{id}/next-phase - Naechste Phase', 'POST /sessions/{id}/pause - Timer pausieren', 'POST /sessions/{id}/extend - Phase verlaengern', 'GET /sessions/{id}/timer - Timer Status', 'GET /sessions/{id}/suggestions - Vorschlaege', 'GET /history/{teacher_id} - Session History', 'GET /health - Health Check mit DB-Status', 'GET/PUT /v1/context - Schuljahres-Kontext', 'GET/POST/DELETE /v1/events - Events CRUD', 'GET/POST/DELETE /v1/routines - Routinen CRUD', 'GET /v1/federal-states, /v1/school-types, etc.', ], color: 'bg-green-50', }, { title: 'Engine Layer', components: [ 'classroom_engine/ Package', 'models.py - LessonPhase, LessonSession', 'fsm.py - LessonStateMachine', 'timer.py - PhaseTimer', 'suggestions.py - SuggestionEngine', 'context_models.py - TeacherContextDB, SchoolyearEventDB, RecurringRoutineDB', 'antizipation.py - AntizipationsEngine (geplant)', ], color: 'bg-amber-50', }, { title: 'Storage Layer', components: [ 'Hybrid Storage (Memory + PostgreSQL)', 'SessionRepository (CRUD)', 'TeacherSettingsRepository', 'TeacherContextRepository (Phase 8)', 'SchoolyearEventRepository (Phase 8)', 'RecurringRoutineRepository (Phase 8)', 'Alembic Migrations (007: Phase 8 Tables)', 'Session History API', ], color: 'bg-purple-50', }, ], }, features: [ { name: '5-Phasen-Modell', status: 'active' as const, description: 'Einstieg, Erarbeitung, Sicherung, Transfer, Reflexion' }, { name: 'Timer mit Warning', status: 'active' as const, description: '2 Minuten Warnung vor Phasen-Ende' }, { name: 'Overtime Detection', status: 'active' as const, description: 'Anzeige wenn Phase ueberzogen wird' }, { name: 'Phasen-Suggestions', status: 'active' as const, description: '3-6 Aktivitaets-Vorschlaege pro Phase' }, { name: 'Visual Pie Timer', status: 'active' as const, description: 'Kreisfoermiger Countdown mit Farbverlauf' }, { name: 'Quick Actions Bar', status: 'active' as const, description: '+5min, Pause, Skip Buttons' }, { name: 'Tablet-First Design', status: 'active' as const, description: 'Touch-optimiert fuer Tablets' }, { name: 'Phasen-Farbschema', status: 'active' as const, description: 'Blau→Orange→Gruen→Lila→Grau' }, { name: 'Keyboard Shortcuts', status: 'active' as const, description: 'Space=Pause, N=Next, E=Extend, H=Contrast' }, { name: 'Audio Cues', status: 'active' as const, description: 'Sanfte Toene bei Phasenwechsel' }, { name: 'Offline Timer', status: 'active' as const, description: 'Client-seitige Fallback bei Verbindungsverlust' }, { name: 'DB Persistenz', status: 'active' as const, description: 'PostgreSQL Hybrid Storage' }, { name: 'Session History', status: 'active' as const, description: 'GET /history/{teacher_id} API' }, { name: 'Alembic Migrations', status: 'active' as const, description: 'Versionierte DB-Schema-Aenderungen' }, { name: 'Teacher Auth', status: 'active' as const, description: 'Keycloak Integration mit Optional Fallback (Phase 7)' }, { name: 'WebSocket Real-time', status: 'active' as const, description: 'Echtzeit-Updates mit 1-Sekunden-Genauigkeit (Phase 6)' }, { name: 'Schuljahres-Kontext', status: 'active' as const, description: 'Makro-Phasen, Bundesland, Schulart (Phase 8)' }, { name: 'Events & Routinen', status: 'active' as const, description: 'Klausuren, Konferenzen, Elternabende (Phase 8)' }, { name: 'Antizipations-Engine', status: 'active' as const, description: '12 Regeln fuer proaktive Vorschlaege (Phase 8)' }, { name: 'Dynamische Sidebar', status: 'active' as const, description: 'Top 5 relevante Module + Alle Module (Phase 8)' }, { name: 'Schuljahres-Pfad', status: 'active' as const, description: '7 Meilensteine mit Fortschrittsanzeige (Phase 8)' }, ], roadmap: [ { phase: 'Phase 1: Core Engine', priority: 'high' as const, items: ['FSM', 'Timer', 'Suggestions', 'API'] }, { phase: 'Phase 2: Frontend', priority: 'high' as const, items: ['Lesson-Modus UI', 'Timer Display', 'Timeline'] }, { phase: 'Phase 2b: UX Optimierung', priority: 'high' as const, items: ['Visual Timer', 'Farbschema', 'Tablet-First', 'Quick Actions'] }, { phase: 'Phase 3: Persistenz', priority: 'high' as const, items: ['PostgreSQL', 'Keycloak Auth', 'Session History'] }, { phase: 'Phase 4: Content', priority: 'medium' as const, items: ['Unit-Vorschlaege', 'Templates', 'Hausaufgaben'] }, { phase: 'Phase 5: Analytics', priority: 'medium' as const, items: ['Statistiken (ohne Bewertung)', 'PDF Export'] }, { phase: 'Phase 6: Real-time', priority: 'low' as const, items: ['WebSocket', 'Offline Fallback', 'Multi-Device'] }, ], technicalDetails: [ { component: 'Backend', technology: 'Python FastAPI', version: '0.123+', description: 'Async REST API' }, { component: 'State Machine', technology: 'Python Enum + Dataclass', description: 'Finite State Machine Pattern' }, { component: 'Timer', technology: 'datetime.utcnow()', description: 'Server-side Time Calculation' }, { component: 'Frontend', technology: 'Vanilla JavaScript ES6+', description: 'In companion.py eingebettet' }, { component: 'Icons', technology: 'Material Design Icons', description: 'Via Google Fonts CDN (Apache-2.0)' }, { component: 'WebSocket', technology: 'FastAPI WebSocket', description: 'Echtzeit-Updates mit 1-Sekunden-Genauigkeit + Polling Fallback' }, { component: 'Database', technology: 'PostgreSQL + SQLAlchemy 2.0', description: 'Hybrid Storage (Memory + DB)' }, { component: 'Migrations', technology: 'Alembic 1.14', description: 'Versionierte Schema-Migrationen' }, ], privacyNotes: [ 'Keine Schueler-Daten werden gespeichert', 'Session-Daten sind nur waehrend der Stunde verfuegbar', 'Lehrer-ID wird fuer Session-Zuordnung verwendet', 'Keine Tracking-Cookies oder externe Services', 'Analytics ohne bewertende Metriken (keine "70% Redezeit"-Anzeigen)', ], }