presseportale/docs/STATUS-ABGLEICH-USER-PANEL.md

311 lines
17 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Status-Abgleich · User Panel
Stand: 2026-05-21
> Dieses Dokument vergleicht die Konzept-Dokumente im Ordner `docs/` mit dem
> tatsächlichen Code-Stand. Es dient als Single Source of Truth für die
> Entscheidung, welche Konzept-Abschnitte aktualisiert werden müssen und wo
> weiterhin Lücken bestehen.
>
> **Methode**: Code-Inspektion aller Customer-Komponenten in
> `resources/views/livewire/customer/`, Models, Migrationen und Services
> gegen die Inhalte der Doku in `docs/user-admin/` und `docs/konzept/`.
>
> **Lese-Hilfe**:
>
> - ✅ **Doku stimmt mit Code überein** — kein Handlungsbedarf
> - 🔄 **Doku ist überholt** — Code ist schon weiter, Doku muss nachgezogen werden
> - 📝 **Code ist hinter Doku** — Konzept beschreibt etwas, das noch nicht
> gebaut ist
> - ⚠️ **Inkonsistent** — Doku und Code widersprechen sich
> - ❓ **Nicht im Konzept** — im Code da, aber nirgends dokumentiert
---
## 1. Globale Architektur des User Backends
| Konzept-Aussage | Quelle | IST im Code | Status |
|---|---|---|---|
| User/Admin getrennt, technisch gemeinsames Backend, Trennung über Rollen/Policies | `Admin-User.md` | Umgesetzt: `PressReleasePolicy`, Spatie-Rollen, Customer-/Admin-Routen | ✅ |
| Navigation in „Mein Bereich · Finanzen · Konto" | `Admin-User.md`, `checkliste-user-backend.md` | `components/layouts/app/sidebar.blade.php` setzt die drei Gruppen | ✅ |
| Topbar oben rechts mit Firmen-Kontext-Switcher | `Admin-User.md` | `customer/company-switcher.blade.php` + Layout-Integration | ✅ |
| „Pressemappen" terminologisch auf „Firmen" umbenannt | `checkliste-user-backend.md` | Im UI durchgehend „Firmen" / „Meine Firmen"; Routen heißen aus Legacy-Gründen weiterhin `me.press-kits.*` | 🔄 (Doku-Nacharbeit: Hinweis ergänzen, dass die internen Route-Namen weiterhin `press-kits` heißen) |
| Phase 1 funktional abgeschlossen | `checkliste-user-backend.md` Z. 71 | Trifft zu — alle in „Erledigt" markierten Punkte sind im Code verifizierbar | ✅ |
---
## 2. Customer-Pages — IST-Stand pro Page
### Dashboard (`customer/dashboard.blade.php`)
| Konzept-Aussage | IST | Status |
|---|---|---|
| Datenqualitäts-Hinweise (Profil, Rechnungsadresse, Pressekontakte, PMs ohne Firma) | umgesetzt mit `<x-portal.hint-card>` | ✅ |
| KPI-Reihe Pressemitteilungen | umgesetzt mit `<x-portal.stat-card>`, Trend-Slot mit `pub/prüf/entwurf` | ✅ |
| Filter-Reaktion auf Firmen-Kontext | `recent` und `companies` queries respektieren `selectedCompany` | ✅ |
### Pressemitteilungen-Liste (`customer/press-releases/index.blade.php`)
| Konzept-Aussage | IST | Status |
|---|---|---|
| Status-Tabs (Alle/Veröffentlicht/Entwürfe/Prüfung/Abgelehnt/Archiv) | umgesetzt als `view-tabs` mit Counter-Pillen | ✅ |
| Filter ohne Firma, Status, Portal | `statusFilter`, `portalFilter`, `companyFilter` aktiv | ✅ |
| Filter-Presets (`user_filter_presets`) | **fehlt** | 📝 (in Phase 2 lt. Doku — bleibt pending) |
| PM-Detail Tab „Verlauf" aus `press_release_status_logs` | als „Status & Verlauf"-Card eingebaut, nicht als eigener Tab | 🔄 (Doku-Anpassung: Card statt Tab; funktional gleichwertig) |
| Hinweis Scheduling/Embargo in der Liste | **fehlt** | 📝 (s. eigener Gap-Block unten) |
### Pressemitteilungs-Forms
| Konzept-Aussage | IST | Status |
|---|---|---|
| Einfacher Editor mit Absätzen, fett + kursiv | Flux-Editor mit `heading | bold italic | bullet ordered blockquote | link` — mehr als minimal | 🔄 (Konzept-Update: Aktuelle Toolbar ist bewusst etwas größer als „nur fett + kursiv") |
| Pflichtfeld `company_id` für Customer | Validation `required` | ✅ |
| Portal aus Firma abgeleitet (Customer) | `updatedCompanyId()` setzt `portal` aus `company->portal` | ✅ |
| `subtitle`-Feld | seit Phase 7 da | ❓ (im Konzept nicht erwähnt, aber sinnvoll) |
| `scheduled_at`, `embargo_at`-Felder im Form | seit Phase 7F da | ❓ (im Konzept nicht beschrieben) |
| HTML-Sanitizer auf Save | `PressReleaseHtmlSanitizer` (mews/purifier) | ❓ (Konzept-Punkt 2/Bilder nennt KI-Check, aber keinen HTML-Sanitizer — sollte dokumentiert werden) |
| Boilerplate-Override pro PM | seit Phase 7 als optionaler Override-Text | ❓ (im Konzept nicht erwähnt) |
| Pressekontakt-Zuordnung Single-Select (1 pro PM, n:m beibehalten) | seit Phase 7, jetzt optional/Warnung | 🔄 (Konzept-Punkt: Pressekontakt war ursprünglich „mehrere möglich", jetzt 1 pro PM optional) |
| Attachment-Manager | **temporär deaktiviert wegen Security-Review** | ⚠️ (Konzept beschreibt Anhänge, Code hat es auskommentiert) |
### Pressemitteilungs-Detail (Customer Show)
| Konzept-Aussage | IST | Status |
|---|---|---|
| Status & Verlauf inkl. Logs | umgesetzt | ✅ |
| Zugeordnete Pressekontakte | umgesetzt | ✅ |
| Rejection-Begründung sichtbar | umgesetzt | ✅ |
| Vorschau-Link für externe Reviewer | `generateShareLink` via Magic-Link-Token | ✅ |
| Anzeige Subtitle / `scheduled_at` / `embargo_at` / `boilerplate_override` | **fehlt** (nur Admin-Show hat scheduled/embargo) | 📝 (offener Punkt aus letzter Diskussion) |
### Firmen-Liste (`customer/press-kits/index.blade.php`)
| Konzept-Aussage / Mockup | IST | Status |
|---|---|---|
| Karten-Grid pro Firma mit Logo, Status, Portal, Rolle, KPIs | Karten vorhanden, aber **deutlich schlichter** als Mockup | 📝 (Hauptthema Phase 8) |
| Counter-Strip (X Firmen, X aktiv, X PMs total, X Kontakte) | **fehlt** | 📝 |
| Saved-View-Tabs (Alle / Aktiv / In Anlage / Inaktiv / Mit mir geteilt) | **fehlt** | 📝 |
| Filter-Chips (Status / Portal / Rolle / Branche) | **nur Volltext-Suche** | 📝 |
| Seg-Toggle Karten/Liste | **fehlt** | 📝 |
| Empty-States (keine Firma / Filter ohne Treffer) | nur generischer Empty-State | 📝 |
| Rollen-Legende (Admin / Redakteur / Beobachter) | **fehlt** | 📝 |
| „Firma anlegen"-CTA | derzeit zeigt nur „Firma anlegen anfragen" → Profil; Mockup hat direkten Anlage-Flow | 🔄 (Firma-Self-Service ist Phase-2-Thema laut Doku, im Mockup aber wie Phase-1 dargestellt) |
### Firmen-Detail (`customer/press-kits/show.blade.php`)
| Konzept-Aussage | IST | Status |
|---|---|---|
| Tabs Übersicht / Stammdaten / Pressekontakte / PMs / Statistik / Abrechnung | **eine lange Seite mit Quick-Nav-Anker, keine echten Tabs** | 🔄 (Doku-Update: Quick-Nav statt Tabs; visuell gleichwertig) |
| Stammdaten inkl. Logo bearbeitbar | umgesetzt | ✅ |
| Pressekontakte verwalten | umgesetzt | ✅ |
| Eigentümer-Anzeige konsolidiert aus `owner_user_id` + `company_user.role` | umgesetzt | ✅ |
| Statistik-Tab | nur Stub („In Vorbereitung") | 📝 (Phase 2) |
| Abrechnung-Tab | nur Stub | 📝 (Phase 2) |
| Magic-Link aktiv/inaktiv-Badge pro Kontakt | **fehlt** | 📝 |
| Anzahl PMs pro Kontakt aus `press_release_contact` | **fehlt** | 📝 |
| „+ Neuer Pressekontakt" mit Magic-Link-Berechtigung-Toggle | nur Basis-Form, kein Magic-Link-Toggle | 📝 (gehört zu Magic-Link-Flow → Phase 2) |
### Settings (`settings/*`, `customer/profile`, `customer/security`)
| Konzept-Aussage | IST | Status |
|---|---|---|
| Profil + Rechnungsadresse + Sicherheit + Newsletter + API-Tokens | alles vorhanden | ✅ |
| Magic-Link-Verlauf in Sicherheit | **fehlt** | 📝 (Phase 2) |
| API-Nutzungs-Log | **fehlt** | 📝 (Phase 2) |
| Team-Tab (Agency-Tarif) | **fehlt** | 📝 (Phase 2) |
### Finanzen
| Konzept-Aussage | IST | Status |
|---|---|---|
| Rechnungen mit Legacy-Archiv | umgesetzt | ✅ |
| Buchungen & Add-ons | nur Stub | 📝 (Phase 2) |
| Credits & Tarif | nur „bald"-Eintrag in Sidebar | 📝 (Phase 2) |
| Zahlungsmethoden firmenscharf | **fehlt** | 📝 (Phase 2) |
---
## 3. Großthemen aus dem Konzept — Status
### 3.1 KI-Freigabe-Workflow
**Konzept-Stand**: `Presseportal Konzept für Relaunch.md` Abschnitt 1.
| Punkt | Code-Stand |
|---|---|
| KI-Vorprüfung mit JSON-Antwort | **nicht implementiert** |
| Drei-Stufen-Ergebnis grün/gelb/rot | nur „review"/„published"/„rejected" via Admin-Flow |
| Logging der KI-Antworten | **fehlt** |
| Trust-Score | **fehlt** |
| Blacklist-Wort-Check | **vorhanden** über `PressReleaseService::submitForReview` mit `BlacklistViolationException` |
**Bewertung**: 📝 — Konzept-Vision für Phase 2/3, im Code nur die rudimentäre Blacklist-Variante.
### 3.2 Bilder & Lizenzen
**Konzept-Stand**: `Presseportal Konzept für Relaunch.md` Abschnitt 2 + `Admin-User.md` Punkt 4.
| Punkt | Code-Stand |
|---|---|
| Upload-Workflow (Eigenes / Stock / KI) | Nur „Eigenes Bild" via `press-release-images-manager` |
| Pflichtfelder (Urheber, Lizenztyp, Lizenz-URL, Personen-Einwilligung, Rechte-Bestätigung) | Nur `title` + `copyright` (Freitext) — **deutlich unter Konzept** |
| KI-Wasserzeichen-Check | **fehlt** |
| Unsplash/Pexels-API | **fehlt** |
| KI-Bildgenerierung | **fehlt** |
| `is_preview`-Flag für Titelbild | im Modell vorhanden, im Manager toggelbar |
| Bild-Varianten (thumb/medium/large) | `ImageService::PRESS_RELEASE_IMAGE_VARIANTS` generiert sie automatisch |
| SVG-Platzhalter, falls keine Bilder | **inline in Landing-Page-Komponenten (z. B. `focus-hero`, `feed-top-item`), kein zentrales Set** |
**Bewertung**: 📝 — Großthema für Phase 8 (siehe Plan). Lizenzfelder + SVG-Platzhalter sind Pflicht, bevor Bild-Upload produktiv geht.
### 3.3 Notice-and-Action (Meldung durch Dritte)
**Konzept-Stand**: `Presseportal Konzept für Relaunch.md` Abschnitt 3.
| Punkt | Code-Stand |
|---|---|
| Öffentliches Melden-Formular | **fehlt** |
| Ticketsystem mit Kategorien (Urheberrecht, Persönlichkeitsrecht, …) | **fehlt** |
| KI-Triage | **fehlt** |
| Quarantäne-Flow | **fehlt** |
**Bewertung**: 📝 — Phase 2/3-Thema, im Konzept gut beschrieben.
### 3.4 Magic-Link-Flow für Pressekontakte
**Konzept-Stand**: `Presseportal Konzept für Relaunch.md` Abschnitt 6.
| Punkt | Code-Stand |
|---|---|
| `magic_links`-Tabelle | **vorhanden** |
| Magic-Link-Generator | `MagicLinkGenerator` existiert (wird für PM-Vorschau-Links genutzt) |
| Magic-Link für Pressekontakt-Zugang | **fehlt** als eigener Flow |
| Token-Tabelle `press_release_access_requests` o. ä. | **fehlt** |
| Änderungs-Wizard (Tippfehler/Daten/Korrektur/Update/DSGVO) | **fehlt** |
**Bewertung**: 📝 — Phase 2-Thema, vollständig im Konzept beschrieben.
### 3.5 Pricing / Tarife / Credits
**Konzept-Stand**: `Presseportal Konzept für Relaunch.md` Abschnitt 8 + 9, `Konzept-Update 1.md`.
| Punkt | Code-Stand |
|---|---|
| Tarif-Tabellen (Einzel/Starter/Business/Pro/Agency) | **nicht im Datenmodell** |
| PM-Kontingent pro Tarif | **fehlt** |
| Bonus-Credits monatlich | **fehlt** |
| Credit-Pakete | **fehlt** |
| Auto-Refill | **fehlt** |
| Stripe-Integration | **fehlt** |
| `user_payment_options`-Tabelle | **vorhanden** (Pivot zu Companies da, aber kein aktiver Flow) |
**Bewertung**: 📝 — Phase 2/3, größtes ungebautes Feature. Für Phase 8 ist relevant: bei PM-Einreichung wird **konzeptuell** Quota dekrementiert; die UI-Anzeige im Veröffentlichungs-Modal kann darauf vorbereitet werden, das echte Decrement-Verhalten kommt aber erst mit dem Tarif-Modul.
### 3.6 Korrektur-Modell & Tombstones
**Konzept-Stand**: `Presseportal Konzept für Relaunch.md` Abschnitt 4.
| Punkt | Code-Stand |
|---|---|
| Korrektur-Hinweis | **fehlt** |
| Update-Hinweis (am Ende anhängen) | **fehlt** |
| Anonymisierung (DSGVO) | **fehlt** |
| Tombstone statt Hard-Delete | `PressReleaseService::deleteFromAdmin()` setzt veröffentlichte PMs auf „archiviert" mit Ersatztext — **rudimentär da** |
| Textvorlagen admin-pflegbar | **fehlt** |
**Bewertung**: 🔄 — Tombstone-Variante existiert minimal; Konzept-Doku sollte den Ist-Stand notieren, der Rest ist Phase 2.
### 3.7 Score / Trust-Score (Konzept-Update 2)
**Konzept-Stand**: `Konzept-Update 2 Score-Stufen-System.md`.
| Punkt | Code-Stand |
|---|---|
| User-Score-Tabelle | **fehlt** |
| Firmen-Score | **fehlt** |
| Auto-Publishing in Abhängigkeit vom Score | **fehlt** |
**Bewertung**: 📝 — Phase 3, vollständig im Konzept.
---
## 4. Was im Code da ist, aber im Konzept nicht / nur am Rande steht
| Feature | Wo im Code | Doku-Nacharbeit |
|---|---|---|
| Phase-7-Schema-Erweiterungen (`press_releases.subtitle`, `scheduled_at`, `embargo_at`, `boilerplate_override`, `no_export`) | Migrationen `2026_05_20_*` | Im Konzept ergänzen, dass PMs Untertitel + Scheduling/Embargo unterstützen |
| `mews/purifier` für HTML-Sanitization | `PressReleaseHtmlSanitizer` | Im Konzept-Abschnitt zu Editor erwähnen |
| `press_release_attachments`-Tabelle + Model | Migration `2026_05_20_143424_*` | UI auskommentiert, Tabelle bleibt → Doku-Anker für spätere Reaktivierung |
| Background-Job für scheduled publishing | `app/Console/Commands/PublishScheduledPressReleases.php`, alle 5 Min via Scheduler | Im Konzept als „automatische Veröffentlichung zum geplanten Termin" hinzufügen |
| FluxUI Toast für UX-Feedback | `Flux::toast()` durchgehend in Customer-Forms | Konzept-übergreifend, kein Konzept-Update nötig |
| Smooth-Scroll zu Validation-Errors | `resources/js/portal-form-hooks.js` | UX-Detail, keine Konzept-Doku |
| Pre-Submit-Check-Liste in PM-Forms | computed `presubmitChecks` | Im Konzept als „Pre-Submit-Check senkt Support-Aufwand" ergänzen |
| Hub-Design-System (Tokens + Komponenten) | `dev/frontend/hub-flux/` (Phase 07) | Eigene Roadmap-Doku, nicht teil von `docs/` |
| Theme-Override pro Domain | `ThemeServiceProvider` + `config/domains.php` | In `Echte öffentliche Unterseiten.md` ergänzen |
| Public-Detail-Page (`web/release-detail.blade.php`) | umgesetzt | In `Echte öffentliche Unterseiten.md` als „existiert" markieren |
---
## 5. Offene Punkte aus dem letzten Code-Review
Diese Punkte habe ich beim Review der Phase-7-Forms gefunden, sie sind weder
in den Konzept-Dokumenten erfasst noch in einem Plan:
| Lücke | Betroffene Dateien | Empfehlung |
|---|---|---|
| Customer-Show zeigt weder `subtitle` noch `scheduled_at`/`embargo_at`/`boilerplate_override` | `customer/press-releases/show.blade.php` | Phase 8 |
| Admin-Show zeigt weder `subtitle` noch `boilerplate_override` | `admin/press-releases/show.blade.php` | Phase 8 |
| Liste-Indikator für Scheduling/Embargo | `customer/press-releases/index.blade.php`, `admin/press-releases/index.blade.php` | Phase 8 |
| Pressekontakt-Sidebar zeigt keine Warn-Box, wenn kein Kontakt gewählt | `customer/press-releases/create.blade.php`, `edit.blade.php` | Phase 8 |
| Anhang-Tests laufen ins Leere | `tests/Feature/PressReleaseAttachmentsManagerTest.php`, Teile von `PressReleasePhase7SchemaTest.php` | Phase 8 → `->skip(...)` mit Verweis auf Security-Review |
| Roadmap-Doku `19-PHASE-7-PRESS-RELEASE-FORM.md` ist nicht mehr aktuell | Letzte 3 große Änderungen fehlen | Phase 8-Doku-Block |
---
## 6. Empfehlungen zur Pflege der Doku
### 6.1 Sofort ohne Risiko machbar
1. In `Admin-User.md` ergänzen: „PMs unterstützen Untertitel, Scheduling und
Embargo seit Phase 7".
2. In `Presseportal Konzept für Relaunch.md` Abschnitt 1: aktuellen
Blacklist-Stand notieren („KI-Vorprüfung folgt; aktuell wird per
Blacklist gegen offensichtliche Verstöße geprüft").
3. In `Presseportal Konzept für Relaunch.md` Abschnitt 2: hinzufügen,
dass Bilder aktuell nur als „Eigenes Bild" hochgeladen werden können,
Stock- und KI-Quellen folgen.
4. In `Presseportal Konzept für Relaunch.md` Abschnitt 4: notieren, dass
Tombstone-Variante rudimentär da ist (`deleteFromAdmin`-Ersatztext),
die Korrektur-/Update-Hinweise aber noch fehlen.
5. In `checkliste-user-backend.md` neuen Block „Phase 7" hinzufügen mit
Verweis auf `dev/frontend/hub-flux/19-PHASE-7-PRESS-RELEASE-FORM.md`.
### 6.2 Mit Phase 8 ergänzen
6. Neuer Abschnitt im `Admin-User.md`: „Titelbild & SVG-Platzhalter".
7. Neuer Abschnitt im `Presseportal Konzept für Relaunch.md`: „Veröffentlichungs-Modal & Quota-Kommunikation".
8. Aktualisierung der Firmen-Liste-Doku im `Admin-User.md` mit den
neuen UI-Bausteinen (Counter-Strip, Saved-Views, Filter-Chips,
Card/List-Toggle, Rollen-Legende).
### 6.3 Längerfristig (Phase 2/3)
9. Magic-Link-Flow für Pressekontakte → eigenes Doku-Kapitel, sobald
gebaut.
10. Tarif-/Credit-System → eigener Architektur-Block (Datenmodell,
Stripe-Integration, Quota-Counter-Implementierung).
---
## 7. Quellen-Übersicht für die nächsten Schritte
| Frage | Quelle |
|---|---|
| Was ist konzeptuell der User-Backend-Aufbau? | `docs/user-admin/Admin-User.md` |
| Was ist bereits umgesetzt, was offen? | `docs/user-admin/checkliste-user-backend.md` (Phase 1 ✅) |
| Datenmodell-Übersicht? | `docs/user-admin/user-zusammenhaenge.md` |
| Großthemen-Konzept (KI, Bilder, Tombstones, Magic-Link, Pricing)? | `docs/user-admin/Presseportal Konzept für Relaunch.md` |
| Brand- & Design-System? | `docs/konzept/Entwicklungs-Konzept - Frontend-Komponenten Multi-Brand.md`, `dev/frontend/hub-flux/*` |
| Score-System? | `docs/konzept/Konzept-Update 2 Score-Stufen-System.md` |
| Aktuelle Phase 7 (PM-Form-Refactor)? | `dev/frontend/hub-flux/19-PHASE-7-PRESS-RELEASE-FORM.md` |
| Nächste Phase 8? | `docs/PHASE-8-USER-PANEL-PLAN.md` (neu, neben diesem Dokument) |