Spoke-Frontend-Audit: Fake-Inhalte raus, Newsletter-Rueckbau, echte Boersendaten, EN-Lokalisierung
Frontend-Umbau (Kevin, 06.07.2026), Ergebnis des businessportal24-Audits: - Fake-Anzeigen und Mock-/Fallback-Daten entfernt (focus-ad, feed-ad, highlight-card, press-release-card, featured-releases, press-releases-grid); Sektionen rendern nur noch mit echten Daten oder gar nicht - Newsletter-Strip und Newsletter-Box zurueckgebaut (Feature nachgelagert, vor Reaktivierung DOI-Flow noetig) - Echte Boersendaten: MarketDataService (Yahoo-Finance-Quotes, config/market.php, Cache) + market:refresh alle 15 Min. im Scheduler; live-ticker blendet sich ohne Daten aus - EN-Lokalisierung der Kern-Seiten via lang/de/web.php + lang/en/web.php; Carbon-Locale folgt app()->getLocale() - Web-Tests auf den neuen Frontend-Stand nachgezogen (Suite: 993 gruen) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
3320aaaa85
commit
bfad13af7d
67 changed files with 1735 additions and 1521 deletions
|
|
@ -13,8 +13,8 @@
|
|||
$fmt = fn ($value) => number_format((int) $value, 0, ',', '.');
|
||||
@endphp
|
||||
|
||||
@section('title', 'Newsrooms – '.$brandName.$brandAccent)
|
||||
@section('meta_description', 'Alle aktiven Unternehmens-Newsrooms im Überblick – redaktionell geprüfte Pressemitteilungen je Unternehmen, gebündelt und dauerhaft auffindbar im DACH-Raum.')
|
||||
@section('title', __('web.newsrooms_page.meta_title', ['brand' => $brandName.$brandAccent]))
|
||||
@section('meta_description', __('web.newsrooms_page.meta_description'))
|
||||
|
||||
@section('hreflang')
|
||||
<link rel="alternate" hreflang="de" href="{{ url('/de/newsrooms') }}">
|
||||
|
|
@ -38,31 +38,31 @@
|
|||
{{-- Masthead --}}
|
||||
<section class="max-w-layout mx-auto px-4 sm:px-6 lg:px-8 pt-8 lg:pt-10">
|
||||
<div class="max-w-[680px]">
|
||||
<div class="eyebrow mb-3">Unternehmens-Newsrooms</div>
|
||||
<div class="eyebrow mb-3">{{ __('web.newsrooms_page.eyebrow') }}</div>
|
||||
<h1 class="font-serif text-[36px] sm:text-[46px] lg:text-[50px] font-semibold m-0 mb-4 leading-[1.05] tracking-[-1px] text-ink text-balance">
|
||||
Newsrooms
|
||||
</h1>
|
||||
<p class="font-serif text-[16px] leading-[1.55] m-0 text-ink-2">
|
||||
Alle aktiven Unternehmen mit ihren redaktionell geprüften Pressemitteilungen – gebündelt an einem Ort.
|
||||
{{ __('web.newsrooms_page.intro') }}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
{{-- Stat strip --}}
|
||||
<div class="grid grid-cols-2 lg:grid-cols-3 border-y border-bg-rule mt-8">
|
||||
<div class="px-6 py-5 border-r border-bg-rule">
|
||||
<div class="eyebrow muted text-[10px] mb-2.5">Aktive Newsrooms</div>
|
||||
<div class="eyebrow muted text-[10px] mb-2.5">{{ __('web.newsrooms.title') }}</div>
|
||||
<div class="font-serif text-[32px] sm:text-[36px] font-semibold leading-none tracking-[-0.6px] text-ink">{{ $fmt($totalNewsrooms) }}</div>
|
||||
<div class="text-[11.5px] text-ink-3 mt-2">mit veröffentlichten Meldungen</div>
|
||||
<div class="text-[11.5px] text-ink-3 mt-2">{{ __('web.newsrooms_page.stat_total_sub') }}</div>
|
||||
</div>
|
||||
<div class="px-6 py-5 lg:border-r border-bg-rule">
|
||||
<div class="eyebrow muted text-[10px] mb-2.5">Aktiv (30 Tage)</div>
|
||||
<div class="eyebrow muted text-[10px] mb-2.5">{{ __('web.newsrooms_page.stat_active') }}</div>
|
||||
<div class="font-serif text-[32px] sm:text-[36px] font-semibold leading-none tracking-[-0.6px] text-ink">{{ $fmt($activeNewsroomsCount) }}</div>
|
||||
<div class="text-[11.5px] text-ink-3 mt-2">Stand {{ $referenceNow->translatedFormat('j. M Y') }}</div>
|
||||
<div class="text-[11.5px] text-ink-3 mt-2">{{ __('web.spotlight.stat_window_sub', ['date' => $referenceNow->translatedFormat('j. M Y')]) }}</div>
|
||||
</div>
|
||||
<div class="px-6 py-5 border-t lg:border-t-0">
|
||||
<div class="eyebrow muted text-[10px] mb-2.5">Meldungen im Archiv</div>
|
||||
<div class="eyebrow muted text-[10px] mb-2.5">{{ __('web.newsrooms_page.stat_archive') }}</div>
|
||||
<div class="font-serif text-[32px] sm:text-[36px] font-semibold leading-none tracking-[-0.6px] text-ink">{{ $fmt($archiveTotal) }}</div>
|
||||
<div class="text-[11.5px] text-ink-3 mt-2">redaktionell geprüft</div>
|
||||
<div class="text-[11.5px] text-ink-3 mt-2">{{ __('web.newsrooms_page.stat_archive_sub') }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
|
@ -70,18 +70,18 @@
|
|||
{{-- Suche + Verzeichnis --}}
|
||||
<section class="max-w-layout mx-auto px-4 sm:px-6 lg:px-8 mt-8 mb-16">
|
||||
<form action="{{ route('newsrooms') }}" method="get" class="mb-7 max-w-[520px]">
|
||||
<label class="sr-only" for="newsroom-search">Newsroom suchen</label>
|
||||
<label class="sr-only" for="newsroom-search">{{ __('web.newsrooms_page.search_label') }}</label>
|
||||
<div class="flex items-center gap-3 px-4 py-3 border border-bg-rule-strong bg-bg-elev focus-within:border-brand transition-colors">
|
||||
<svg width="18" height="18" viewBox="0 0 16 16" fill="none" class="flex-shrink-0 text-ink-3" aria-hidden="true">
|
||||
<circle cx="7" cy="7" r="5" stroke="currentColor" stroke-width="1.5" />
|
||||
<path d="M11 11l3 3" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" />
|
||||
</svg>
|
||||
<input id="newsroom-search" type="search" name="q" value="{{ $term }}"
|
||||
placeholder="Unternehmen suchen…"
|
||||
placeholder="{{ __('web.newsrooms_page.search_placeholder') }}"
|
||||
autocomplete="off"
|
||||
class="flex-1 bg-transparent border-0 p-0 text-[14px] text-ink placeholder:text-ink-3 focus:outline-none focus:ring-0 min-w-0">
|
||||
<button type="submit" class="flex-shrink-0 px-3.5 py-1.5 text-[12.5px] font-semibold bg-brand text-white rounded-[2px] hover:bg-brand-deep transition-colors">
|
||||
Suchen
|
||||
{{ __('web.header.search_submit') }}
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
|
|
@ -91,11 +91,11 @@
|
|||
{{ $fmt($newsrooms->total()) }}
|
||||
{{ $newsrooms->total() === 1 ? 'Newsroom' : 'Newsrooms' }}
|
||||
@if ($term !== '')
|
||||
<span class="text-ink-3 font-normal">für „{{ $term }}"</span>
|
||||
<span class="text-ink-3 font-normal">{{ __('web.search.for_term', ['term' => $term]) }}</span>
|
||||
@endif
|
||||
</h2>
|
||||
@if ($term !== '')
|
||||
<a href="{{ route('newsrooms') }}" class="text-[12.5px] text-brand font-semibold hover:text-brand-deep transition-colors">Filter zurücksetzen</a>
|
||||
<a href="{{ route('newsrooms') }}" class="text-[12.5px] text-brand font-semibold hover:text-brand-deep transition-colors">{{ __('web.newsrooms_page.reset_filter') }}</a>
|
||||
@endif
|
||||
</header>
|
||||
<hr class="rule-strong mb-6">
|
||||
|
|
@ -123,18 +123,18 @@
|
|||
<div class="min-w-0 flex-1">
|
||||
<h3 class="font-serif text-[16px] font-semibold leading-[1.25] text-ink group-hover:text-brand transition-colors truncate">{{ $company->name }}</h3>
|
||||
@if ($latest)
|
||||
<div class="text-[11px] text-ink-3 mt-1">Letzte Meldung {{ $latest->translatedFormat('j. M Y') }}</div>
|
||||
<div class="text-[11px] text-ink-3 mt-1">{{ __('web.newsrooms_page.latest_release', ['date' => $latest->translatedFormat('j. M Y')]) }}</div>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
<div class="mt-auto flex items-center justify-between pt-3 border-t border-bg-rule">
|
||||
<span class="text-[12px] text-ink-2">
|
||||
<span class="font-mono font-semibold text-ink">{{ $fmt($company->releases_count ?? 0) }}</span> Meldungen
|
||||
<span class="font-mono font-semibold text-ink">{{ $fmt($company->releases_count ?? 0) }}</span> {{ __('web.industry_index.releases') }}
|
||||
</span>
|
||||
@if ($isRecentlyActive)
|
||||
<span class="inline-flex items-center gap-1.5 text-[10.5px] font-semibold text-ink-2 px-2 py-0.5 bg-brand/[0.06] border border-brand/20 rounded-[2px]">
|
||||
<span class="w-1.5 h-1.5 rounded-full bg-brand"></span>
|
||||
{{ $fmt($company->recent_count) }} / 30 Tage
|
||||
{{ $fmt($company->recent_count) }} / {{ __('web.newsrooms_page.days_30') }}
|
||||
</span>
|
||||
@endif
|
||||
</div>
|
||||
|
|
@ -145,17 +145,17 @@
|
|||
<x-web.pagination :paginator="$newsrooms" />
|
||||
@else
|
||||
<div class="border border-bg-rule bg-bg-elev px-6 py-12 text-center">
|
||||
<h3 class="font-serif text-[20px] font-semibold text-ink m-0 mb-2">Keine Newsrooms gefunden</h3>
|
||||
<h3 class="font-serif text-[20px] font-semibold text-ink m-0 mb-2">{{ __('web.newsrooms_page.none_found') }}</h3>
|
||||
<p class="text-[13px] text-ink-3 m-0 mb-5 max-w-md mx-auto">
|
||||
@if ($term !== '')
|
||||
Für „{{ $term }}" gibt es derzeit keinen passenden Newsroom. Versuchen Sie einen anderen Suchbegriff.
|
||||
{{ __('web.newsrooms_page.none_found_term', ['term' => $term]) }}
|
||||
@else
|
||||
Aktuell sind keine aktiven Newsrooms verfügbar.
|
||||
{{ __('web.newsrooms_page.none_available') }}
|
||||
@endif
|
||||
</p>
|
||||
@if ($term !== '')
|
||||
<a href="{{ route('newsrooms') }}" class="inline-flex items-center gap-2 px-4 py-2.5 text-[13px] font-semibold border border-bg-rule-strong bg-white text-ink hover:bg-bg-elev transition-colors">
|
||||
Alle Newsrooms anzeigen
|
||||
{{ __('web.newsrooms.all') }}
|
||||
</a>
|
||||
@endif
|
||||
</div>
|
||||
|
|
@ -167,13 +167,13 @@
|
|||
<div class="bg-topbar-grad text-ink-on-dark p-6 sm:p-9">
|
||||
<div class="grid gap-9 lg:grid-cols-[1.4fr_1fr] lg:items-center">
|
||||
<div>
|
||||
<div class="eyebrow on-dark mb-2.5">Eigener Newsroom</div>
|
||||
<h3 class="font-serif text-[24px] sm:text-[28px] font-semibold m-0 mb-2.5 leading-[1.15] text-white tracking-[-0.3px]">Bündeln Sie Ihre Pressemitteilungen im eigenen Newsroom.</h3>
|
||||
<p class="text-[14px] leading-[1.55] m-0 max-w-[540px] text-white/80">Eigene Marken-URL · alle Meldungen zentral · SEO-Vorteil für Ihr Unternehmen · redaktionell geprüft.</p>
|
||||
<div class="eyebrow on-dark mb-2.5">{{ __('web.newsrooms_page.cta_eyebrow') }}</div>
|
||||
<h3 class="font-serif text-[24px] sm:text-[28px] font-semibold m-0 mb-2.5 leading-[1.15] text-white tracking-[-0.3px]">{{ __('web.newsrooms_page.cta_title') }}</h3>
|
||||
<p class="text-[14px] leading-[1.55] m-0 max-w-[540px] text-white/80">{{ __('web.newsrooms_page.cta_text') }}</p>
|
||||
</div>
|
||||
<div class="flex flex-col gap-2.5">
|
||||
<a href="{{ route('veroeffentlichen') }}" class="w-full inline-flex items-center justify-center px-[18px] py-3.5 text-[14px] font-semibold bg-brand text-white hover:bg-brand-deep transition-colors">Pressemitteilung einreichen →</a>
|
||||
<a href="{{ route('preise') }}" class="w-full inline-flex items-center justify-center px-[18px] py-3 text-[14px] font-semibold text-white border border-white/30 hover:bg-white/10 transition-colors">Tarife & Pakete ansehen</a>
|
||||
<a href="{{ route('veroeffentlichen') }}" class="w-full inline-flex items-center justify-center px-[18px] py-3.5 text-[14px] font-semibold bg-brand text-white hover:bg-brand-deep transition-colors">{{ __('web.category.cta_submit') }} →</a>
|
||||
<a href="{{ route('preise') }}" class="w-full inline-flex items-center justify-center px-[18px] py-3 text-[14px] font-semibold text-white border border-white/30 hover:bg-white/10 transition-colors">{{ __('web.publisher_cta.pricing') }}</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue