# Kickoff-Prompt — Lane Betreiber-Konsole-UX + i18n (certvia) > Diesem Prompt einem Entwickler/Claude-Code-Agenten geben. Bootstrapt in certvia + diese Lane. ```text Du übernimmst die Lane „Betreiber-Konsole-UX + vollständige i18n" am Produkt „certvia" (ISMS-Tool, Multi-Tenant Next.js-16 / Prisma-7 / Postgres+RLS / Auth.js-v5). Repo: ~/Projects/ISMS-Tool, Branch `dev`. WICHTIG: certvia ist strikt getrennt von jedem anderen Produkt (insb. „visitvia"). Nichts vermischen. BRANCH/CHECKOUT: Arbeits-Branch: `lane-ui-i18n` (KEIN `feature/`-Prefix — origin-Namespace-Konflikt). git fetch origin && git checkout dev && git checkout -b lane-ui-i18n. Remotes: origin = https://git.certvia.de/msolarczek/certvia.git · local-gitea (intern). 1) PFLICHTLEKTÜRE: - docs/HANDOVER-DEV.md, docs/SPEC.md, docs/STAND-dev-branch.md - docs/KONZEPT-ui-i18n.md ← dein Fahrplan (Bugfix 1+2, Ergänzungen A/B) 2) AUFTRAG: BUGFIX 1 — Betreiber-Konsole (src/app/(platform)/admin/[id]/page.tsx): - Module → Popup (searchParam `?modules=1`, ); Benutzer → Popup (`?users=1`). Muster existiert bereits auf der Seite (?new/?edit/?audit) — analog kapseln. - Hauptfenster stattdessen: Stammdaten (aus TenantSettings) + Hauptkontakt sichtbar. Offene Kleinentscheidung: Hauptkontakt = neue Felder in TenantSettings vs. Ableitung aus tenant-admin — mit PM klären. BUGFIX 2 — Vollständige UI-Sprache + per-Mitarbeiter-Umschaltung: - BEFUND: messages/en.json existiert (~95%), aber src/i18n/request.ts ist HART auf "de" (Zeile 8). TenantSettings.locale steuert nur die Richtlinien-Import-Sprache, NICHT die UI. - Neu: Identity.uiLocale (de|en, Default de) — persönliche Präferenz, folgt der Person. - request.ts liest uiLocale der aktiven Session-Identity (Fallback de). - Umschalter im Nutzer-Menü (Header/Profil) → Server-Action setUiLocale → speichern + reload. - messages/en.json auf 100% prüfen/auffüllen; hartkodierte deutsche Strings in Komponenten aufspüren und in den Katalog überführen. ERGÄNZUNG A — Login: Organisationsfeld (`tenant`) aus src/app/login/page.tsx ENTFERNEN (nach Option C überflüssig; Mandant kommt über /select-tenant). login-ticket-Signaturen entschlacken. 3) VERBINDLICHE REGELN: - UI-Sprache (Identity.uiLocale, Person) und Vorlagen-Import-Sprache (TenantSettings.locale, Inhalt) sind ZWEI getrennte Achsen — nicht vermischen. - Popups über das bestehende searchParam/-Muster, KEINE neue Modal-Infrastruktur. - Stammdaten haben EINE Quelle (TenantSettings) — keine Doppelpflege einführen. - RLS/Datenpfade unverändert; das ist eine reine UI-/Präferenz-Lane. 4) ARBEITSWEISE: - Gate vor JEDEM Merge: tsc · lint · build · ALLE scripts/test-*.ts. - UI-Verifikation im Browser: Betreiber-Popups (Module/Benutzer), Sprachumschaltung DE↔EN (Menü + Beschreibungen wechseln), Login ohne Organisationsfeld, /select-tenant unverändert. - DevOps: lane-ui-i18n → git merge --no-ff nach dev → Gate grün → Push auf BEIDE Remotes → STAND pflegen. 5) NICHT TUN: keine Änderung am Auth-Kern/an /select-tenant-Logik; Identity.uiLocale nur als Präferenzfeld ergänzen (keine Auth-Semantik). Erste Schritte: (a) Pflichtlektüre + Fragen (v.a. Hauptkontakt-Feld), (b) PR-Plan je Bugfix (Migration Identity.uiLocale, request.ts, Menü-Switcher; Popup-Umbau admin/[id]), (c) umsetzen. Warte nach (a)/(b). ```