{{-- Error state --}} @if ($error)

{{ $error }}

@endif {{-- Summary stats --}} @php $count = count($backups); $totalBytes = collect($backups)->sum('size'); $latest = $backups[0] ?? null; $ageHours = $latest ? (int) round((time() - $latest['modified']) / 3600) : null; $healthy = $ageHours !== null && $ageHours <= 48; @endphp
{{-- Last backup --}}

Last Backup

@if ($latest)

{{ $latest['date_human'] }}

{{ $latest['date_label'] }} UTC

@else

No backups yet

@endif
{{-- Total backups --}}

Total Backups

{{ $count }}

{{ $keepDailyDays }}d daily · {{ $keepWeeklyWeeks }}w weekly · {{ $keepMonthlyMonths }}m monthly retained

{{-- Total size --}}

Total Size

{{ $totalBytes > 0 ? \App\Filament\Pages\Settings\ManageBackups::formatBytes($totalBytes) : '—' }}

Stored in R2 · db-backups/

{{-- Schedule info --}}

Schedule

02:00 — DB dump → R2
02:30 — Clean old backups
03:00 — Health check
{{-- Retention configuration --}}

Retention Policy

How long to keep backups before pruning older ones

@foreach ([ ['label' => 'Keep all for', 'unit' => 'days', 'model' => 'keepAllDays', 'hint' => 'Every backup kept'], ['label' => 'Daily backups', 'unit' => 'days', 'model' => 'keepDailyDays', 'hint' => 'One per day kept'], ['label' => 'Weekly backups', 'unit' => 'weeks', 'model' => 'keepWeeklyWeeks', 'hint' => 'One per week kept'], ['label' => 'Monthly backups', 'unit' => 'months', 'model' => 'keepMonthlyMonths', 'hint' => 'One per month kept'], ['label' => 'Yearly backups', 'unit' => 'years', 'model' => 'keepYearlyYears', 'hint' => 'One per year kept'], ] as $field)
{{ $field['unit'] }}

{{ $field['hint'] }}

@endforeach

Receives alerts when a backup fails or health check fails

R2 Destination

Leave blank to use the same R2 account as Image Storage. Fill all four fields to send backups to a separate R2 bucket.

Path within the bucket where zips are stored — e.g. db-backups/production or db-backups/dev

{{-- Backup list --}}

Backup Files

Encrypted zip files stored in db-backups/ on R2. Password is set via BACKUP_ARCHIVE_PASSWORD in .env.

@if (count($backups) === 0 && ! $error)

No backups found

Click Run Backup Now to create the first one.

@else
@foreach ($backups as $i => $backup) @php $isFirst = $i === 0; @endphp @endforeach
Date / Time (UTC) Age Size R2 Path
{{ $backup['date_label'] }} @if ($isFirst) latest @endif {{ $backup['date_human'] }} {{ \App\Filament\Pages\Settings\ManageBackups::formatBytes($backup['size']) }} {{ $backup['path'] }}
@endif