@php $toneClasses = [ 'slate' => 'bg-slate-50 text-slate-800 ring-slate-200', 'teal' => 'bg-teal-50 text-teal-800 ring-teal-200', 'rose' => 'bg-rose-50 text-rose-800 ring-rose-200', 'amber' => 'bg-amber-50 text-amber-900 ring-amber-200', 'sky' => 'bg-sky-50 text-sky-800 ring-sky-200', ]; @endphp
@foreach ($summary as $item)

{{ $item['label'] }}

{{ number_format($item['value']) }}

@endforeach

Source health

Latest sync state, active job count, and failure reason per source.

@forelse ($sources as $source) @php $failed = $source->last_failed_at && (! $source->last_synced_at || $source->last_failed_at->gt($source->last_synced_at)); $stale = $source->is_active && $source->isAutomaticallySyncable() && (! $source->last_synced_at || $source->last_synced_at->lt(now()->subDay())); @endphp

{{ $source->name }}

{{ strtoupper($source->type) }} @if ($source->is_active) Active @else Inactive @endif @if ($failed) Failing @elseif ($stale) Needs sync @else Healthy @endif

{{ $source->feed_url ?: $source->base_url ?: 'Manual source' }}

Jobs

{{ number_format($source->active_jobs_count) }} active / {{ number_format($source->imported_jobs_count) }} total

Last sync

{{ $source->last_synced_at?->diffForHumans() ?: 'Never' }}

Last failure

{{ $source->last_failure_reason ?: 'No recent failure' }}

@empty
No job sources configured yet.
@endforelse

Recent sync logs

Imported/expired counts and timing from the source sync job.

@forelse ($recentSyncLogs as $log) @empty @endforelse
Source Status Imported Expired Duration Finished
{{ $log->source?->name ?: 'Deleted source' }} {{ str($log->status)->headline() }} {{ number_format($log->jobs_imported) }} {{ number_format($log->jobs_expired) }} {{ $log->duration_ms ? number_format($log->duration_ms).' ms' : '-' }} {{ $log->finished_at?->diffForHumans() ?: '-' }}
No source sync logs yet. Run a source sync first.