Use this file when adding or changing Filament SEO admin behavior for projects using banulakwin/laravel-seo-engine.
php artisan boost:add-skill banulakwin/filament-seo-engine
Save this content to: AGENTS.md
# Agent guide: `banulakwin/filament-seo-engine`
Use this file when adding or changing Filament SEO admin behavior for projects using `banulakwin/laravel-seo-engine`.
## Mental model
- SEO storage is centralized in `seo_meta`.
- Static pages use `model_type = config('seo.static_page_model_type', 'static_page')` and string `model_id`.
- Dynamic models use a `seo()` relation (typically via `Seoable`) and should be edited inline via reusable schemas.
- Relationship-backed SEO tabs should not use RelationManagers unless explicitly required by the host app.
## Current package surface
- Plugin: `Banulakwin\FilamentSeoEngine\FilamentSeoEnginePlugin`
- Reusable schemas:
- `Banulakwin\FilamentSeoEngine\Schemas\SeoContentForm`
- `Banulakwin\FilamentSeoEngine\Schemas\SeoContentInfolist`
- `Banulakwin\FilamentSeoEngine\Schemas\CommonImageUpload`
- Static SEO resource:
- `Banulakwin\FilamentSeoEngine\Resources\StaticPageSeos\StaticPageSeoResource`
### Current host-app usage pattern
- Edit pages: SEO tab uses `SeoContentForm::relationshipSchema('seo')`.
- View pages: SEO tab/section uses `SeoContentInfolist::section('seo')`.
- Static pages are managed in `StaticPageSeoResource` (scoped by configured static model type).
## Do
- Keep reusable SEO schema relation-friendly (`->relationship('seo')` from host forms).
- Keep static SEO queries scoped to configured static model type.
- Reuse shared schema objects for consistency across resources/pages.
- Preserve existing SEO records unless user explicitly edits fields.
## Do not
- Do not hardcode app-specific model classes in this package.
- Do not assume a specific panel provider implementation in host apps.
- Do not force RelationManager-based UX for model SEO editing.
## Testing & Quality
```bash
composer test # PHPUnit
composer pint # Laravel Pint code style fix
composer pint:check # Pint check only (no fix)
composer phpstan # PHPStan level max on src/
composer quality # All: pint + phpstan + test
```
## CI
GitHub Actions runs tests, Pint, and PHPStan on push/PR (`.github/workflows/tests.yml`).
banulakwin/filament-seo-engineUse this file when adding or changing Filament SEO admin behavior for projects using banulakwin/laravel-seo-engine.
seo_meta.model_type = config('seo.static_page_model_type', 'static_page') and string model_id.seo() relation (typically via Seoable) and should be edited inline via reusable schemas.Banulakwin\FilamentSeoEngine\FilamentSeoEnginePluginBanulakwin\FilamentSeoEngine\Schemas\SeoContentFormBanulakwin\FilamentSeoEngine\Schemas\SeoContentInfolistBanulakwin\FilamentSeoEngine\Schemas\CommonImageUploadBanulakwin\FilamentSeoEngine\Resources\StaticPageSeos\StaticPageSeoResourceSeoContentForm::relationshipSchema('seo').SeoContentInfolist::section('seo').StaticPageSeoResource (scoped by configured static model type).->relationship('seo') from host forms).composer test # PHPUnit
composer pint # Laravel Pint code style fix
composer pint:check # Pint check only (no fix)
composer phpstan # PHPStan level max on src/
composer quality # All: pint + phpstan + test
GitHub Actions runs tests, Pint, and PHPStan on push/PR (.github/workflows/tests.yml).
How can I help you explore Laravel packages today?