Commit graph

34 commits

Author SHA1 Message Date
91992ac4b0 Uebernahme bestehender Legacy-API-Integrationen (Keys, Auth, Pfade)
Bestehende Kunden-Integrationen der Altportale laufen nach dem Relaunch
weiter, ohne dass Kunden etwas umstellen muessen:

1. legacy:import-api-keys uebernimmt die api_keys aus den Legacy-DBs
   (sf_guard_user_profile) als Sanctum-Tokens mit identischem Secret
   (Sanctum loest Tokens ohne id|-Praefix per sha256-Hash auf) — nur
   fuer berechtigte Nutzer (aktiver Zahlungsstatus/Bestandsschutz,
   ApiAccessEligibilityService); idempotent, mit Dry-Run. Probe gegen
   die lokalen Snapshots: 406 Keys wuerden uebernommen.
2. Die Auth-Middleware uebersetzt die alten Uebergabeformen (X-ApiKey-
   Header, api_key-Parameter) fuer gueltige Keys in Bearer; unbekannte
   Keys erhalten weiterhin 410 mit Migrationshinweis.
3. Die dokumentierten /service/...-Pfade der Alt-API sind als Aliasse
   auf die v1-Controller gelegt (pressreleases inkl. Bilder, companies
   lesend); nicht uebernommene Alt-Endpoints (Pressemappen/Kontakte
   anlegen) antworten 410 mit Hinweis auf Kundenkonto und neue Doku.

