Interactive Classroom

Interactive Classroom ist eine Mehr-Service-Anwendung für digitale Kurse mit:

Schnellstart

Ein frischer Clone kann lokal direkt gestartet werden:

Danach ist die Anwendung unter http://localhost erreichbar.

Typische Entwicklungs-URLs:

Optional:

Diagramme

Zusätzliche Architektur- und Ablaufbilder liegen im Ordner images/ und sind auch direkt im README eingebunden:

Was aktuell vorhanden ist

Der aktuelle Stand ist kein reines Backend-Projekt mehr, sondern ein komplettes System mit Frontend, API, Realtime und Whiteboard.

Frontend

Das React-Frontend in apps/web enthält aktuell:

Backend / API

Die Express-API in apps/api enthält aktuell:

Whiteboard / Realtime

Der Collab-Service in apps/collab enthält aktuell:

Architektur

Services

Laufzeitbild

Zusätzlich zum Mermaid-Überblick gibt es eine visuelle Gesamtübersicht als SVG:

Projektarchitektur
flowchart LR
    Browser -->|HTTP| Traefik
    Browser -->|REST + Stream| API
    Browser -->|WS Y.js| Collab

    Traefik --> API1[api-1]
    Traefik --> API2[api-2]
    Traefik --> WEB[web]

    API1 --> Postgres[(PostgreSQL)]
    API2 --> Postgres
    API1 -->|LISTEN/NOTIFY| Postgres
    API2 -->|LISTEN/NOTIFY| Postgres

    Collab --> Postgres
    Collab --> Redis[(Redis)]

Authentifizierung

Die Anwendung verwendet ein Access-/Refresh-Token-Modell:

Das bedeutet:

Der Ablauf ist zusätzlich als Diagramm dokumentiert:

JWT Auth Flow

Fachmodell

Kurse / Environments

Ein Environment ist der übergeordnete Kursraum.

Ein Environment hat:

Sessions

Eine Session ist eine konkrete Durchführung innerhalb eines Kurses.

Eine Session hat:

Boards

Die Board-Struktur ist inzwischen deutlich größer als in der alten README:

Rechtemodell

Session-Schreibrechte

Im Shared-Bereich gilt aktuell:

Diese Regel wird doppelt abgesichert:

Persönliche Boards

Persönliche Boards sind an ein Session-Mitglied gekoppelt. Dort arbeitet der Besitzer in seinem eigenen Bereich. Shared Boards können außerdem als persönliche Kopie übernommen werden.

Realtime

Session-Realtime

Session-Daten laufen nicht über Y.js, sondern über einen API-Stream:

sequenceDiagram
    participant Browser
    participant API
    participant Postgres

    Browser->>API: GET /api/sessions/:code/stream
    API->>Browser: initiales Session-Snapshot
    API->>Postgres: LISTEN session_updates
    Postgres-->>API: NOTIFY
    API-->>Browser: neues Session-Snapshot

Board-Realtime

Das Whiteboard selbst läuft über Hocuspocus und Y.js:

sequenceDiagram
    participant Browser
    participant Collab
    participant Redis
    participant Postgres

    Browser->>Collab: WebSocket connect + JWT
    Collab->>Postgres: lade Snapshot aus board_documents
    Collab->>Redis: verteile Y.js-Updates
    Browser->>Collab: Zeichnen / Bild / Seiten-Änderung
    Collab->>Postgres: speichere Snapshot
    Collab->>Postgres: aktualisiere Projektion

Datenbank

Die alte Datenbankbeschreibung im README wurde ausgelagert, weil das Modell inzwischen deutlich umfangreicher ist.

Die aktuelle Dokumentation findest du hier:

Sie enthält:

Zusätzlich gibt es eine visuelle Datenbankübersicht:

Datenbankübersicht

API-Überblick

Auth

Environments

Sessions

Frontend-Struktur

Die UI ist aktuell in drei Hauptseiten aufgeteilt:

apps/web/src/pages/
  LoginPage/
    LoginPage.jsx
    LoginPage.css
  DashboardPage/
    DashboardPage.jsx
    DashboardPage.css
  BoardPage/
    BoardPage.jsx
    BoardPage.css

Weitere wichtige Frontend-Dateien:

Wichtige Tabellen

Der aktuelle Kern der Datenbank besteht aus:

Entwicklungsnotizen