Filament v5 plugin development standards and patterns for this CRM package
php artisan boost:add-skill refineder/filament-crm
Save this content to: .cursor/rules/filament-v5-plugin.mdc
# Filament v5 Plugin Development Standards
## Requirements
- PHP 8.2+
- Laravel 11.28+
- Livewire 4.0+
- Tailwind CSS 4.0+
- filament/filament: ^5.0
## Namespaces (Filament 5.x)
- Forms: `Filament\Forms\Components\*` (TextInput, Select, Toggle, etc.)
- Tables: `Filament\Tables\Columns\*` (TextColumn, IconColumn, etc.)
- Filters: `Filament\Tables\Filters\*`
- Actions: `Filament\Actions\*` (EditAction, DeleteAction, BulkActionGroup, etc.)
- Schema: `Filament\Schemas\Schema`
- Plugin Interface: `Filament\Contracts\Plugin`
- Panel: `Filament\Panel`
- Widgets: `Filament\Widgets\Widget`, `Filament\Widgets\StatsOverviewWidget`
- Resources: `Filament\Resources\Resource`
- Pages: `Filament\Resources\Pages\*` (ListRecords, CreateRecord, EditRecord, ViewRecord)
## Resource Structure (v5 Pattern)
```
Resources/
CustomerResource.php
Pages/
CreateCustomer.php
EditCustomer.php
ListCustomers.php
Schemas/
CustomerForm.php
Tables/
CustomersTable.php
```
## Plugin Class Pattern
```php
use Filament\Contracts\Plugin;
use Filament\Panel;
class MyPlugin implements Plugin
{
public static function make(): static
{
return app(static::class);
}
public static function get(): static
{
return filament(app(static::class)->getId());
}
public function getId(): string
{
return 'my-plugin';
}
public function register(Panel $panel): void
{
$panel->resources([...])->pages([...])->widgets([...]);
}
public function boot(Panel $panel): void {}
}
```
## Service Provider Pattern
- Extend `Spatie\LaravelPackageTools\PackageServiceProvider`
- Register views, translations, migrations in `configurePackage()`
- Register assets in `packageBooted()`
- Use `$package->name()->hasViews()->hasTranslations()->hasMigrations()->hasRoutes()`
## Code Style
- Use PHP 8.2 features (enums, readonly, named arguments, fibers)
- Follow Laravel Pint formatting
- Use strict types in all files
- Prefix all database tables with `crm_`
- Prefix all config keys with `refineder-crm`
Filament\Forms\Components\* (TextInput, Select, Toggle, etc.)Filament\Tables\Columns\* (TextColumn, IconColumn, etc.)Filament\Tables\Filters\*Filament\Actions\* (EditAction, DeleteAction, BulkActionGroup, etc.)Filament\Schemas\SchemaFilament\Contracts\PluginFilament\PanelFilament\Widgets\Widget, Filament\Widgets\StatsOverviewWidgetFilament\Resources\ResourceFilament\Resources\Pages\* (ListRecords, CreateRecord, EditRecord, ViewRecord)Resources/
CustomerResource.php
Pages/
CreateCustomer.php
EditCustomer.php
ListCustomers.php
Schemas/
CustomerForm.php
Tables/
CustomersTable.php
use Filament\Contracts\Plugin;
use Filament\Panel;
class MyPlugin implements Plugin
{
public static function make(): static
{
return app(static::class);
}
public static function get(): static
{
return filament(app(static::class)->getId());
}
public function getId(): string
{
return 'my-plugin';
}
public function register(Panel $panel): void
{
$panel->resources([...])->pages([...])->widgets([...]);
}
public function boot(Panel $panel): void {}
}
Spatie\LaravelPackageTools\PackageServiceProviderconfigurePackage()packageBooted()$package->name()->hasViews()->hasTranslations()->hasMigrations()->hasRoutes()crm_refineder-crmHow can I help you explore Laravel packages today?