3 Filament Features I Wish I Knew About Sooner

When I started building admin panels with Filament, I did what most beginners do: I made a Resource, filled in the form fields, and called it done. It worked, but it also meant I was writing a lot of extra code for things Filament could already handle for me.

Here are three features that quietly made my Laravel admin panels look and feel more professional, without much extra effort.

Relation Managers: Stop Building Separate CRUD Pages

Say you have a Lecturer resource, and each lecturer has many Students. The beginner move is to build a whole separate CRUD interface for managing students with its own resource, its own routes, its own everything.

Filament’s Relation Managers solve this. You can manage the related model directly inside the parent resource’s edit page.

public static function getRelations(): array
{
    return [
        RelationManagers\StudentsRelationManager::class,
    ];
}

Inside the relation manager class, you define the table and form just like you would for a regular resource:

public function table(Table $table): Table
{
    return $table
        ->columns([
            Tables\Columns\TextColumn::make('name'),
            Tables\Columns\TextColumn::make('email'),
        ])
        ->headerActions([
            Tables\Actions\CreateAction::make(),
        ]);
}

Now, when you open a lecturer’s edit page, there’s a tab showing all their students with create, edit, and delete actions built in. No separate pages, no extra routes, no duplicated logic.

Custom Actions With Confirmation Modals

Buttons that do something destructive or important like approving a submission or rejecting a request should always ask “are you sure?” first. Building that confirmation modal yourself usually means extra Livewire components or JS logic.

Filament gives you this for free with Action::make() and ->requiresConfirmation():

Tables\Actions\Action::make('approve')
    ->label('Approve')
    ->icon('heroicon-o-check-circle')
    ->color('success')
    ->requiresConfirmation()
    ->action(function ($record) {
        $record->update(['status' => 'approved']);
    });

That’s it. Clicking the button pops up a modal asking the user to confirm, and only runs the action() closure if they say yes. You can customize the modal heading, description, and even require the user to type something before confirming which is useful for irreversible actions like deleting records.

The Notifications API: Toasts With Almost No Code

Every app needs feedback “Saved successfully,” “Something went wrong,” and so on. Instead of writing your own toast component, Filament ships with a clean Notifications API:

Notification::make()
    ->title('Approved successfully')
    ->success()
    ->send();

Drop this inside any action, form submission, or event, and you get a polished, animated notification; no CSS, no JS, no extra package. There’s also ->warning(), ->danger(), and ->info() for different states, plus support for actions and persistent notifications if you need something more advanced.

Small Features, Big Payoff

None of these are complicated once you know they exist and that’s exactly the problem. They’re easy to miss if you’re just following the basic tutorial. But once you start using relation managers, confirmation modals, and the notifications API together, your admin panel starts feeling like a real, polished product instead of a bare CRUD scaffold.

If you’re building anything in Filament right now, I’d bet at least one of these three can replace something you’re currently doing the hard way.

Book a Free Consultation

Haven’t found the right solution yet?
Tell us about your needs, and let’s discuss the best solution together.