phpsa/filament-headless-cms
phpsa/filament-headless-cms brings headless CMS capabilities to Filament, letting you manage structured content in the admin panel and deliver it via APIs to any frontend. It supports content modeling, Laravel integration, and decoupled, flexible site builds.
composer require phpsa/filament-headless-cms. Confirm the Filament version constraint in composer.json before you commit; headless CMS packages tend to pin tightly to Filament majors.php artisan vendor:publish --provider="Phpsa\FilamentHeadlessCms\...ServiceProvider" (check php artisan vendor:publish output for the exact tags), then php artisan migrate. Review the published config file before migrating, since table prefixes and content-type drivers are usually baked into migrations.PanelProvider (->plugin(...)) — this is the standard Filament entry point and is where you'll add the CMS resources to an existing admin panel rather than standing up a second one.README, the published config/*.php, the service provider's register()/boot() (to see what routes, policies, and Livewire components get bound), then the src/Models directory. The models tell you more about the data shape than the docs will.Page/content-type resource in the admin, author one entry, then hit the exposed JSON endpoint (or your own Route::get wrapping the package's query scope) from curl. Getting one document out end-to-end on day one surfaces 90% of the config issues.DatabaseSeeder so local and CI environments are reproducible — a CMS package with an admin UI tempts teams into hand-authoring content that never makes it into tests.RouteServiceProvider or the panel provider. If it doesn't, expose content via API Resources — that keeps versioning (/api/v1/...) under your control.updated_at, and bust on the package's save/publish events (Model::saved, or a dedicated event if one is dispatched). Filament observers are a clean place to hang this.v1.0.1...v1.1.0 comparison. A minor bump on a young package often carries schema changes, renamed config keys, or Filament component moves — open the compare view and scan database/migrations, config/, and any renamed classes before upgrading.config/filament-headless-cms.php, new config keys added in a release silently fall back to package defaults. Diff your published copy against the package's config/ on every upgrade.database/migrations, they can end up ordered before the users table and break foreign keys on a fresh install. Prefer running vendor migrations from the package (vendor:publish only the config) unless you need to edit them.config('filesystems.disks.public'); a missing storage:link or an S3 disk without the right visibility produces broken media URLs that look like a package bug.$fillable/$casts overrides via subclass + container binding, Filament resource extension (Resource::getPages(), form/table schema modifiers), and events/observers — these survive minor upgrades far better than editing vendor views.php artisan route:list --path=<prefix>, then php artisan about to confirm the panel plugin actually registered. Most "it's not working" reports trace back to the plugin never being added to a panel the user has access to.composer.json ("phpsa/filament-headless-cms": "^1.1") and let Dependabot surface future releases with proper notes, given how terse this one was.How can I help you explore Laravel packages today?