WalletDesignView (/app/wallet, Nav „Wallet" im Firmen-Kontext): Farben
(Hintergrund/Text/Label), Titel, Logo-Upload, Feld-Editor (Binding + Label +
Slot, hinzufügen/sortieren/entfernen). Live-Vorschau im Apple-Stil mit echten
Beispieldaten. Hinweis, dass die Anordnung durch Apple/Google fix ist.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Vorschau-Button (👁) je Position im Bestell-Dialog (aktiv wenn
Produkt+Mitarbeiter gewählt): rendert card.pdf via pdf.js (Vorder-/
Rückseite) im Vorschau-Modal mit echten Mitarbeiterdaten × Produktlayout.
- Auch im Bestell-Detail je Position (Reseller-Prüfung vor Produktion).
- Modal: optionaler wide-Prop für Bestell-/Vorschau-Modal.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Standorte & Domains sind firmenbezogen → nur im Firmen-Kontext.
Editor (Produktdesign) nur für Reseller (für Kundenfirmen) & Firmen.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- ImpersonationController POST /api/impersonate/{id}: gibt JWT für Ziel-
Mitarbeiter aus (imp-Claim für Audit); nur niedrigere Ebene + eigener
Mandanten-Teilbaum (RoleService.levelOfRoles)
- Frontend: auth-Store impersonate/stopImpersonation (Original-Token gesichert),
'Arbeiten als'-Buttons in der Logins-Übersicht (nur erlaubte Ziele),
Impersonation-Banner mit 'Beenden' im Layout
Verifiziert: Admin→Reseller/Firma/Mitarbeiter, Eskalation/Cross-Tenant→403,
Kontextwechsel + Banner im Browser.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Beseitigt die Doppelung Admin-Login vs. Mitarbeiter — jeder ist ein Employee
mit optionalem Login/Rechtegruppe (Voraussetzung für Mitarbeiter-Zeiterfassung).
- Employee implementiert UserInterface/PasswordAuthenticated (loginEmail unique,
password, roles); User-Entität entfernt; Security-Provider → Employee.loginEmail
- Plattform = Reseller mit isPlatform + Org-Firma; Reseller haben Org-Firma
(Company.isResellerOrg) für ihr Personal → alles = Reseller→Firma→Mitarbeiter
- TenantContext leitet Reseller/Company aus dem Mitarbeiter ab (Reseller-/
Plattform-Admin = reseller-weit)
- UserAdminController: Login pro Mitarbeiter vergeben/entziehen
(POST/DELETE /api/employees/{id}/login), /api/users = Logins-Übersicht
- Provisioning/Seed auf das neue Modell; Migrationen zu einer Baseline gesquasht
- Frontend: EmployeesView Login-Block + UsersView (Logins-Übersicht)
Verifiziert: Login, /me, Mandantenscoping, delegierter Grant (Eskalation→403),
öffentliches Profil, SPA-Flow.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Karten-Einstellungen im Eigenschaften-Panel (wenn kein Element gewählt):
Name, Breite/Höhe, Beschnitt und Sicherheitsabstand — wirken live im Canvas
und fließen beim Speichern ins Druck-PDF (Seitengröße + Schnittmarken).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Hintergrund-PDF wird per pdf.js echt im Canvas gerendert (WYSIWYG);
neuer Endpunkt GET .../card-template/background liefert das PDF
- Resize-Anfasser am ausgewählten Element (Breite/Höhe)
- Undo (↶ / Strg+Z) mit Snapshot-History; Snapshot erst bei echter Änderung
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Assets-Leiste: Hintergrund-PDF hochladen/entfernen (+ "aktiv"-Badge),
Schrift hochladen (TTF/OTF) mit Familien-Chips
- Schriftart-Auswahl pro Text/Feld (Helvetica/Times/Courier + eigene)
- Canvas-Hinweis bei aktivem Hintergrund (echte Darstellung in PDF-Vorschau)
- Uploads aktualisieren State ohne Verlust des aktuellen Layouts
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>