shuvroroy/filament-spatie-laravel-backup
A Filament page for creating and managing application backups using spatie/laravel-backup. Register the plugin in your panel provider, publish assets, and get a ready-made Backups page with customizable icon and heading.
Architecture fit. This is a thin presentation layer, not a backup engine. It ships a single Filament page that reads and drives spatie/laravel-backup's existing configuration (config/backup.php), disks, and queued jobs. That is the right shape for us: no new persistence model, no parallel backup pipeline, no schema changes. It assumes a Filament panel already exists and that the Spatie package is (or will be) the system of record for backup policy. If our backup strategy lives anywhere else (managed RDS snapshots, Vault, cloud provider tooling), this package is a convenience console layered on top — useful, but not the control plane.
Integration feasibility. Low effort, high determinism. composer require, php artisan filament:assets, optional translation publish, one ->plugin(...) line in the PanelProvider, plus a permission seeder for create-backup / download-backup / delete-backup. Customization is well-factored: a plugin-level fluent API for nav icon/label/group/sort (closures supported), usingPolingInterval(), usingQueue(), timeout() / noTimeout(), authorize(), and a documented page-extension path (usingPage()) for headings and grouping. Nothing here requires us to fork or patch.
Technical risk.
string | \BackedEnum | null navigation property and ->plugin() registration imply Filament v3.2+/v4, and the repo carries an explicit 1.x → 2.0 upgrade guide. Every Filament major bump becomes a plugin upgrade we must schedule in lockstep.authorize() gates page access; the three action permissions must be seeded and assigned by us. Do not assume least privilege out of the box.Key questions for engineering.
spatie/laravel-backup?backup:monitor scheduled with alerting, independent of this UI?Stack fit. Native fit for a Laravel + Filament admin panel already running spatie/laravel-backup. It adds one navigation entry under a group we choose (recommend Settings or Core, sorted below day-to-day operational pages). No frontend build changes beyond filament:assets.
Migration path. Greenfield is trivial: install, publish assets and translations, register the plugin, seed permissions, assign the backup role. For an existing Spatie deployment, the only migration is the UI — the existing config/backup.php (disks, retention, database dump binaries, notification mail) is respected untouched, so backup behavior does not change on day one. Treat the 1.x → 2.0 UPGRADE guide as a checklist item if we are adopting an older pinned release.
Compatibility. Three constraint surfaces to verify in CI: Filament major version, PHP minor version, and spatie/laravel-backup config schema (v8 vs v9 keys). Also confirm the host has mysqldump/pg_dump available to the web and queue runtime, and that storage credentials resolve in the queue worker's environment.
Sequencing.
usingQueue() is pointed at a pool with adequate timeout.backup role; wire authorize() to that role or an email allowlist.timeout() rather than noTimeout().php artisan backup:run).Maintenance. Near-zero code maintenance; the real ongoing cost is dependency-upgrade choreography with Filament majors. Budget a recurring line item for "verify backup plugin after Filament upgrade" in the platform upgrade checklist.
Support. Onboarding is a documentation problem, not a training problem — the UI is self-explanatory. The support load will concentrate on permission requests ("why can't I delete backups?") and on the download path ("the archive is too large / times out"). Write a one-page runbook covering: create, verify, restore, and who holds the backup role.
Scaling. Three dimensions:
max_execution_time and memory on the download path even when the backup job itself succeeds. Prefer direct-from-storage retrieval over proxying through the app.Failure modes to instrument.
Ramp-up. Half a day for a competent Laravel engineer including staging verification and the permission seeder; one day if we need a custom page class, SSO-aware authorize(), and runbook updates. No specialist knowledge required.
TPM position. Approve as a low-risk operational convenience layer, conditional on: (a) it never being the only backup mechanism, (b) backup:monitor alerting existing independently, (c) delete/download scoped to a named role, and (d) a documented CLI restore path that does not depend on this plugin. The package itself is not the risk — the discipline around restore testing is.
How can I help you explore Laravel packages today?