# Deployment — SLC-Workshop Companion (App)

**Auftrag für die Server-Claude / Ops:** Diese App **statisch** ausliefern. Kein
Build-Schritt, kein Backend, keine Secrets, keine Datenbank.

## Was das ist
- Eine **statische Single-Page-PWA**. Alle Inhalte (Stationen, Quiz, Use-Cases)
  sind in `index.html` eingebettet — keine Laufzeit-API nötig.
- Dateien im Ordner `04_Tablet-Quiz/app/`:
  - `index.html` — die App
  - `manifest.webmanifest` — PWA-Manifest
  - `sw.js` — Service Worker (Offline-Cache der App-Shell)
  - `icon.svg` — App-Icon

## Ziel
Den Ordner `04_Tablet-Quiz/app/` als **statisches Web-Root** über den vorhandenen
Webserver bereitstellen, erreichbar per **HTTPS** (oder localhost).

> **Wichtig:** Der Service Worker (Offline/Installierbar) läuft **nur über HTTPS
> oder localhost**. Über reines `http://` ohne TLS registriert er sich nicht —
> die App funktioniert dann trotzdem, nur ohne Offline-Cache.

## Schritte
1. Repo auf dem Server bereitstellen/aktualisieren:
   `git clone https://git.1789.cloud/patrick/SLC_Game.git` (bzw. `git pull`).
2. Den Ordner `SLC_Game/04_Tablet-Quiz/app/` als statisches Root einbinden.

### Beispiel nginx
```nginx
server {
  listen 443 ssl;
  server_name slc.example.intern;            # anpassen
  # ssl_certificate ... ; ssl_certificate_key ... ;
  root /srv/SLC_Game/04_Tablet-Quiz/app;      # Pfad anpassen
  index index.html;
  location = /sw.js { add_header Cache-Control "no-cache"; }   # SW immer frisch
  location / { try_files $uri $uri/ /index.html; }
}
```

### Beispiel Caddy (TLS automatisch)
```caddy
slc.example.intern {
  root * /srv/SLC_Game/04_Tablet-Quiz/app
  file_server
  header /sw.js Cache-Control "no-cache"
}
```

## Verifikation nach dem Deploy
1. URL öffnen → Startbildschirm „SLC Companion · Schritt 1 · Action Card".
2. DevTools → Application → **Service Workers**: `sw.js` ist *activated*.
3. Flugmodus/Offline → Seite neu laden → App lädt weiterhin (Offline-Cache).
4. Einen Durchlauf spielen → „Debrief" → **↓ Markdown / ↓ JSON** lädt eine Datei.

## Updates
- Bei neuem Stand: `git pull`. Wenn sich App-Assets geändert haben, in `sw.js`
  die Konstante `CACHE` hochzählen (z. B. `slc-companion-v1` → `-v2`), damit der
  Service Worker den Cache erneuert.

## Noch offen (nicht Teil dieses Deploys)
- **YAML→Inhaltspipeline:** Inhalte sind aktuell in `index.html` eingebettet.
  Später aus den Blueprint-`service-lifecycle_*.yaml` generieren (braucht Zugriff
  aufs Blueprint-Repo). Bis dahin werden Inhalte direkt in `index.html` gepflegt.
- **Companion-Chatbot** (optionaler Nachschlage-Bot) — siehe `../README.md` §8;
  *braucht* ein LLM-Backend und ist daher **nicht** Teil der statischen App.
