b8f9a50731
White-Label Phase 1: Host→Tenant-Auflösung + Branding
...
- Domain-Entity polymorph (Reseller ODER Firma)
- TenantResolver: Host → Plattform / reseller.portal / firma.reseller.portal
/ verifizierte Custom-Domain
- Öffentliches GET /api/branding (Name, Ebene, Farben, Logo) nach Host
- TLS-Gate nutzt TenantResolver (nur bekannte Hosts → Zertifikat)
- Frontend: Branding-Store lädt vor Mount, färbt Theme um, TenantBrand-
Komponente (Logo/Name je Tenant), Login zeigt Tenant
- Vite-Proxy reicht Original-Host durch (lokales White-Label-Testing)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-09 12:58:20 +02:00
366d57da9b
UI: Portal-Navi auf Reseller reduziert
...
Plattform-Admin braucht Firmen/Mitarbeiter/Produkte/Bestellungen nicht direkt
(Zugriff via „Einloggen als" in einen Reseller). Portal-Topnav = Dashboard,
Reseller, Einstellungen. Reseller behält Einloggen-als/Produkte/Bestellungen.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 17:15:54 +02:00
44661d9b02
UI: Ebenen-Menüs angepasst (Portal-Mitarbeiter, Reseller „Einloggen als")
...
- Portal-Topnav: zusätzlich „Mitarbeiter" (firmenübergreifend, nur einloggbare
Mitarbeiter; Firma-Spalte statt Standort, kein Hinzufügen, „Einloggen als").
- Reseller-Topnav: „Firmen" → „Einloggen als" (gleiche Firmen-&-Mitarbeiter-
Ansicht). Plattform behält Label „Firmen".
- EmployeesView: portalMode (isPlatformAdmin) filtert auf login=true.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-06 13:10:23 +02:00
4be88dfd45
UI: Zwei-Ebenen-Navigation (Portal/Reseller oben, Firma links)
...
Klare Trennung der Ebenen gegen Verwechslung: Topbar trägt die Portal-/Reseller-
Navigation (Dashboard, Reseller, Firmen, Produkte, Bestellungen, Einstellungen)
+ Level-Badge (PORTAL/RESELLER/Firmenname). Die linke Sidebar zeigt NUR Firmen-
Ebene (Mitarbeiter, Editor, Bestellungen, Standorte, Domains, Design, Wallet,
Einstellungen) und nur im Firmen-Kontext (Firmen-Admin oder via „Einloggen als").
Reseller/Portal-Admin → links leer, Inhalt volle Breite.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-06 08:53:20 +02:00
4c0aced823
UI: Logo „( vcard4 reseller )" + KPI-Kacheln mit Farb-Icons
...
- BrandLogo-Komponente (Klammer-Wortmarke im Markenlook) in Sidebar + Login.
- Dashboard-KPIs im Referenz-Stil: farbiger Kreis-Icon (orange/grün/blau/grau)
+ Zahl + Label.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 19:31:38 +02:00
1f45e35ab5
UI: helle Seitenleiste statt schwarz + aufgewertete Topbar
...
Look & Feel an die Referenz angepasst: weiße Navigation mit Orange-Akzent
(aktives Item orange-soft, Chevrons, graue Icons) statt dunkler Sidebar.
Topbar mit Nutzer-Block (Avatar-Initialen, Name, Rolle, Firma). Navi bleibt
flach (keine Gruppen-Einteilung). name im CurrentUser-Typ ergänzt.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 19:19:59 +02:00
18894c7b52
Wallet-Design Frontend: Editor + Live-Apple-Pass-Vorschau (pro Firma)
...
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>
2026-06-04 19:05:40 +02:00
7c3b06c996
Bestellungen: Frontend (Firma bestellt, Reseller wickelt ab)
...
- OrdersView: Firma sieht eigene Bestellungen + „Neue Bestellung"
(Positionen Produkt+Mitarbeiter+Menge); Reseller/Plattform sehen
eingehende (mit Firma-Spalte), setzen Status vorwärts, stornieren,
PDF je Position. Status-Badges, Detail-Modal.
- Nav-Eintrag „Bestellungen" (Firma + Reseller + Plattform), Route.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-03 13:24:23 +02:00
6dd6d3a96e
Nav: Standorte/Domains nur Firma, Editor nicht für Plattform
...
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>
2026-06-02 18:02:47 +02:00
01f29f7e21
Nav: „Design" nur im Firmen-Kontext (Plattform/Reseller ausgeblendet)
...
Branding/Design ist nur für Firmen relevant; Admins/Reseller brauchen es nicht.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 17:35:22 +02:00
8c613ec014
Produkte: Nav-Eintrag „Visitenkarten" → „Editor"
...
Der Editor gestaltet jetzt jedes Produkt, nicht nur Visitenkarten.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 16:02:47 +02:00
6e8dcaff4e
Produkte: Frontend-Verwaltung & Editor-Produktauswahl
...
- ProductsView: CRUD-Liste (eigene editierbar, globale read-only),
Format-Defaults je Produktart, Nav-Eintrag (Plattform/Reseller)
- Card-Editor: Produktauswahl, Design je Firma+Produkt laden/speichern
(?product=), Format vom Produkt geerbt (read-only) inkl. Asset/PDF-Calls
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 15:58:11 +02:00
2dc40c6ea5
Rechte: Mitarbeiter & Benutzer vereint, ROLE_CONTACT als Basis
...
- Jeder Mitarbeiter hat (leere) Login-/Passwortfelder; Standardrolle ROLE_CONTACT
(reines Profil). Hochstufen über die Rechtegruppe.
- Ebenen-Ladder: contact(0) < employee(1) < company_admin(2) < reseller_admin(3)
< platform_admin(4); role_hierarchy + RoleService entsprechend.
- PATCH /api/employees/{id}/access: Rechtegruppe setzen (+ optional Passwort/Login);
DELETE .../login → zurück auf Kontakt.
- Sicherheit: Passwort/userIdentifier per #[Ignore] aus der API-Serialisierung.
- Frontend: separate Benutzer-Ansicht entfernt; Mitarbeiter-Liste mit
Rechtegruppe-Spalte, Rollen/Login + 'Arbeiten als' inline im Bearbeiten-Dialog.
Verifiziert: kein Passwort-Leak, roles/login im Payload, Hochstufen Kontakt→
Mitarbeiter + Login, Eskalation→403, Login entziehen→Kontakt; UI.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-01 21:44:57 +02:00
ae9936586b
Rechte: 'Arbeiten als' (Impersonation, nur absteigend)
...
- 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>
2026-06-01 17:40:37 +02:00
cac6b26a0d
Rechte: Benutzer-Verwaltung & Rechtegruppe je Mitarbeiter (Frontend)
...
- UsersView: Benutzer-Liste + Anlegen (Rechtegruppen-Dropdown = nur erlaubte
Gruppen), scope-gefiltert; Nav-Eintrag Benutzer (ab Firmen-Admin)
- EmployeesView: Block 'Zugang/Rechtegruppe' im Bearbeiten-Dialog —
Login anlegen/entfernen pro Mitarbeiter (delegationsgeprüft)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-01 15:23:34 +02:00
1a035d6c61
Visueller Visitenkarten-Editor (SPA)
...
- CardTemplateEditorController: GET|PUT /api/companies/{id}/card-template
(gespeicherte oder Standardvorlage, Mandantenprüfung, Upsert)
- CardPdfRenderer: freie Hex-Farben unterstützt
- CardEditorView: Canvas im mm-Maßstab mit Beschnitt/Endformat/Sicherheit,
Drag&Drop-Elemente (Feld/Text/QR/Logo/Fläche/Linie), Eigenschaften-Panel
(Datenbindung, Position/Größe, Schrift, Ausrichtung, Farbe), Vorder-/Rück-
seite, Live-Vorschau mit echten Daten, Speichern + PDF-Vorschau
- Nav-Eintrag "Visitenkarten" + Route
- Panel-Layout-Fix (min-width:0 gegen Grid-Überlauf)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 15:45:30 +02:00
ebaf509a2f
Fundament: Symfony+API-Platform-Backend & Vue-SPA (Phase 0–2)
...
Stack & Setup
- Dockerisierte Dev-Umgebung (PHP 8.4-FPM, Nginx, MariaDB 11.4)
- Symfony 7.4 + API Platform 4.3, Doctrine ORM, LexikJWT, Messenger
- Vue 3 + TS (Vite), Vue Router, Pinia, Axios
Kern-Domäne & Auth
- Entitäten: User, PlatformPlan, Reseller, Company, Domain, Location,
Employee, ContactLink (UUIDv7)
- JWT-Login (/api/login), Rollen-Hierarchie, /api/me
- Mandantentrennung via API-Platform-Query-Extension (Lesen) +
TenantStampProcessor (Schreiben)
Öffentliche Profile (SSR)
- Profil-Landingpage, vCard-Download, QR-Code im Marken-Look
- Stabiler NFC/QR-Kurz-Link /t/{code} -> Redirect aufs aktuelle Profil
- Firmenspezifisches Branding (Farben/Logo) auf der Profilseite
Verwaltungsoberfläche (SPA)
- Brand-Look (dunkle Sidebar), rollenbasierte Navigation
- Dashboard, Reseller (+Provisioning), Firmen, Mitarbeiter, Standorte,
Domains, Design/Branding mit Live-Vorschau
Konzept & Doku: docs/KONZEPT.md (inkl. Wallet/Sync §12), README.md
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 11:12:53 +02:00