Generate FilamentPHP v4 resources with form, table, relation managers, and actions
Generates complete FilamentPHP v4 resources with forms, tables, relation managers, and actions. Used when creating or updating Filament resources for Laravel models.
/plugin marketplace add mwguerra/claude-code-plugins/plugin install post-development@mwguerra-marketplaceThis skill inherits all available tools. When active, it can use any tool Claude has access to.
This skill generates complete FilamentPHP v4 resources including form schemas, table configurations, relation managers, and custom pages. All generated code follows official documentation patterns.
CRITICAL: Before generating any resource, read:
/home/mwguerra/projects/mwguerra/claude-code-plugins/filament-specialist/skills/filament-docs/references/general/03-resources//home/mwguerra/projects/mwguerra/claude-code-plugins/filament-specialist/skills/filament-docs/references/forms//home/mwguerra/projects/mwguerra/claude-code-plugins/filament-specialist/skills/filament-docs/references/tables/Identify:
Use Laravel artisan to create the resource:
# Basic resource
php artisan make:filament-resource ModelName
# With generate flag (creates form/table from model)
php artisan make:filament-resource ModelName --generate
# Soft deletes support
php artisan make:filament-resource ModelName --soft-deletes
# View page only
php artisan make:filament-resource ModelName --view
# Simple resource (modal forms instead of pages)
php artisan make:filament-resource ModelName --simple
Read form field documentation and implement:
use Filament\Forms;
use Filament\Forms\Form;
public static function form(Form $form): Form
{
return $form
->schema([
Forms\Components\Section::make('Basic Information')
->schema([
Forms\Components\TextInput::make('name')
->required()
->maxLength(255),
Forms\Components\Textarea::make('description')
->rows(3)
->columnSpanFull(),
]),
Forms\Components\Section::make('Settings')
->schema([
Forms\Components\Toggle::make('is_active')
->default(true),
Forms\Components\Select::make('status')
->options([
'draft' => 'Draft',
'published' => 'Published',
]),
]),
]);
}
Read table documentation and implement:
use Filament\Tables;
use Filament\Tables\Table;
public static function table(Table $table): Table
{
return $table
->columns([
Tables\Columns\TextColumn::make('name')
->searchable()
->sortable(),
Tables\Columns\IconColumn::make('is_active')
->boolean(),
Tables\Columns\BadgeColumn::make('status')
->colors([
'warning' => 'draft',
'success' => 'published',
]),
Tables\Columns\TextColumn::make('created_at')
->dateTime()
->sortable()
->toggleable(isToggledHiddenByDefault: true),
])
->filters([
Tables\Filters\SelectFilter::make('status')
->options([
'draft' => 'Draft',
'published' => 'Published',
]),
Tables\Filters\TernaryFilter::make('is_active'),
])
->actions([
Tables\Actions\ViewAction::make(),
Tables\Actions\EditAction::make(),
Tables\Actions\DeleteAction::make(),
])
->bulkActions([
Tables\Actions\BulkActionGroup::make([
Tables\Actions\DeleteBulkAction::make(),
]),
]);
}
For relationships, create relation managers:
php artisan make:filament-relation-manager ResourceName RelationName column_name
Register in resource:
public static function getRelations(): array
{
return [
RelationManagers\CommentsRelationManager::class,
RelationManagers\TagsRelationManager::class,
];
}
Define resource pages:
public static function getPages(): array
{
return [
'index' => Pages\ListModels::route('/'),
'create' => Pages\CreateModel::route('/create'),
'view' => Pages\ViewModel::route('/{record}'),
'edit' => Pages\EditModel::route('/{record}/edit'),
];
}
Implement policy methods:
public static function canViewAny(): bool
{
return auth()->user()->can('view_any_model');
}
public static function canCreate(): bool
{
return auth()->user()->can('create_model');
}
TextInput::make() - Single line textTextarea::make() - Multi-line textRichEditor::make() - WYSIWYG editorMarkdownEditor::make() - Markdown editorSelect::make() - Dropdown selectRadio::make() - Radio buttonsCheckbox::make() - Single checkboxCheckboxList::make() - Multiple checkboxesToggle::make() - Toggle switchDatePicker::make() - Date onlyDateTimePicker::make() - Date and timeTimePicker::make() - Time onlyFileUpload::make() - File uploadSpatieMediaLibraryFileUpload::make() - Media librarySelect::make()->relationship() - BelongsTo selectCheckboxList::make()->relationship() - BelongsToManyRepeater::make()->relationship() - HasMany inlineSection::make() - Card sectionFieldset::make() - Fieldset groupingTabs::make() - Tabbed sectionsGrid::make() - Grid layoutSplit::make() - Split layoutTextColumn::make() - Basic textIconColumn::make() - Boolean iconImageColumn::make() - Image thumbnailBadgeColumn::make() - Badge stylingColorColumn::make() - Color swatch->searchable() - Enable search->sortable() - Enable sort->toggleable() - Can hide/show->wrap() - Wrap text->limit() - Truncate textFor each resource, generate:
app/Filament/Resources/ModelResource.phpapp/Filament/Resources/ModelResource/Pages/app/Filament/Resources/ModelResource/RelationManagers/tests/Feature/Filament/ModelResourceTest.phpCreating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems. Create original algorithmic art rather than copying existing artists' work to avoid copyright violations.
Applies Anthropic's official brand colors and typography to any sort of artifact that may benefit from having Anthropic's look-and-feel. Use it when brand colors or style guidelines, visual formatting, or company design standards apply.
Create beautiful visual art in .png and .pdf documents using design philosophy. You should use this skill when the user asks to create a poster, piece of art, design, or other static piece. Create original visual designs, never copying existing artists' work to avoid copyright violations.