API-Seite + OpenAPI entsprechend aktualisiert; Go-Live-Checkliste um den
Import-Schritt (nach dem Grandfathering) ergaenzt.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 11:55:22 +00:00
198be381d6 T12: Depublikations-Checkout mit Tombstone (config-gated)
Kunden koennen eigene veroeffentlichte PMs kostenpflichtig aus der
oeffentlichen Ansicht nehmen: Panel auf der PM-Detailseite (inkl.
T1neu-Unternehmer-Checkbox und Doppelausweis netto/brutto), Stripe-
Ad-hoc-Checkout wie Credit-Topups, Erfuellung im Webhook — die PM
wechselt auf archived + depublished_at, die oeffentliche URL zeigt
dauerhaft einen Tombstone (410 Gone, ohne Inhalte, mit ehrlichem
Drittarchive-Hinweis). Doppelbuchungs-Bremse pro PM; Status-Log mit
Quelle "depublication". Gate: ohne BILLING_DEPUBLICATION_PRICE_CENTS
bleibt der Weg deaktiviert und /melden zeigt die neutrale
Preisformulierung [EXTERN: Preis festlegen, O6].

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 09:46:25 +00:00
2a9be7a9af T10: DSA-Meldeformulare mit URL-Feld, Vorgangsnummer und Eingangsbestaetigung
Zwei eigenstaendige Formulare unter /melden/rechtswidrig (DSA Art. 16:
URL, Name, E-Mail, Begruendung, Wahrheitsversicherung) und
/melden/kontaktdaten (DSGVO-Antrag) auf allen drei Domains. Gemeldete
URLs werden automatisch der passenden veroeffentlichten PM zugeordnet;
ohne Treffer bleibt die URL im payload. Jede Meldung erhaelt eine
Vorgangsnummer (M-{id}, analog K-{id} der Kuendigung), die meldende
Person unverzueglich eine Eingangsbestaetigung (DSA Art. 16 Abs. 4) und
das Melde-Postfach einen internen Hinweis — auch im bestehenden
Per-PM-Flow. Admin-Queue zeigt Vorgangsnummer, Name und gemeldete URL;
/melden verlinkt die neuen Formulare als ersten Weg.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 09:35:30 +00:00
61a677aa0b T13: Melde-Links sichtbar unter jeder Pressemitteilung
Unter dem Artikelinhalt steht jetzt eine eigene Zeile mit "Inhalt melden"
und "Eigene Daten entfernen" (inkl. Kostenlos-Hinweis) — bisher waren die
Wege nur in der Sidebar-Box "Weiterfuehrend" auffindbar. Erfuellt die
DSA-Anforderung eines leicht zugaenglichen Meldewegs direkt am Inhalt.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 09:26:58 +00:00
0bec71ffa5 Ablehnungskategorien live aus der DB (rejection_categories)
/richtlinien rendert jetzt alle aktiven Kategorien aus der neuen
rejection_categories-Tabelle (stabiler code als Anker, public_label/desc,
optionale Beispiele) statt der statischen K1-K6-Liste. Kategorien werden
nie geloescht, nur deaktiviert; neue Kategorien erscheinen ohne
Textaenderung und ohne neue AGB-Version (AGB par. 7 Abs. 3 verweist nicht
abschliessend). Seeder legt K1-K6 idempotent an; Versionszeile der Seite
kommt aus legal_documents. Go-Live-Checkliste um beide Seeder ergaenzt.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 09:25:16 +00:00
7510e7633e E3: Rechtstext-Versionierung in der DB (legal_documents)
Jede veroeffentlichte Fassung eines Rechtstexts ist eine Zeile mit
type/version/effective_from — alte Fassungen sind unloeschbar, zukuenftige
werden erst ab Stichtag wirksam (LegalDocument::current). Seeder legt die
fuenf aktuellen Fassungen an (AGB 0.6, Datenschutz 0.3, Richtlinien 0.1,
Meldeverfahren 0.1, Impressum 0.1). Die Unternehmer-Bestaetigung (T1neu)
referenziert jetzt die konkrete Fassung (legal_document_id am
Buchungsdatensatz, restrictOnDelete); AGB-Seite und Buchungs-Modal ziehen
Version/Stand aus der DB. config/legal.php bleibt reiner Fallback.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 09:21:52 +00:00
3940d462d9 Umami-Webanalyse eingebaut, bis zum Go-Live deaktiviert
Selbst gehostetes Umami (sys.adametz.media) je Brand: Website-IDs aus
dev/release/umami.md in config/domains.php, Snippet via x-web.umami im
web-master-Layout auf allen oeffentlichen Seiten der drei Domains.
UMAMI_ENABLED=false haelt es aus, bis die Webseiten live gehen
(User-Vorgabe 06.07.; Go-Live-Checkliste WS-7 ergaenzt). Damit stimmt
Datenschutz Abschnitt 5 mit dem Code ueberein. User bestaetigt ausserdem:
Log-/Backup-Fristen und Stripe-Entitaet passen wie eingetragen.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 08:56:14 +00:00
43397adb6a Zentrale Rechts-E-Mail info@pressekonto.com fuer alle Rechtstexte
User-Entscheidung 06.07.: info@pressekonto.com ist die Haupt-E-Mail fuer
alle rechtlichen Anliegen. Zentral in config/legal.php (LEGAL_CONTACT_EMAIL),
verwendet von Impressum, AGB, Datenschutz, /melden und /richtlinien auf
allen drei Domains. Support-Kontakt bleibt je Brand (CONTACT_EMAIL_*),
REPORT_EMAIL_* ist nur noch optionales separates DSA-Postfach. Nebenbei
den verunglueckten Enterprise-Hinweis auf der Buchungsseite repariert
(E-Mail war ohne Trennung angeklebt).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 08:32:59 +00:00
8916bcce7c T1neu: Unternehmer-Pflicht-Checkbox im Checkout, protokolliert mit AGB-Version
B2B-Gate (AGB v0.6 par. 1 Abs. 4): Das Buchungs-Modal verlangt vor jedem
Stripe-Checkout die Bestaetigung 'Ich bestelle in Ausuebung meiner
gewerblichen oder selbstaendigen beruflichen Taetigkeit (par. 14 BGB)'.

- booking_confirmations: user, Buchungstyp/-ref, AGB-Version, IP,
  confirmed_at (Nachweis laut Datenschutz Abschnitt 7)
- Checkout-Link erscheint erst nach der Checkbox; CheckoutController
  verlangt zusaetzlich serverseitig eine zeitnahe Bestaetigung (30 Min.)
  fuer Abo/Einzel-PM/Credit-Topup — Direktaufrufe laufen ins Leere
