presseportale/dev/archive/frontend-audits/frontend-optimize-protokoll.md
Kevin Adametz 6a4c4d8837 docs: dev-Doku für den Live-Betrieb neu sortiert — Archiv + Betrieb + Roadmap
Das System ist seit 20.07.2026 live; die dev-Doku spiegelt jetzt den
Betriebszustand statt der Release-Vorbereitung:

- dev/betrieb/: Deploy-Runbook (neu: §10 Betrieb nach Go-Live mit
  SFTP-Deploy-Checkliste inkl. queue:restart-Pflicht und den
  Betriebs-Erkenntnissen der Go-Live-Woche), Legacy-API-Parität, Umami.
- dev/roadmap.md: offene Nachlauf-Punkte (Go-Live-Mails, Merge nach main,
  Stripe-Test-Artefakte, Key-Rotation, Alt-System-Abschaltung) und
  Ideen-Backlog.
- dev/archive/: abgeschlossene Phasen — Migration-2026-Planung,
  Cutover-Runbook (mit Erledigt-Vermerk), Release-Plan/QA-Checkliste,
  Optimierungsphasen, Frontend-Konzepte + Responsive-Audits vom 16.07.,
  Altsystem-Reste.
- dev/README.md als Wegweiser; gitignore-Pfad der SQL-Dumps mitgezogen
  (dev/archive/migration-2026/sql/ bleibt untracked, ebenso dev/migration/
  und dev/api/).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-21 07:52:38 +00:00

14 KiB
Raw Permalink Blame History

Protokoll & Bestandsaufnahme: Frontend Responsive / Mobile (Re-Audit)

Erstellt: 16.07.2026 (dritte Session) Status: Audit + P1-Fixes umgesetzt (16.07.2026) Viewports: 320×568 (iPhone SE) und 390×844 (iPhone 14/15), mobile: true Scope: Öffentliches Web-Frontend (presseecho, businessportal24, pressekonto-Hub) Nicht im Scope: Admin/Portal (Flux), Auth, Customer-Bereich Grundlage: Code-Review (aktueller Stand) + Live-CDP-Messung im Browser


Zweck dieses Dokuments

Frische Bestandsaufnahme nach den bereits umgesetzten Fixes aus dev/frontend-optimize-grok.md. Dieses Protokoll

  1. verifiziert, welche früheren P0/P1-Befunde jetzt tatsächlich behoben sind (Code + Live),
  2. listet die noch offenen Punkte (v. a. aus dev/frontend-optimize-56.md), und
  3. dokumentiert einen neuen, bisher nicht erfassten Fehler bei 320px.

Es wurde bewusst noch kein Code geändert.


Kurzfazit

Die schweren strukturellen P0-Bugs aus den beiden Vor-Audits sind im aktuellen Code behoben und live bestätigt (bei 390px kein Seiten-Overflow mehr, Hero-Hierarchie intakt, Hub mit Mobile-Nav/Burger, Footer stackt, Architektur-Diagramm gestapelt).

Offen bleiben:

