# 06 — Tenant Admin PWA (Store-Ready) Packaging - Android: Trusted Web Activity (TWA) bound to `admin.`; fallback Capacitor if native plugins needed. - iOS: Capacitor wrapper with push notifications and secure storage. - Installable PWA (A2HS) with offline and background sync. Auth & Tenancy - OAuth2 Authorization Code + PKCE; refresh tokens; secure storage (Keychain/Keystore). - Tokens carry `tenant_id` and roles; backend enforces scoping. Capabilities - Manage events, galleries, members, settings, legal pages, purchases. - Notifications: Web Push (Android TWA) and Capacitor push (iOS). - Conflict handling: ETag/If-Match; audit changes. - Dashboard highlights tenant quota status (photo uploads, guest slots, gallery expiry) with traffic-light cards fed by package limit metrics. - Global toast handler consumes the shared API error schema and surfaces localized error messages for tenant operators. Support Playbook (Limits) - Wenn Tenant-Admins Upload- oder Gäste-Limits erreichen, zeigt der Header Warn-Badges + Toast mit derselben Fehlermeldung wie im Backend (`code`, `title`, `message`). - Support-Team kann `php artisan metrics:package-limits` ausführen, um die aggregierten Warn-/Expired-Zähler der letzten Stunden einzusehen und Engpässe zu bestätigen (`--reset` leert die Zähler nach Eskalation). - Empfehlung an Kunden: Paketupgrade oder Kontakt zu Sales; bei abgelaufener Galerie ggf. Verlängerung via Tenant Package. - Bei Fehlalarmen zuerst Logs nach `package_limit_metric` durchsuchen und prüfen, ob der Zähler `recovered` die Credits bereits wieder freigibt. Distribution & CI - Play: assetlinks.json at `/.well-known/assetlinks.json`. - App Store: fastlane lanes; privacy manifests. - Version alignment with backend; feature flags synced on login. See also: docs/adr/ADR-0006-tenant-admin-pwa.md