# TimeMaster Kiosk (Flutter) Stempeluhr-App für Android-Tablets, gedacht für den Betrieb hinter WireGuard- VPN (feste Geräte-IP). Kein Ed25519-Request-Signing wie beim Browser-PC- Terminal – Geräte-Auth läuft über ein einfaches Bearer-Token, siehe `backend/app/core/kiosk_security.py::_verify_bearer_device` im Haupt-Repo. Vollständiger Architektur-Plan: `/home/sysops/.claude/plans/staged-marinating-dove.md`. ## Ersteinrichtung 1. Auf dem Server: `python cli.py kiosk add --company "Acme GmbH" --name "Eingang" --auth-mode bearer [--ip-whitelist 10.8.0.0/24]` 2. CLI gibt Token **einmalig** aus – in der App unter „Ersteinrichtung" zusammen mit der Server-URL eintragen. 3. Gerät erscheint in `KioskDevicesPage` als „pending" – Admin genehmigt. ## Login-Modi - **PIN**: Personalnummer + PIN (`POST /kiosk/auth/pin`) - **NFC**: Kartenscan (Android-eigenes NFC, 13,56 MHz/ISO14443) + Pflicht-PIN als Zweitfaktor (`POST /kiosk/auth/nfc`) - **Liste**: Mitarbeiter aus Liste tippen (`POST /kiosk/auth/list`) **Wichtig – Hardware-Inkompatibilität:** Die PC-Terminals nutzen einen 125-kHz-EM4100-Leser (HID-Keyboard-Wedge, siehe `project_kiosk_hardening`- Memory). Android-NFC liest nur 13,56-MHz-Karten (ISO14443/Mifare/NTAG). **Bestehende Mitarbeiterkarten für die PC-Terminals funktionieren NICHT am Tablet** und umgekehrt – für Tablet-NFC-Login werden separate 13,56-MHz- Karten/Tags benötigt, die zusätzlich über `POST /users/{id}/kiosk-nfc` hinterlegt werden müssen (gleiches Feld, zwei unterschiedliche physische Kartentypen). ## Build Kein lokales Flutter-SDK nötig – Build läuft auf root@192.168.1.236 (gleiche Umgebung wie `timemaster-mobile`, siehe dortige Memory-Notiz `project_android_app.md` für Setup-Details: `flutteruser`, `/opt/flutter`, `/opt/android-sdk`). ```bash # Auf 236, als flutteruser: cd /opt/timemaster-kiosk flutter build apk --release --target-platform android-arm64 ``` ## Umfang v1 Nur Login + Stempeln + Heartbeat. Kein Offline-Modus, keine NTAG424- Kryptografie, kein Android-Lock-Task/MDM (App läuft im normalen Vollbild, kein Geräte-Pinning).