presseportale/dev/frontend/hub-flux/20-PHASE-8-USER-PANEL.md
Kevin Adametz 8d8d957884 Doku: Status-Sync 11./12.06., Decision-Update Preisstruktur und Phase-9-Plan
- Decision-Update Preisstruktur & Veroeffentlichungs-Flow aufgenommen
  (Launch-Tarife, Slot-Verbrauch bei Veroeffentlichung, Submit-Gate,
  Launch-Credits) inkl. Klarstellung 12.06.: Gelb geht direkt live,
  keine manuelle Pruef-Queue, nur Rot wird abgelehnt
- Alle Status-Dokumente auf den Code-Stand gezogen: README-Index,
  STATUS-ABGLEICH (KI-Pipeline, Bilder/Lizenzen, Pricing), Checkliste
  (KI- und Titelbild-Bloecke, Launch-To-dos), Admin-User,
  user-zusammenhaenge (Datenmodell-Delta), Entwicklungsplan KI-Pruefung
  (Phase 0 abgehakt, Decision-Abgleich)
- Ueberschriebene Tarif-Abschnitte in Konzept-Update 1/2 und
  Relaunch-Konzept mit Superseded-/IST-Hinweisen markiert
- Neues Plan-Dokument PHASE-9-FLOW-UND-TARIFE-PLAN.md (9A-9J)
- Phase-8-Roadmap-Doku (20-PHASE-8-USER-PANEL.md) + PROGRESS-Eintraege

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 09:20:22 +00:00

4.8 KiB
Raw Blame History

Phase 8 · User-Panel-Konsolidierung & PM-Lifecycle

Stand: 2026-05-29 · abgeschlossen

Plan-Doc: docs/PHASE-8-USER-PANEL-PLAN.md Abgleich: docs/STATUS-ABGLEICH-USER-PANEL.md

Folge-Initiative nach Phase 7 (PM-Form-Refactor). Ziel: das User-Panel produktionsreif abrunden — Show-Page-Lücken, Firmen-Liste auf Mockup-Niveau, durchgängige PM-Titelbilder, rechtssichere Bild-Lizenzen und ein bewusster Veröffentlichungs-Flow mit Kontingent-Vorbereitung.

Päckchen-Übersicht

ID Thema Status
8A Show-Page-Lücken (subtitle, scheduling, embargo, boilerplate_override) — Customer + Admin
8B Listen-Indikatoren für Scheduling/Embargo
8C Pressekontakt-Warn-Box in der Form-Sidebar
8D Doku-Sync (docs/user-admin/*, STATUS-ABGLEICH)
8E Firmen-Liste auf Mockup-Niveau (Counter-Strip, Saved-Views, Filter-Chips, Toggle, Rollen-Legende)
8F SVG-Titelbild-Platzhalter-Set + Anzeige-Komponente + Picker-Modal
8G Titelbild-Schema (placeholder_variant) + Cover-Resolver
8H Bild-Upload mit Lizenz-Pflichtfeldern
8I Veröffentlichungs-Modal (Rechtshinweis + Kontingent)
8J Quota-Stub im Datenmodell + monatlicher Reset-Command
8K Tests, Pint, Build, Doku-Abschluss

Wichtigste Code-Artefakte (8F8J, neu in dieser Phase)

Enums

  • app/Enums/PressReleasePlaceholder.php — 9 SVG-Varianten (Default, Seed-deterministisch, Labels, Asset-Pfad).
  • app/Enums/ImageLicenseType.php — 5 Lizenztypen, requiresLicenseUrl().

Assets / Komponenten

  • public/images/press-release-placeholders/01..09-*.svg (1600×900, 3 Muster × 3 Hub-Farben).
  • resources/views/components/portal/press-release-placeholder.blade.php — rendert Bild/Platzhalter mit optionalem Titel-Overlay.
  • resources/views/livewire/components/press-release-placeholder-picker.blade.php — FluxUI-Modal mit 3×3-Grid, dispatcht placeholder-selected.

Services

  • app/Services/PressRelease/PressReleaseCoverImage.phpcoverUrl(), coverIsPlaceholder(), placeholder(). Bevorzugt is_preview-Bild, fällt sonst auf den SVG-Platzhalter zurück.

Schema (additive, nullable/Default-Migrationen)

  • press_releases.placeholder_variant (string 32, nullable).
  • press_release_images: author, license_type, license_url, persons_consent (default false), rights_confirmed_at.
  • users: press_release_quota (default 3), press_release_quota_used_this_month (default 0).

Models

  • PressRelease: Cast + creating-Hook setzt deterministisch eine Platzhalter-Variante, wenn keine gesetzt ist.
  • PressReleaseImage: Lizenz-Felder + license_type-Enum-Cast.
  • User: pressReleaseQuotaRemaining().

Service-Hook & Command

  • PressReleaseService::submitForReview() zählt press_release_quota_used_this_month des Autors hoch (Stub).
  • app/Console/Commands/ResetMonthlyPressReleaseQuota.php + Scheduler-Eintrag (monthlyOn(1, '00:05')) in routes/console.php.

Views

  • Customer-Show + Admin-Show: Hero-Titelbild via Cover-Resolver.
  • Customer Create/Edit: Platzhalter-Vorschau + Picker-Einbindung (#[On('placeholder-selected')]).
  • Customer-Show: Veröffentlichungs-Modal (confirm-submit-review) mit Rechts-Platzhalter, Kontingent-Badge und 3 Bestätigungs-Checkboxen (Submit-Button via Alpine disabled bis alle gesetzt).
  • Image-Manager: Lizenz-Felder + Anzeige in der Bild-Kachel.

Tests (neu)

  • tests/Feature/PressReleasePlaceholderTest.php (8) — Enum, Assets, Picker, Cover-Resolver (Platzhalter + echtes Bild).
  • tests/Feature/PressReleaseImageLicenseTest.php (3) — Pflichtfelder, CC-ohne-URL, vollständiger Upload + rights_confirmed_at.
  • tests/Feature/PressReleaseQuotaTest.php (3) — Remaining-Berechnung, Increment bei Submit, monatlicher Reset.
  • tests/Feature/PressReleasePublishModalPhase8iTest.php (2) — Modal-Inhalt (Rechtshinweis + Kontingent), Submit-Flow.

Gesamt-Suite nach Phase 8: 375 passed, 4 skipped. Pint clean, npm run build:portal clean.

Bewusste Abweichungen / offene Folge-Themen

  • 8H — Upload-Control: flux:input type=file statt flux:file-upload (Pro-Dropzone mit aufwändigem Slot-Aufbau). Funktion identisch, kein Risiko für den Upload-Flow. Dropzone-Optik ggf. separat nachziehen.
  • 8I — Rechtstext ist ein Platzhalter und vor Go-Live anwaltlich zu prüfen.
  • 8J — Quota ist ein Stub. Die Schnittstelle User::pressReleaseQuotaRemaining() bleibt stabil; das echte Tarif-/Credit-Modul löst Spalten + Decrement-Logik später ab.
  • Offen (Phase 2/3): Stock-/KI-Bildquellen, Wasserzeichen-Check, Magic-Link-Flow für Pressekontakte, Statistik-/Abrechnungs-Tabs, Anhänge-Reaktivierung (Security-Audit).