Open-Source-Webanwendung für die digitale Durchführung, Auswertung und Längsschnitt-Beobachtung von Lese-Screenings (nach dem Verfahren des Salzburger Lese-Screenings) an Schulen in Deutschland.
Lizenz: EUPL 1.2
Sprache: Deutsch
Status: funktionsfähig (alle Phasen 0–5 abgeschlossen) · 274 Unit-/Feature-Tests + 10 E2E-Browser-Tests grün · composer lint (Pint + PHPStan Level 5) sauber
CI-Pipeline läuft auf jeden Push/PR gegen main (Pint + PHPStan + PHPUnit) — siehe .github/workflows/ci.yml.
- ✅ Setup-Wizard mit Klarnamen-Verschlüsselung (Envelope-Encryption, Argon2id + AES-256-GCM)
- ✅ Granulares Permission-Modell mit Klassen, Scopes und User-Overrides
- ✅ Optionales 2FA (TOTP) mit Klassen-erzwingbarer Pflicht
- ✅ Schüler-Test mit Code-basierter Anmeldung (10-stelliger One-Shot-Code), JS-Timer, Auto-Submit
- ✅ Längsschnitt-Beobachtung pro Schüler über mehrere Schuljahre
- ✅ Förderbedarfs-Liste mit konfigurierbaren Schwellen
- ✅ PDF-Generierung via Gotenberg (Bulk-Rückmeldungen, Verlaufsdiagramme)
- ✅ Audit-Log mit Soft-Archivierung (Cron) + Hard-Delete-Cron für DSGVO-Lifecycle
- ✅ Backup mit AES-256-GCM-Verschlüsselung, JSON-Dump (DB) + Storage-Files; Restore inkl. Pre-Snapshot
- ✅ Import-Adapter: SchiLD-CSV + SVWS-NRW-API (live verifiziert)
- ✅ Welcome-Mail-Onboarding mit Force-Password-Change
- ✅ Recovery-Key-Verwaltung im UI (Regenerate, Status-Übersicht)
Die vollständige Spezifikation liegt im docs/-Verzeichnis:
- 01 – Pflichtenheft
- 02 – Datenmodell
- 03 – Berechtigungskatalog
- 04 – API-Spec (OpenAPI 3.1)
- 05 – Stack & Architektur
- 06 – Roadmap
- SESSION-HANDOFF – aktueller Stand für Iterations-Übergabe
- ADR (Architecture Decision Records) – große Architektur-Entscheidungen
Operativ:
- DEPLOYMENT.md – Production-Deployment
- CONTRIBUTING.md – Entwicklungs-Setup, Beitrag-Prozess
Diese Software bildet das Verfahren des Salzburger Lese-Screenings (SLS) digital ab. Sie liefert keine Original-Sätze, keine Original-Normtabellen und keine Original-Testhefte mit. Das Original-SLS ist ein kommerzielles Verfahren des Hogrefe-Verlags. Schulen, die diese Software einsetzen, müssen die zu nutzenden Materialien selbst lizenzieren bzw. eigene Materialien beschaffen und in das Portal einspielen.
- Docker Desktop / Docker Engine + Compose v2
- Optional: PHP 8.4+, Composer 2 (nur für Out-of-Container-Tooling)
# 1. Konfiguration vorbereiten
cp .env.example .env
# 2. Container bauen und starten (PHP 8.4-FPM, MariaDB 11, Redis 7, Caddy 2, Gotenberg 8)
docker compose up -d --build
# 3. Laravel initialisieren (im Container)
docker compose exec app composer install --no-scripts
docker compose exec app php artisan key:generate
docker compose exec app php artisan migrate --seed --force
docker compose exec app php artisan lsp:selftest # Diagnose: alles grün?
# 4. Setup-Wizard öffnen
# → http://localhost:8080/setupIm Setup-Wizard:
- Admin-Konto anlegen
- Schulnamen eintragen
- Klarnamen-Passwort vergeben
- Recovery-Key sichern (wird nur einmalig angezeigt)
docker compose down -v # Stoppt alles + löscht DB-/Cache-Volumes
docker compose up -d --build # Frischer Start
docker compose exec app php artisan migrate --seed --force
# → http://localhost:8080/setup wieder von vorne| Container | Image | Zweck |
|---|---|---|
web |
caddy:2 | Reverse Proxy + TLS |
app |
custom (PHP 8.3-FPM + Laravel + Filament) | Anwendung |
queue |
custom | Queue-Worker (PDF, Mail, Backup) |
scheduler |
custom | Cron-Scheduler |
db |
mariadb:11 | Datenbank |
cache |
redis:7-alpine | Cache + Queue |
pdf |
gotenberg/gotenberg:8 | HTML→PDF |
backup |
custom | Backup-Worker |
Details siehe CONTRIBUTING.md. Kurzform:
- Issue eröffnen vor größeren Änderungen
composer lintmuss grün durchlaufen (Pint + PHPStan Level 5 mit Baseline)- Neue Features brauchen Tests; lokal:
php -d extension=pdo_sqlite -d extension=sqlite3 -d extension=sodium vendor/bin/phpunit --no-coverage
Sicherheitslücken bitte nicht als öffentliches Issue melden, sondern privat an den Maintainer.
Die Software steht unter der European Union Public Licence v1.2. Sie darf frei kopiert, verändert und weiterverbreitet werden – auch von und für andere Schulen.