- config/legal.php als zentrale AGB-Versionsquelle (Seite + Protokoll,
  Uebergangsloesung bis zum legal_documents-System E3)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 16:17:59 +00:00
99ab47ba1f Datenschutzerklaerung v0.3 eingebaut, Cookie-Seite zurueckgebaut
- Datenschutz: vollstaendige v0.3 aus docs/legal, host-aware Bausteine
  (Hub: Kundenkonto/Login-Magic-Link/Stripe; Spokes: Medienprivileg,
  Newsroom, Aenderungslink-Variante); Systemwerte aufgeloest (Magic-Link
  15 Min. aus MagicLinkGenerator, Logs 14 Tage, Stripe Payments Europe);
  ersetzt den Platzhalter samt falscher Google-Analytics-Behauptung
- Cookie-Seite raus (Cookies stehen in Abschnitt 4 der Datenschutz-
  erklaerung, kein Banner noetig): Route -> 301 auf /datenschutz,
  Legacy-Alias cookies.html -> datenschutz, Footer + Sitemap bereinigt

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 16:17:59 +00:00
545eb52cfe Preise nach Leistungsbeschreibung v0.2: B2B-Satz, Credit-Anker, Regeln
- Intro mit B2B-Erkennbarkeits-Satz (Gate-Flankierung, T14/T1neu)
- T9-Credit-Anker ('1 Credit entspricht rechnerisch 1 EUR netto,
  massgeblich sind die Buchungspreise') statt fixer Gleichung
- E5-Jahreszahlweise im Untertitel (nach 12 Monaten monatlich)
- Neue Hinweisbloecke: Slots/Kontingente, Credit-Gueltigkeit (3 Jahre +
  Erinnerung), Boost-Leistungszusage inkl. 60-Min-Regel, Partnerportale
  (derzeit keine Weitergabe) — Render-Pflichten, auf die die AGB verweisen
- T16-Wording: 'Inhaltsprüfung' statt 'Redaktionelle Prüfung'; nicht
  implementierte Benefits (Boost verguenstigt, Mengenrabatte,
  priorisierte Pruefung) aus dem PlanSeeder entfernt + DB nachgezogen

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 15:53:08 +00:00
d577ff54b8 R3.1: Rechtstexte eingebaut — Impressum, AGB v0.6, Richtlinien, Meldeverfahren
- Impressum: echte Anbieterdaten (adametz.media, Bielefeld, USt-ID) statt
  erfundener GmbH; DDG statt TMG, MStV-Verantwortlicher, Verbund-Absatz,
  DSA-Kontaktpunkt (Art. 11/12) mit neuem REPORT_EMAIL_*-Melde-Postfach
- AGB: B2B-Fassung v0.6 (03.07.2026) vollstaendig gerendert (par. 1-16,
  interne Anwalts-Anmerkungen entfernt, Variablen je Host aufgeloest);
  ersetzt den widerspruechlichen Platzhalter (30-Tage-Frist etc.)
- Neu: /richtlinien (Rahmentext + Ablehnungskategorien K1-K6 mit Ankern,
  statisch bis zum rejection_categories-System) und /melden (DSA/DSGVO/
  Aenderung/Depublikation, verdrahtet mit den bestehenden Melde-Links an
  jeder Mitteilung; eigenstaendige Formulare = Backlog T10/T12)
- Footer beider Gerueste + Sitemap um Richtlinien/Melden ergaenzt
- Versioniertes legal_documents-System (E3) bleibt R3.1-Folgeausbau

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 15:53:06 +00:00
f3a95c854d API-Doku: echte Referenz statt Fantasie-Features
- /de/api komplett neu: reale Endpunkte, Felder, Token-Abilities,
  Rate-Limit und Statuscodes der API v1 (angelehnt an die Legacy-Doku
  von businessportal24.com/service/documentation.html); OAuth/SDKs/
  Webhooks/Integrations-Behauptungen und api.example.com entfernt
- docs/api/v1.yml (OpenAPI 3.1) erstellt — die docs.api.v1-Route lief
  bisher auf eine nie vorhandene Datei (500er aus Hub-Footer/FAQ)
- Token-Vergabe korrekt beschrieben: Selfservice im Konto mit
  Buchungs-Gate statt 'auf Anfrage'; X-ApiKey-Migrationshinweis
- ApiDocumentationTest entskippt + Seiten-Test ergaenzt

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 15:36:19 +00:00
73fc3827c8 Web-Inhalte auf echten Funktionsstand: FAQ, Hilfe, Veroeffentlichen
- FAQ komplett neu: B2B-Hinweis, echte Datei-Limits (Bilder 16 MB,
  Anhaenge inkl. Office/ZIP 25 MB), Video-Einbettungs-Behauptung raus,
  Stripe/Rechnung als Zahlungswege, Kuendigungs- und API-Antworten mit
  echten Zielen, kein Export-/Farben-/Wizard-Versprechen mehr
- Hilfe-Center: tote '#'-Links durch echte Ziele ersetzt (Registrieren,
  Kuendigungsseite, Konto-Login), Support-Kontakt als mailto, erfundene
  Geschaeftszeiten entfernt
- Veroeffentlichen: Fantasie-Preismodell ('ab 89 EUR', Credits je
  Veroeffentlichung, Cross-Publishing separat) durch echte Konditionen
  ersetzt (Einzel-PM + Tarife aus DB/config via VeroeffentlichenPageData);
  Magic-Link-Registrierungs-Claim korrigiert

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 15:35:26 +00:00
9c9f7f7144 Hub-Inhalte: Claims korrigiert + Widerrufs-UI zurueckgebaut (B2B-only, E2)
- Registrierungs-Schritt ehrlich beschrieben (E-Mail/Google, Freischaltung
  nach E-Mail-Bestaetigung statt 'direkt freigeschaltet'; Magic-Link ist
  nur Anmeldeweg)
- Newsroom-Karte: 'getrennte Berechtigungen'/'mehrere Redakteure' durch
  belegbare Aussagen ersetzt (keine Team-Verwaltung im Panel)
- Kuendigungs-FAQ nach E5 (Jahreszahlweise 12 Monate, danach monatlich)
  + Link auf die Selfservice-Kuendigungsseite
- B2B-Erkennbarkeits-Satz im Tarife-Intro (AGB v0.6 / T14)
- Wording T16: 'Inhaltsprüfung' statt Redakteurs-Versprechen; 'kein
  automatisierter Durchlauf'-Behauptung entfernt
- Widerrufs-Button + Modal-Includes entfernt (Entscheidung E2 B2B-only,
  T3neu: Kuendigungsbutton bleibt freiwillig); Backend/Route bleibt
  schlafend erhalten, reaktivierbar bei B2C-Oeffnung
- Hub-FAQ/Footer verlinken die API-Seite statt der toten docs-Route

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 15:35:03 +00:00
d34088e539 Web (R3.2): Marketing-Platzhalterseiten zurueckgebaut
team/partner/karriere/presse (erfundene Personen, Fake-Partner,
Bewerben-Buttons ohne Ziel) samt Routen entfernt (User-Entscheidung
03.07.: lieber weniger Seiten, aber ehrlich). Altes Scaffold
(livewire web.burger-menu/header/footer) wurde nur von diesen Seiten
genutzt und ist mit raus. Legacy-.html-Links: team/partner/karriere
-> 301 Startseite; presse/* behaelt die bestehende 301-Regel auf /faq.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 13:22:50 +00:00
2d1c7aa666 Web (R4): tote Alt-Frontend-Fragmente entfernt
7 ungeroutete Views (examples/, welcome, home 'B2IN', brand-mark-View,
web-master-test, altes engl. Header/Footer-Layout) + 12 ungenutzte
x-web-Komponenten + 7 nur von examples/ referenzierte Komponenten
(per grep verifiziert, User-Freigabe 03.07.). Verwaiste
.highlights-slider-CSS-Regeln mit entfernt; Web-Build gegengeprueft.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 13:22:35 +00:00
6e5d67c842 Web: Marketing-Seiten brand-aware (Titel/Meta) statt 'Business Portal 24'
karriere/partner/presse/team loesen die Brand jetzt pro Request ueber
WebPortalContext auf (config('app.theme') ist bei Route::view-Seiten
ohne Controller nicht gesetzt) und haben Meta-Descriptions;
businessportal24-Startseite auf das config-getriebene meta_title/
meta_description-Muster von presseecho vereinheitlicht.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 12:34:12 +00:00
e9643e620a SEO: host-aware sitemap.xml + dynamische robots.txt je Domain
Sitemap pro Host (1h-Cache): Hub listet Landing + Rechts-/Info-Seiten,
Spokes zusaetzlich Kategorien (lokalisierte Slugs), oeffentliche
Newsrooms und alle im Archiv sichtbaren PMs des Portals (explizit ohne
PortalScope, forPortalValues). Suche und Marketing-Platzhalterseiten
bleiben draussen. Statische public/robots.txt entfernt (haette die
Route verschattet); robots.txt jetzt dynamisch mit Sitemap-Verweis
und Disallow fuer /admin, /login, /register, Suche.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 12:34:12 +00:00
52bc534e7d Recht (Web): Vertraege-hier-kuendigen-Button + Bestaetigungsseite im Hub
Kuendigungsbutton (Par. 312k BGB) im Hub-Footer unter dem
Widerrufsbutton, staendig verfuegbar; fuehrt unmittelbar auf die
Bestaetigungsseite mit dem Formular und der gesetzeskonformen
Bestaetigungsschaltflaeche 'jetzt kuendigen'. Eigener Error-Bag,
damit das Kontakt-Modal im Footer nicht mit aufspringt.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 11:32:53 +00:00
515e249132 Recht (Web): Vertrag-widerrufen-Button + zweistufiges Widerrufs-Modal im Hub
Gut sichtbare Schaltflaeche "Vertrag widerrufen" im Footer; das Modal
fuehrt zweistufig durch den Widerruf: Schritt 1 nur Zuordnungsdaten,
Schritt 2 Kontrollansicht mit Bestaetigungsbutton "Jetzt widerrufen".
Erfolgs-/Fehlerzustand oeffnet automatisch (getrennter Error-Bag,
kollidiert nicht mit dem Kontakt-Modal).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 10:03:37 +00:00
47d03ec777 Hub (Web): Auth-aware CTAs, Kontakt-Modal statt Mailto, Pruefung-Wording
- Angemeldete Nutzer sehen ueberall (Header, Hero, Kuendbar-Box, CTA,
  Footer) "Zum pressekonto" (rollengerecht via LoginRedirect::homeFor)
  statt Anmelden/Konto erstellen
- Keine E-Mail-Adresse mehr im Quelltext (Spam-Schutz): neues
  <x-web.hub.contact-modal> (Alpine, Honeypots, Erfolgs-/Fehlerzustand,
  auto-open nach Submit) am host-agnostischen kontakt.store-Endpunkt;
  Trigger in Enterprise-Streifen, FAQ-Support, DSGVO-Antwort, Footer
  und Utility-Bar
- "Redaktionelle Pruefung" -> "Pruefung" in allen Hub-Inhalten;
  "verifizierter Newsroom" -> "Ihr eigener Newsroom"

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 09:52:29 +00:00
8d4b3b5ca3 R2.2/R2.3 (Web): Hub-Landing live-faehig - datengetriebene Tarife, ehrliche Inhalte
- Tarif-Grid aus Plan::active() (Preise/Kontingente/Limits/Vorteile wie
  Buchungsseite + admin/payments/plans), Alpine-Toggle monatlich/jaehrlich
- Fake-Katalog (0/49/149 Euro, Standard/Enterprise-Featureliste mit
  SSO/SLA/ISO-Claims) ersetzt; Enterprise = ehrliche Anfrage-Zeile
- Fake-Kundenliste (Siemens/BASF/...) und erfundene Kennzahlen raus;
  Plattform-Zahlen jetzt echt aus HubPageData
- Alle href="#" beseitigt: Footer-Rechtslinks auf /de/*-Seiten,
  Kontakt als mailto, Status/Doku/Changelog-Eintraege entfernt
- Unhaltbare Claims entschaerft (14-Tage-Test, 4h-Pruefzeit, sekundengenau,
  anteilige Erstattung, ISO 27001, RSS/Badge/CSV-Features)
- FAQ datengetrieben (Einzel-PM-Preis, ab-Preis aus Katalog, API-Doku-Link)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 09:24:04 +00:00
9875e7b6e1 R2.1 (Web): Kontaktformular auf der Kontakt-Seite aktiviert
Ersetzt den TODO-Platzhalter: Name/E-Mail/Nachricht, Honeypots,
Erfolgs-Flash statt Formular nach Versand, Datenschutz-Hinweis.
Styling analog legal-request. Telefon/Adresse sind weiterhin
Platzhalterdaten (R3.2, [EXTERN]).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 08:14:52 +00:00
f6a8143a2c Preise-Seite: dynamische Tarif-Vorteile aus dem Plan anzeigen
Die oeffentliche Preise-Seite rendert jetzt die im Admin gepflegte
Vorteilsliste (plans.benefits) pro Tarif; faellt ohne gepflegte Vorteile
auf den statischen pricing.plans.included-Text zurueck. DB-Vorteile sind
admin-redaktionelle Texte und erscheinen auch unter /en in der erfassten
Sprache (Preis-/Struktur-Keys bleiben uebersetzt).

Hinweis: betrifft Web-Frontend (WIP des Users), daher separater Commit.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 16:37:01 +00:00
326ff9b2a0 Editorial-Frontend: oeffentliche Unterseiten, Preise & Linkpflege
Oeffentliche Strecke durchgaengig auf das Editorial-Design umgestellt und
datengetrieben gemacht:

- Newsrooms-Verzeichnis + Newsroom-Detailseiten (Suche, Pagination)
- Preise-Seite neu (Abos via Plan, Einzel-PM via config/billing, Add-ons via
  config/credits); Texte ausgelagert nach lang/{de,en}/pricing.php
- Pricing-Teaser-Komponente auf den Startseiten + Preise-Link in Header/Footer
- Statische Seiten im Editorial-Design ueber neue Komponente x-web.static-page:
  impressum, datenschutz, agb, cookies, faq (Akkordeon), hilfe, kontakt,
  ueber-uns, api (altes Theme/gradient-hero entfernt)
- Header/Footer-Linkpflege: tote #-Anker raus, FAQ/Hilfe/Cookies verlinkt,
  "Anmelden" fuehrt in den Hub
- Legacy-URL-Redirects (.html, presskit->newsroom, Regionen)
- Datums-Bugfix in Feed-Komponenten

Tests: NewsroomPage, PreisePage, PricingTeaser, StaticPages, NavigationLinks,
LegacyRedirect. Doku in docs/frontend aktualisiert.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-17 16:08:46 +00:00
3a1d2e6751 Frontend: Editorial-Relaunch der öffentlichen Strecke + Ausgaben-Routing
Öffentliche Seiten auf gemeinsames Editorial-Design (x-web.site-header/-footer,
Design-Tokens) und Ausgaben-Präfix /{edition}/ (de|en) umgestellt.

- Routing: neue Middleware SetEdition (Locale + URL::defaults), /{edition}-Gruppe
  in routes/web.php, Root-Redirect auf /de, 301 für Legacy-.html-URLs,
  Baseline-Default in AppServiceProvider.
- Neue URL-Schemata: /{edition}/press-release/{slug}, /{edition}/category/{slug}.
- Ausgabe = Sprache: DE/EN-Umschalter (Region/CH/AT entfernt); EditorialClock
  und Livewire-Komponenten sprachdynamisch.
- Detail-, Kategorie- und Veröffentlichen-Seite mit echten Daten neu aufgebaut.
- Suche aktiviert: Volt-Komponente livewire/web/search (Titel/Text/Keywords +
  Firma + Rubrik, Filter, Sortierung, Pagination, URL-Parameter q/category/sort).
- Rubriken-Navigation statt Übersichtsseite: Helper CategoryNavigation;
  web/kategorien.blade.php + Route entfernt (Legacy-301).
- Tests: Edition-Routing, Kategorie-Seite/-Navigation, Detail, Veröffentlichen,
  Suche, EditorialClock. Doku in "Echte öffentliche Unterseiten.md" aktualisiert.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-16 16:39:28 +00:00
9bce9afe0b WS-3: Recht & Compliance – Rechts-Kern (DSGVO/Persönlichkeitsrecht/Melden + Queue)
Launch-pflichtiger Compliance-Slice: öffentliche Anfrage zu einer PM speist eine
manuelle Admin-Queue (keine KI).

- Migration legal_requests + Model + Enums (Type: dsgvo/personal_rights/report,
  Status: open/in_progress/resolved/rejected) + Factory.
- Öffentliches Formular /release/{slug}/rechtliches (LegalRequestController +
  web/legal-request.blade.php): typ-abhängiger Hinweistext (Alpine), E-Mail bei
  DSGVO/Persönlichkeitsrecht erforderlich, zwei versteckte Honeypot-Felder,
  Rate-Limit + Bremse "1 offene Anfrage pro PM/Typ". Regeltexte als Entwurf mit
  TODO für rechtliche Finalisierung markiert.
- Routen bewusst in eigener routes/legal.php (entkoppelt vom laufenden Web-Umbau),
  host-agnostisch via domains.php eingebunden.
- Admin-Bereich "Recht & Compliance": Sidebar-Nav mit Offen-Zähler, Volt-Queue
  index/show (in Bearbeitung/erledigt/abgelehnt/wieder öffnen + interne Notiz).
- Tests: je Typ, Honeypots (Dataset), Bremse, Admin-Queue + Status-Übergänge.
- Doku: Detailplan WS-3-Status + Deployment-Migrationsreihenfolge ergänzt.

Hinweis: Der "Melden"-/E&F-Button auf der PM-Detailseite (release-detail.blade.php)
wird mit dem separaten Web-Frontend-Commit verdrahtet; Ziel ist legal-request.create.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 14:20:05 +00:00
e54f6e2552 WS-1: Canonical- & OpenGraph-Meta zentral im Web-Layout
Ergänzt web-master.blade.php um <link rel="canonical">, OpenGraph- und
Twitter-Card-Tags. Self-Canonical-Default wird portal-getrennt aus der
Portal-URL ($domainUrl) + Request-Pfad gebaut – bewusst nicht aus
url()->current(), da URL::forceRootUrl sonst alle Portale fälschlich auf
pressekonto.test kanonisieren würde. Seiten können canonical/meta_description/
og_type/og_image per @section überschreiben; release-detail als article
ausgezeichnet. Erfüllt die Canonical-Hygiene aus dem Duplicate-Content-Update §5.

Tests: tests/Feature/Web/CanonicalMetaTest.php (inkl. Cross-Portal-Negativtest).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-15 10:03:15 +00:00
fd1f6bd401 22-05-2026 Optimierung der User und Admin Panels 2026-05-22 11:18:59 +02:00
36810ac81b 19-05-2026 Rebrand Pressekonto, Hub-Flux UI und Legacy-Media-Migration
Umbenennung presseportale → pressekonto in Domains, Themes und Dokumentation.
Design-Tokens, Portal-Shell, Customer-Dashboard, Auth- und Admin-PM-Views.
Artisan-Befehl migrate:legacy-media mit Tests und Hub-Flux-Entwicklungsdocs.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-19 16:36:13 +00:00
8bfa378028 13-05-2026 Frontend DEV + HUB 2026-05-13 18:11:03 +02:00
313270b55f 12-05-2026 Frontend dev 2026-05-12 18:32:33 +02:00
405df0a122 first commit
Some checks failed
linter / quality (push) Has been cancelled
tests / ci (push) Has been cancelled
2025-10-20 17:53:02 +02:00