Priorität Thema Betrifft Quelle
P1 Sticky-Header funktional wirkungslos – Script schaltet Klassen header-normal/header-sticky um, für die keine CSS-Regeln existieren Portal-Seiten (presseecho, businessportal24) 56.md P1-04, hier live bestätigt
P1 (neu) Header-Button-Gruppe bricht bei 320px aus → horizontaler Seiten-Scroll auf sehr kleinen Phones Portal-Home (+38px) & Hub (+62px) Neu in diesem Audit
P2 Industry-Index: grid-cols-2 + px-5 ab Mobile (gequetscht) Portal-Homes 56.md P2-01
P2 Touch-Targets in Portal-Topbar unter 44×44 (DE/EN, „Preise") Portale 56.md P2-03
P2 Stat-Strips grid-cols-2 mit großen Zahlen, Labels wrappen Kategorie/Newsroom/Veröffentlichen 56.md P2-02
P2 FAQ-Antworten pl-[60px], Credit-Pakete 2-spaltig, kleine Pagination/Modal-Close-Buttons, FAQ/API fehlen in mobiler Portal-Nav Veröffentlichen/Preise/diverse 56.md P2-07
P3 API-Tabellen overflow-x-auto (bewusst, kein Seiten-Overflow) API-Seite 56.md P2-05

Methode

  1. Code-Review der High-Leverage-Blades unter resources/views/web/** und resources/views/components/web/**.
  2. Live-Check im Browser mit CDP-Emulation (Emulation.setDeviceMetricsOverride) bei 320px und 390px; Messung von document.documentElement.scrollWidth, Element-Bounding-Boxes und getComputedStyle.
  3. Overflow-Isolation: Elemente mit right > clientWidth gefiltert und um solche bereinigt, die einen klippenden Vorfahren (overflow-x: hidden/clip/auto/scroll) haben, sowie um die lokale Laravel-Debugbar.

Hinweis Debugbar: Lokal sichtbar, wurde bei allen Messungen ausgeschlossen (kein Produktionsproblem).


Teil A — Verifiziert behoben (aus grok.md)

Befund Datei(en) Beleg (Code + Live)
P0-01 Focus-Hero-Overlay überdeckt „Im Fokus" components/web/focus-hero.blade.php Overlay jetzt im Flow: min-h-[320px] sm:min-h-[420px] lg:min-h-[500px] flex flex-col justify-end, Type text-[24px] sm:text-[32px] lg:text-[38px]. Live 390px: h1Top=407 > imFokusBottom=250 → Hierarchie intakt.
P0-03 Quality-Summary erzeugt H-Scroll components/web/quality-summary.blade.php Grid jetzt grid-cols-1 sm:grid-cols-[auto_minmax(0,1fr)_auto], Link sm:whitespace-nowrap, Padding px-4 sm:px-6 lg:px-8. Live 390px Portal-Home: scrollWidth = 390 (kein Overflow).
P0-02 Kategorie-/Newsroom-Hero gleicher Overlay-Overflow web/kategorie.blade.php, web/newsroom.blade.php Beide Heroes jetzt min-h-[…] flex flex-col justify-end statt fester Höhe / Aspect-Ratio.
P0-04 Hub-Utility-Bar + Header sprengen Viewport components/web/hub/top-utility-bar.blade.php, hub/site-header.blade.php Utility-Bar flex-wrap, kurzes Datum (sm:hidden), Mobile-Burger + Panel (x-data menuOpen). Live 390px Hub: scrollWidth = 390.
P1-01 Hub-Footer 4 Spalten auf Mobile components/web/hub/site-footer.blade.php Jetzt grid-cols-1 sm:grid-cols-2 lg:grid-cols-[1.5fr_1fr_1fr_1fr].
P1-02 Hub-Architektur-Diagramm überlappt web/pressekonto.blade.php Mobile-Variante gestapelt (lg:hidden flex flex-col), absolut positioniertes Diagramm nur noch hidden lg:block.
P1-03 Hartes px-8 auf Homepages focus-hero, quality-summary, industry-index u. a. Umgestellt auf px-4 sm:px-6 lg:px-8.

Teil B — Noch offene Befunde

P1-04 — Sticky-Header ist funktional wirkungslos (live bestätigt)

Schwere: Hoch Wo:

  • resources/views/web/layouts/web-master.blade.php (Inline-Script ~76–115)
  • resources/views/components/web/site-header.blade.php (id="topbar" Z. 54, id="header" class="header-normal …" Z. 101)

Problem: Beim Scrollen tauscht das Script header-normal ↔ header-sticky. Für diese beiden Klassen existieren keine CSS-Regeln – bestätigt per Repo-Suche: Treffer nur in Blade/JS sowie in dev/_old/-Altbuilds, nicht in den aktiven Web-CSS-Quellen/Builds.

Live-Messung (390px, businessportal24, nach scrollTo(0, 700)):

  • header.className = "header-normal …" (Klasse wechselt nicht wirksam)
  • getComputedStyle(header).position = "static"
  • Header-top = -665 → Header komplett aus dem Viewport gescrollt, nicht sichtbar

Auswirkung: Auf langen Mobilseiten verschwinden Suche, Anmelden und der Veröffentlichungs-CTA beim Scrollen. Der gewünschte Sticky-Effekt tritt nie ein.

Fix-Richtung (später): Entweder CSS für .header-sticky (position: sticky/fixed, Top-Offset, Schatten, Platzhalterhöhe) ergänzen, oder das Script entfernen und stattdessen position: sticky; top: 0 direkt am Header-Container setzen.


P1-05 (NEU) — Header-Button-Gruppe bricht bei 320px aus → H-Scroll

Schwere: Hoch (nur ≤ 320px; bei 390px sauber) Status: In den Vor-Audits nicht erfasst (dort wurde vor dem Fix 635/457px gemessen).

Live-Messung 320px:

Seite scrollWidth Overflow Verursacher (kein klippender Vorfahre)
Portal-Home (businessportal24) 358 +38px Header-rechts-Cluster flex items-center gap-1 sm:gap-2 flex-shrink-0 (right=358), darin PM-Button
Hub (pressekonto) 382 +62px Header-rechts-Cluster flex items-center gap-1.5 sm:gap-2 flex-shrink-0 (right=383), „Registrieren"-Button + Burger

Ursache:

  • Portal (components/web/site-header.blade.php ~144–182): Logo + Such-Icon (40px) + „Anmelden" + PM-Button liegen alle in einer nicht umbrechenden Zeile; flex-shrink-0 verhindert Schrumpfen. Bei 320px reicht die Breite nicht.
  • Hub (components/web/hub/site-header.blade.php ~48–91): Logo + „Anmelden" + „Registrieren" + 40px-Burger. Der zusätzliche „Registrieren"-Button (sm:hidden) neben Burger und „Anmelden" ist bei 320px zu breit.

Fix-Richtung (später): Bei ≤ 320px Buttons weiter verkürzen (Icon-only bzw. „Registrieren" in den Burger verlagern), engere Gaps, min-w-0/kürzere Labels; Ziel scrollWidth <= clientWidth auch bei 320px.


P2-01 — Industry-Index: 2 Spalten + px-5 ab Mobile

Schwere: Mittel Wo: components/web/industry-index.blade.php (grid-cols-2 md:grid-cols-4, Kacheln px-5) Lange Branchennamen + Delta in einer Zeile wirken bei 320/390px gequetscht. Kein Seiten-Overflow.

P2-02 — Stat-Strips / Sidebar-Grids (Dichte)

Schwere: Mittel Kategorie/Newsroom Stat-Strips grid-cols-2 mit text-[32px]-Zahlen → Labels wrappen unschön. focus-side-item als 3-Spalten-Grid in gestapelter Sidebar funktional ok, aber dicht. Release-Detail-Hero aspect-ratio: 21/9 → mobil sehr flach (~153px Bildhöhe).

P2-03 — Touch-Targets Portal-Topbar

Schwere: Mittel DE/EN-Umschalter und „Preise"-Link in der Topbar bleiben unter der 44×44-Empfehlung. Suche/Anmelden mit ~40×40 grenzwertig; die große Rubrik-Zeile (Burger) erreicht ~358×44.

P2-04 — Brand-Kontextbanner (Hub, ?from=…)

Schwere: Niedrig – weitgehend entschärft components/web/hub/brand-context-banner.blade.php hat jetzt flex-wrap. Live 320px (?from=businessportal24): „Zurück zu"-Link right = 304 (< 320) → kein Overflow. Der flex-1-Spacer ohne min-w-0 am Text ist ein kleines Restrisiko bei extrem langen Marken – niedrig.

P2-05 — API-Seite Tabellen (bewusst)

overflow-x-auto + whitespace-nowrap → Scrollen innerhalb der Tabelle, nicht der Seite. Kein Handlungsbedarf.

P2-06 — Weitere Dichte-/Touch-Themen (aus 56.md P2-07)

  • FAQ-Antworten „Veröffentlichen" mit pl-[60px] verschenken auf 320px Textbreite.
  • Credit-Pakete auf „Preise" starten bereits mobil zweispaltig.
  • Pagination und mehrere Modal-Close-Buttons ~32–36px (< 44×44).
  • FAQ/API sind in der mobilen Portal-Kopf-Navigation nicht direkt erreichbar (nur hidden lg:inline in der Topbar bzw. über den Footer). Der Mobile-Burger listet nur Rubriken.

Live-Messmatrix (dieses Audit)

Seite Viewport scrollWidth clientWidth Overflow Bewertung
Portal-Home (businessportal24) 390 390 390 0 ok
Portal-Home (businessportal24) 320 358 320 +38 Header-Cluster (P1-05)
Hub (pressekonto, ?from=…) 390 390 390 0 ok
Hub (pressekonto, ?from=…) 320 382 320 +62 Header-Cluster (P1-05)
Sticky-Header (Portal, Scroll 700) 390 – – – position: static, scrollt weg (P1-04)

Empfohlene Bearbeitungsreihenfolge (noch nicht umsetzen)

  1. P1-04 – Sticky-Header: CSS herstellen oder auf position: sticky am Container umstellen.
  2. P1-05 (neu) – Header-Button-Cluster bei ≤ 320px entschärfen (Portal + Hub).
  3. P2 – Industry-Index-Dichte, Stat-Strips, Touch-Targets, FAQ-Padding, Credit-Pakete, mobile Nav-Erreichbarkeit von FAQ/API.

Akzeptanzkriterium je Fix: document.documentElement.scrollWidth <= clientWidth bei 320/390/430px, plus visuelle Prüfung Portal-Home + Hub + eine Kategorie + eine PM-Detailseite.


Dateien mit höchster Hebelwirkung (offen)

  1. resources/views/web/layouts/web-master.blade.php + Web-CSS (Sticky-Header, P1-04)
  2. resources/views/components/web/site-header.blade.php (Portal-Header 320px, P1-05)
  3. resources/views/components/web/hub/site-header.blade.php (Hub-Header 320px, P1-05)
  4. resources/views/components/web/industry-index.blade.php (P2-01)
  5. Preise-/Veröffentlichen-Views (P2-06: Credit-Pakete, FAQ-Padding)

Umsetzung (16.07.2026)

Die beiden P1-Punkte sind umgesetzt und live (320/390px) verifiziert.

Check Vorher Nachher
Sticky-Header Portal (nach Scroll) position: static, scrollt weg position: fixed; top:0; z-index:50, sichtbar; Platzhalter verhindert Sprung; setzt oben sauber zurück
Portal-Home scrollWidth @320px 358 (+38) 320 (0)
Hub scrollWidth @320px 382 (+62) 320 (0)
presseecho-Home scrollWidth @320/390 – 320 / 390 (0)
Hub/Portal scrollWidth @390px 390 390 (unverändert ok)

Geänderte Dateien:

  • resources/css/web/shared-styles.css — CSS-Regeln für .header-sticky ergänzt (P1-04).
  • resources/views/web/layouts/web-master.blade.php — Sticky-Script mit Platzhalter (kein Layout-Sprung) (P1-04).
  • resources/views/components/web/site-header.blade.php — Portal-Header bei ≤320px verschlankt (Padding/Gap/Logo/CTA) (P1-05).
  • resources/views/components/web/hub/site-header.blade.php — Hub-Header verschlankt; „Anmelden" auf Mobile ins Burger-Panel verlagert (P1-05).
  • resources/views/web/pressekonto.blade.php — Hub-Hero-H1 Basisgröße text-[34px] (Wortmarke „businessportal24" passte bei 320px nicht) (P1-05).

Tests: PresseechoHomeTest, Businessportal24HomeTest, PressekontoHubHomeTest, HubStaticPageShellTest — 32 passed. Pint sauber.

Hinweis: Web-Assets wurden neu gebaut (npm run build:web). Sail/Docker war nicht aktiv; Build lief direkt über npm.

Umsetzung P2 (16.07.2026)

Punkt Änderung Datei
P2 Nav FAQ, API und Preise ins Mobile-Burger-Menü aufgenommen (vorher mobil nur im Footer) components/web/site-header.blade.php
P2-03 Edition-Tabs (DE/EN) in der Topbar: py-2 → py-2.5, px-1.5 → px-2 (größere Tap-Fläche) components/web/site-header.blade.php
P2-01 Industry-Index: px-5 → px-4 sm:px-5, py-[18px] → py-4 sm:py-[18px], Branchenname text-[13px] sm:text-[14px] components/web/industry-index.blade.php
P2-07 „Veröffentlichen"-FAQ-Antwort: pl-[60px] → pl-0 sm:pl-[60px] (volle Textbreite auf Mobile) web/veroeffentlichen.blade.php
P2 (neu) Preise „Einzel-PM"-Block: gap-6 → flex-wrap gap-4 (behebt 11px-Overflow bei 320px) web/preise.blade.php

Live-Verifikation @320px: Preise scrollWidth 331 → 320; Veröffentlichen ohne echten Layout-Overflow (verbleibende 6px = Debugbar); Mobile-Burger enthält jetzt Preise/FAQ/API.

Tests: 105 passed (u. a. Home-, Hub-, Preise-, Publish-Suites). Pint sauber. Web-Assets neu gebaut.

Bewusst belassen: Credit-Pakete (grid-cols-2) — kompakte Kacheln, bei 320px kein Overflow. Pagination-Buttons (~36px) als optionaler Feinschliff offen.


Ende des Protokolls. P1 + P2 umgesetzt und verifiziert.