Open Source · Selbst gehostet · Für Schul-AGs

Schach lernen.
Daten behalten.

Aufgaben lösen, Hausaufgaben vergeben, live gegeneinander spielen, Turniere auslosen – eine komplette Lernplattform für die Schach-AG, die auf deinem Server läuft und möglichst wenig über die Kinder weiß.

Alles, was eine AG braucht

Ein Login für Schülerinnen und Schüler mit persönlichem Code, ein Bereich für den Trainer – und ansonsten nur Schach.

🔑

Anmeldung mit Code

Jedes Kind bekommt einen zehnstelligen Code statt eines Passworts. Keine E-Mail, kein Klarname, kein Passwort-Reset.

🛤️

Lernpfade & Aufgaben

Modulierter Lernpfad mit Taktik, Matt, Endspiel – aufgebaut aus gefilterten Aufgaben der Lichess Open Database (CC0).

📝

Hausaufgaben & Statistik

Aufgaben freischalten, Fälligkeit setzen, Fortschritt je Thema sehen – inklusive Schwachstellen der Klasse.

⏱️

Live-Partien

Mit Schachuhr gegeneinander oder gegen die Klasse: ansetten, live zusehen, danach mit Engine-Analyse die Patzer finden.

🏆

Turniere

Schweizer System nach FIDE-Holländisch, Auslosung, Rangliste mit Buchholz – und große Beamer-Ansicht für den Raum.

🏅

Medaillen & Urkunden

Digitale Belohnungen für Fleiß; Urkunden als SVG, deren Name nur im Browser steht und nie an den Server geht.

Einblicke

Vier Bildschirme aus dem Trainerbereich – mehr zeigt die Demo-Galerie in der README.

Trainerbereich: Schülerliste mit Alias, Fortschritt und Code-Verwaltung
Schüler verwaltenAlias anlegen, Fortschritt sehen, Codes ausstellen oder erneuern.
Übungsbereich: Aufgabenfilter, Hausaufgabe erstellen, Aufgabenliste mit Brettvorschau
Übungen & HausaufgabenFiltern, Vorschau, mit einem Klick für die ganze AG freischalten.
Live-Bereich: Partie mit Bedenkzeit und eigener Startstellung ansetzen
Live-PartienPaarung ansetzen, Bedenkzeit wählen, mit Uhr und Analyse verfolgen.
Turnierbereich: Turnieranlage im Schweizer System mit Beamer-Ansicht
TurniereSchweizer System, Ergebnisse erfassen, Rangliste und Beamer-Ansicht.

Datenschutz ist hier kein Feature, sondern das Design

Gebaut für eine Schul-AG, in der möglichst wenig personenbezogenes anfällt.

  • Nur Alias und Code – Klarnamen existieren im System schlicht nicht.
  • Kein Chat, keine Tracker, keine externen Schriften oder CDNs, keine Cookies von Dritten.
  • Trainingdaten bleiben auf dem eigenen Server; die Engine rechnet im Browser.
  • Sitzungen laufen nach 2 Stunden ab, der Trainer-Login sperrt nach fünf Fehlversuchen.
  • Codes mit scrypt gehasht, Schülercodes zusätzlich AES-256-GCM verschlüsselt.
  • Nächtliche Datenbank-Sicherungen mit 7/4/3 Ständen, Wiederherstellung getestet.

Loslegen

Zwei Wege: produktiv mit Portainer und Traefik oder in zwei Minuten lokal zum Ausprobieren.

🏆 Produktivbetrieb mit Portainer

Stack im Repository-Modus anlegen, Compose-Pfad compose.portainer.yml, Variablen setzen, deployen. Domain steckt in den Traefik-Labels der Datei.

Repository:  github.com/TJRSchmidbauer/schulschach
Branch:      main
Compose:     compose.portainer.yml
Anleitung öffnen →

💻 Lokal ausprobieren

Reicht Docker, kein Reverse-Proxy nötig. Die Test-Codes erscheinen einmalig im Container-Log.

cp .env.example .env
docker compose -f compose.local.yml up -d --build
# → http://localhost:3000
Anleitung öffnen →

Voraussetzung: ein Server mit Docker (App + PostgreSQL) – ohne ihn läuft nichts. Vollständig im Browser rechnen nur der Urkunden-Editor (der echte Name wird nie gesendet), das Schachbrett und die Analyse-Engine; alles andere, einschließlich Turnier-Auslosung, Live-Partien und Statistik, braucht den Server. Ohne Internet kommt die App trotzdem aus, denn sie ruft zur Laufzeit keine externen Dienste auf.

Trainer-Code nie im Klartext speichern: npm run hash:trainer -- "DEIN_LANGER_CODE" erzeugt den Hash für die Stack-Variable.