admin: Newsletter mit Abmelde-Liste, Follow-up-Filtern und gedrosseltem Versand
- Unterseite /admin/newsletter/abmeldungen listet Newsletter-Opt-outs mit Zeitpunkt, Suche und Link zur User-Detailseite - Kampagnen-Filter: Empfänger einer früheren Kampagne ausschließen (Abgleich per User-ID und E-Mail-Snapshot) für Follow-up-Mailings - Login-Filter kann Monats-Scheiben (von–bis) abgrenzen, um große Listen Monat für Monat abzuarbeiten - Versand läuft in Wellen (Standard 50 Mails / 15 Min, per .env justierbar) gegen SMTP-Limits und Blocklisten; Hinweis im Senden-Modal - web: Firmen-Website im Newsroom & Co. als absolute URL verlinkt (Company::websiteUrl), statt relativ auf /newsroom/www.example.de - kunde: API-Doku-Button öffnet die /de/api-Seite; OpenAPI-Spezifikation als eigener, benannter Download (pressekonto-api-v1.yml) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
45dc4ce66c
commit
021ee2d23c
19 changed files with 499 additions and 20 deletions
|
|
@ -40,7 +40,7 @@
|
|||
'@type' => 'Organization',
|
||||
'name' => $company->name,
|
||||
'url' => $newsroomUrl,
|
||||
...(filled($company->website) ? ['sameAs' => [$company->website]] : []),
|
||||
...($company->websiteUrl() ? ['sameAs' => [$company->websiteUrl()]] : []),
|
||||
...($logoUrl ? ['logo' => $logoUrl] : []),
|
||||
...($boilerplate ? ['description' => Str::limit($boilerplate, 300)] : []),
|
||||
];
|
||||
|
|
@ -99,7 +99,7 @@
|
|||
<h1 class="font-serif text-[28px] sm:text-[38px] lg:text-[42px] font-semibold m-0 leading-[1.05] tracking-[-1px] text-ink">{{ $company->name }}</h1>
|
||||
<div class="mt-3 text-[12px] text-ink-3 flex items-center gap-2.5 flex-wrap">
|
||||
@if ($websiteHost)
|
||||
<a href="{{ $company->website }}" target="_blank" rel="nofollow noopener" class="inline-flex items-center gap-1.5 font-medium hover:text-ink transition-colors">
|
||||
<a href="{{ $company->websiteUrl() }}" target="_blank" rel="nofollow noopener" class="inline-flex items-center gap-1.5 font-medium hover:text-ink transition-colors">
|
||||
<svg width="12" height="12" viewBox="0 0 12 12" fill="none" aria-hidden="true"><circle cx="6" cy="6" r="5" stroke="currentColor" stroke-width="1"/><path d="M1 6h10M6 1c2 1.5 2 8.5 0 10M6 1c-2 1.5-2 8.5 0 10" stroke="currentColor" stroke-width="1"/></svg>
|
||||
{{ $websiteHost }}
|
||||
</a>
|
||||
|
|
|
|||
|
|
@ -485,7 +485,7 @@
|
|||
@if ($company?->website)
|
||||
<span class="flex items-center gap-2">
|
||||
<svg width="14" height="14" viewBox="0 0 14 14" class="text-ink-3 flex-shrink-0" aria-hidden="true"><circle cx="7" cy="7" r="5.5" stroke="currentColor" stroke-width="1.2" fill="none" /><path d="M1.5 7h11M7 1.5c2 1.5 2 9.5 0 11M7 1.5c-2 1.5-2 9.5 0 11" stroke="currentColor" stroke-width="1" fill="none" /></svg>
|
||||
<a href="{{ Str::startsWith($company->website, ['http://', 'https://']) ? $company->website : 'https://'.$company->website }}" rel="nofollow noopener" target="_blank" class="text-ink underline underline-offset-2 hover:text-brand transition-colors">{{ Str::of($company->website)->after('//')->rtrim('/') }}</a>
|
||||
<a href="{{ $company->websiteUrl() }}" rel="nofollow noopener" target="_blank" class="text-ink underline underline-offset-2 hover:text-brand transition-colors">{{ Str::of($company->website)->after('//')->rtrim('/') }}</a>
|
||||
</span>
|
||||
@endif
|
||||
</div>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue