# Hallo Welt — V2-Beispiel-Modul Ein **lebendes Referenz-Modul** für alle Modul-Instanzen, die ein V2-Modul bauen wollen. Erfüllt **alle 6 Pflicht-Verträge** der Spec (siehe `../../v2-modules/_spec/`). ## Was es macht Drei Mini-Schritte: 1. Begrüßung mit Avatar und Name aus dem Profil 2. Eine Multiple-Choice-Frage zu Wien 3. Geschafft-Screen mit Score Alles in 1–2 Minuten durchspielbar. Demonstriert: - Input-API: Token aus URL, Profil-Abruf via `/api/student/me` - Output-API: Resume-State per `/api/module/state` PUT, Endergebnis per `/api/result` POST - Telemetry-API: Heartbeat alle 15s, drei Milestones, Stuck-Detection nach 90s - Plattform-Standards: A11y (High-Contrast, Reduced Motion, Keyboard, ARIA), Easy-Sprache, Sprachregeln (keine Spielsprache), iPad-Pattern (dvh, viewport-fit, sticky actions) - Manifest mit allen Pflichtfeldern - i18n-Files für `de-AT-standard` und `de-AT-easy` ## Lokal ausprobieren 1. XAMPP starten 2. Mock-Token holen: ``` http://localhost/geograsim/v2-platform/mock/issue-token.php?student=42 ``` 3. Modul mit Token aufrufen: ``` http://localhost/geograsim/v2-modules/hallo-welt/public/game.html?session_token=&student_id=42&class_id=99&mode=free&difficulty=L1&lang=de-AT-standard&resume=0 ``` 4. Mock-Logs live mitlesen: ```bash tail -f v2-platform/mock/uploads/log.jsonl ``` Probiere auch: - `student=43` für Easy-Sprache-Modus (`lang=de-AT-easy` setzen) - `student=44` für High-Contrast + Reduced Motion + Screen-Reader-Profil ## Struktur ``` hallo-welt/ ├── manifest.json ├── README.md ├── public/ │ ├── game.html ← Entry Point (HTML+CSS+JS, inline) │ ├── assets/ │ │ └── card.svg ← Cockpit-Karten-Bild │ └── i18n/ │ ├── de-AT-standard.json ← Texte │ └── de-AT-easy.json ← Easy-Sprache-Texte ├── db/ │ └── migrations.sql ← leer (kein eigenes Schema) └── tests/ └── mock-platform.html ← Standalone-Test-Harness ``` ## Was du als Modul-Bauer*in lernen kannst Lies in dieser Reihenfolge: 1. **manifest.json** — wie wird ein Modul deklariert 2. **public/game.html** — wie sieht die Mindest-Mechanik aus, wie wird Telemetry aufgerufen 3. **public/i18n/*.json** — wie ist Easy-Sprache organisiert 4. **tests/mock-platform.html** — wie testet man ein Modul ohne echte Plattform Keine 3000 Zeilen — bewusst klein gehalten. Einsteiger-Friendly.