diff --git a/docs/weiteres/Decision-Update Phase-2-Funktionen & Magic-Link-Änderungsprozess.md b/docs/weiteres/Decision-Update Phase-2-Funktionen & Magic-Link-Änderungsprozess.md index a909a35f..2f64f757 100644 --- a/docs/weiteres/Decision-Update Phase-2-Funktionen & Magic-Link-Änderungsprozess.md +++ b/docs/weiteres/Decision-Update Phase-2-Funktionen & Magic-Link-Änderungsprozess.md @@ -224,4 +224,31 @@ Die credit-nahe Mechanik ist technisch umgesetzt. Single Source of Truth für al **Noch offen / nächste Schritte** - Featured-Platzierung geboosteter PMs im öffentlichen Web-Feed. -- Vorab-Prüfung/Redigieren (§4.1) als Voraussetzung für Prüfzähler-UI und Pfade C/D/G. \ No newline at end of file +- Vorab-Prüfung/Redigieren (§4.1) als Voraussetzung für Prüfzähler-UI und Pfade C/D/G. + +## 7. Launch-Vorbereitung (Stand 18.06.2026) + +Aufsetzend auf dem Credit-Stand aus §6 wurden weitere Launch-Punkte umgesetzt: + +**Status-Widget (immer verfügbarer Buchungsüberblick)** +- Header-Dropdown oben rechts (Desktop) bzw. im Mobile-Header, für alle Kunden-Panel-User: aktuelle Buchung/Tarif (+ Intervall), verbleibendes PM-Kontingent (oder ∞), Credit-Guthaben. Ohne aktive Buchung Hinweis + Link zur Buchungsseite. +- `CustomerStatusSummary` bündelt die Anzeige-Werte über die öffentliche `User`-API (Gating bleibt Single Source of Truth im Modell); Anzeige via `x-customer.status-menu`. Kompakte Topbar (`min-h-0`), kein Leerraum. + +**WS-8 Code-Optimierung** +- `User::currentPlan()` und `hasUnlimitedPressReleaseQuota()` pro Request memoisiert (Status-Widget fragt sie auf jeder Seite ab); `fresh()` setzt den Cache zurück. +- Detailseite: `getMyPR()` war nicht memoisiert und lief bis zu 7× pro Request mit voller Eager-Load-Query → memoisiert; Firmen-Kennzahlen per `withCount()` statt nachträglichem `loadCount()`. +- Dedup: `PressRelease::scopeAccessibleBy(User)` (Kunden-PM-Zugriff), `Contact::scopeForCompany()`, `BillingAddress::REQUIRED_FIELDS`/`completenessPercent()`, Trait `InteractsWithPressReleaseTags` (create/edit). + +**Paket-Vorteile (dynamisch, admin-pflegbar)** +- `plans.benefits` (JSON-Spalte, Cast, `Plan::benefitsList()`). Im Admin „Tarife & Pakete" zeilenweise pflegbar; angezeigt auf der In-App-Buchungsseite UND der öffentlichen Preise-Seite (eine Datenquelle). DB-Vorteile sind admin-redaktioneller Klartext (unter `/en` nicht auto-übersetzt — bewusst). + +**i18n (Internationalisierungs-Readiness)** +- Default-Locale auf `de` (`APP_LOCALE`/`APP_FALLBACK_LOCALE`): Backend rendert Deutsch nativ als Schlüssel; `en` ist der spätere Umschalter. Frontend nutzt bereits URL-Prefix `/de`–`/en` (`SetEdition`) + strukturierte `lang/de|en/*.php`. +- Alle Backend-Views sind `__()`-gewrappt (Auth-Strecke als letzter Rest nachgezogen). Leeres `lang/en.json` als Gerüst. +- **Bewusst offen:** Backend-Sprachumschalter (Middleware liest `user->language`) und die EN-Übersetzungen (~2743 Strings) — erst beim tatsächlichen EN-Launch. + +**Bekannter Bugfix** +- Legacy-/importierte PMs (Plaintext mit `\n`) verloren beim Laden in den HTML-Editor die Umbrüche → `PressReleaseHtmlSanitizer::toEditorHtml()` wandelt sie beim Bearbeiten in `
`/`
`.
+
+**Noch offen / nächster Schritt**
+- End-to-End-Flow-Durchlauf mit Testbuchungen (Detail-/Optikkorrekturen, Stripe-Testmodus) — QA als letzter Launch-Schritt.
\ No newline at end of file
diff --git a/docs/weiteres/Live-Deployment-Checkliste (WS-7).md b/docs/weiteres/Live-Deployment-Checkliste (WS-7).md
index 36e28132..e2937f5e 100644
--- a/docs/weiteres/Live-Deployment-Checkliste (WS-7).md
+++ b/docs/weiteres/Live-Deployment-Checkliste (WS-7).md
@@ -106,6 +106,7 @@ Diese Phase-Migrationen MÜSSEN durchlaufen (Details im Sicherheits-Doc §7):
3. `add_oauth_provider_columns_to_users` — Google-Verknüpfung.
4. `create_legal_requests_table` — Compliance-Queue (WS-3).
5. **Credit-Ökonomie** (Decision-Update Rev. 4): `create_credit_wallets_table`, `create_credit_transactions_table` (Wallet + Ledger), `create_review_checks_table` (Prüfzähler), `create_boosts_table` (Platzierung), `create_credit_topups_table` (Stripe-Aufladung). Ohne sie schlagen Wallet-, Boost-, Nachweis- und Topup-Flows fehl.
+6. `add_benefits_to_plans_table` — Tarif-Vorteile (admin-pflegbare Liste, In-App- und Preise-Seite). Nullable; ohne sie greift der Plan-Vorteils-Fallback. Vorteilstexte kommen aus dem Seeder bzw. dem Admin („Tarife & Pakete").
Einmalige Setups (idempotent, in dieser Reihenfolge):