@extends('layouts.app') @section('title', $campaign->name) @section('content')
status, ['queued', 'sending'])) x-data x-init="setTimeout(() => window.location.reload(), 15000)" @endif >

{{ $campaign->name }}

{{ $campaign->subject }} · Audience: {{ $campaign->segment?->name ?? $campaign->contactList?->name ?? '—' }} @if ($campaign->scheduled_at) · Scheduled {{ $campaign->scheduled_at->timezone(\App\Support\Settings::get('app.timezone', 'Europe/London'))->format('d M Y H:i') }}@endif

@if ($campaign->last_error)

{{ $campaign->last_error }}

@endif
@if ($campaign->isEditable()) @can('manage campaigns') Edit Review & send @endcan @endif @can('send campaigns') @if ($campaign->canPause()) Pause @endif @if ($campaign->canResume())
@csrf
@endif @if ($campaign->canCancel()) Cancel @endif @endcan @can('manage campaigns')
@csrf
@endcan @can('view reports') @if ($campaign->sent_count > 0) Full report @endif @endcan
@if (in_array($campaign->status, ['queued', 'sending', 'paused']))
{{ $campaign->status === 'queued' ? 'Building recipient queue…' : 'Sending in batches via cron' }} {{ number_format($campaign->sent_count) }} / {{ number_format($campaign->total_recipients) }} · {{ $campaign->progressPercent() }}%
@endif

Queue breakdown

    @forelse ($recipientBreakdown as $status => $total)
  • {{ number_format($total) }}
  • @empty
  • Recipient queue not built yet — it is created when the campaign starts.
  • @endforelse

Recent events

    @forelse ($recentEvents as $event)
  • {{ $event->contact?->email ?? '—' }}
  • @empty
  • No events yet.
  • @endforelse

* Opens are approximate due to privacy protections in modern email clients.

@endsection