Files
craftvia/docs/PROMPT-lane-ui-i18n.md
msolarczekandClaude Opus 5 c8e6f30a27
CI / build-and-check (push) Canceled after 0s
CI / audit (push) Canceled after 0s
CI / sbom (push) Canceled after 0s
Basis: Certvia dev@a48c5fb als Fundament für Craftvia
Unveränderter Stand von certvia/dev (a48c5fb) plus Craftvia-Spezifikation
und Brandbook unter docs/craftvia/. ISMS-Module werden im Folgecommit entfernt.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-14 11:05:39 +02:00

3.4 KiB

Kickoff-Prompt — Lane Betreiber-Konsole-UX + i18n (certvia)

Diesem Prompt einem Entwickler/Claude-Code-Agenten geben. Bootstrapt in certvia + diese Lane.

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`, <Modal>); 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/<Modal>-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).