Rapid Admin Panel Development in Laravel Using Filament

Every serious web application eventually needs an admin panel, a place to manage records, review data, and handle day-to-day operations. The problem is that building one from scratch means writing the same CRUD forms, tables, and validation logic over and over again for every resource in your database.

Filament solves this by generating a fully functional, good-looking admin panel directly from your Eloquent models, with almost none of the boilerplate. Here’s how it works, and why it’s worth adding to your Laravel toolkit.

What Filament Actually Gives You

Filament is a collection of full-stack components built on top of Livewire, Alpine.js, and Tailwind CSS. Instead of hand-coding a resource controller, a Blade view, a form, and a table for every model, you define a single “Resource” class, and Filament generates the entire CRUD interface (list view, create/edit forms, filters, and actions) automatically.

Installing it is straightforward:

composer require filament/filament
php artisan filament:install --panels

Then create your admin user:

php artisan make:filament-user

Visit /admin, and you already have a working login and dashboard shell before writing a single line of custom code.

1. Generate a Full Resource from an Existing Model

Say you have a Product model. One command scaffolds the entire admin interface for it:

php artisan make:filament-resource Product --generate

The --generate flag inspects your table’s columns and automatically builds form fields and table columns that match your schema: text inputs for strings, toggles for booleans, date pickers for timestamps. You get a working list page, create page, and edit page immediately.

2. Define Forms Declaratively

Filament forms are built with a clean, chainable API instead of raw HTML. A more customized form might look like this:

public static function form(Form $form): Form
{
    return $form->schema([
        TextInput::make('name')
            ->required()
            ->maxLength(255),

        TextInput::make('price')
            ->numeric()
            ->prefix('Rp')
            ->required(),

        Select::make('category_id')
            ->relationship('category', 'name')
            ->searchable()
            ->required(),

        Toggle::make('is_active')
            ->default(true),
    ]);
}

Validation, relationship loading, and searchable dropdowns are handled by the field definitions themselves, with no separate FormRequest class and no manual query for dropdown options.

3. Build Rich Tables Without Writing Blade

The table builder mirrors the form builder’s style, and it comes with sorting, searching, and filtering out of the box:

public static function table(Table $table): Table
{
    return $table
        ->columns([
            TextColumn::make('name')->searchable()->sortable(),
            TextColumn::make('category.name')->label('Category'),
            TextColumn::make('price')->money('idr')->sortable(),
            IconColumn::make('is_active')->boolean(),
        ])
        ->filters([
            SelectFilter::make('category_id')
                ->relationship('category', 'name'),
        ])
        ->actions([
            Tables\Actions\EditAction::make(),
        ]);
}

That’s a searchable, sortable, filterable data table, the kind that normally takes a good chunk of a day to hand-build with pagination and query logic, in about fifteen lines.

4. Add Relation Managers Instead of Separate Pages

If a Product belongs to a Category but a Category also needs to show its related products inline, Filament’s Relation Managers let you manage related records right within the parent resource’s edit page, instead of building a whole separate interface for it:

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

This keeps related data manageable in context. You edit a category and see (and manage) its products right there, without leaving the page.

5. Extend Instead of Fighting the Framework

The biggest productivity gain isn’t any single feature. It’s that Filament is built to be extended rather than worked around. Custom actions, widgets, dashboard cards, and even entirely custom pages all plug into the same Resource/Panel architecture, so you’re not maintaining a separate mental model for “the parts Filament generated” versus “the parts I built by hand.”

For example, adding a custom bulk action to export selected records takes just a few lines inside the existing table definition, rather than a whole new controller and route.

Summary

Filament won’t replace a fully custom-built interface for every use case, but for the internal tools, back-office dashboards, and admin panels that make up a large share of real-world Laravel work, it removes almost all of the repetitive scaffolding. The time saved on CRUD boilerplate is time you can spend on the parts of the application that actually need custom logic.

If you’re maintaining several resources with similar CRUD needs, Filament is worth trying on just one model first. It’s a fast way to see whether the framework’s conventions fit the way your project is structured.

Book a Free Consultation

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

Project description.

Built a private marketplace research and purchase planning platform for Shopee. The system tracks product performance over time, estimates sales velocity and gross revenue, analyzes demand across product variants, and turns the research into actionable purchasing plans. It also calculates supplier costs, shipping, platform fees, margins, planned investment, and estimated earnings to support data-driven sourcing decisions.

Skills and deliverables

Full-Stack Development, Web Application Development, Data Analysis, Business Process Automation, Business Intelligence

Shopee Marketplace Research & Purchase Planning Dashboard

We built this application to solve a common problem in marketplace sourcing: finding products is easy, but deciding what is actually worth buying, which variant to prioritize, and how much inventory to purchase requires much more analysis. Instead of relying on a single product snapshot, the system organizes products into research collections and tracks their marketplace performance over time.

Product research & tracking

Products can be added individually or collected from marketplace stores and organized into dedicated research collections. The system keeps historical observations so users can compare changes between captures instead of relying only on the latest marketplace data. This makes it possible to estimate metrics such as: – Sales velocity – Estimated daily gross revenue – Price changes – Product movement over time – Variant-level demand

Variant demand analysis

One of the most important parts of the system is identifying which variants are actually driving sales. Instead of treating a product as a single item, the application analyzes sales movement at variant level and shows each variant’s contribution to recent demand. This helps identify which sizes, models, or variations should be prioritized when purchasing inventory.

Purchase planning

Research data can then be converted directly into a purchasing plan. For every product and variant, the user can enter supplier pricing, shipping costs, purchase quantities, exchange rates, and other operational costs. The system automatically calculates: – Planned inventory investment – Shipping cost – Marketplace/platform fees – Net margin per unit – Net margin percentage – Estimated earnings – Total batch investment This allows purchasing decisions to be evaluated before committing capital.

Why We built it

The goal was to replace a workflow that would normally require multiple spreadsheets, manual marketplace checks, and repeated calculations. The resulting workflow became: Discover products → Track performance → Analyze demand → Select variants → Plan purchasing → Estimate margins Everything is kept in one application, making the research and sourcing process easier to review, repeat, and scale.

Result

The platform turns raw marketplace observations into actionable purchasing information. Instead of choosing products based only on intuition or current sales numbers, users can evaluate sales movement, variant demand, sourcing cost, expected margin, and required investment before making a purchasing decision. Built as an end-to-end internal tool, from data collection and analysis to the final purchasing workflow.

Project description.

Built a browser-based tool that converts Shopee/SPX order exports into clean, print-ready shipping labels. It supports multiple Excel/CSV files, combines orders into one preview, and automatically generates QR codes, barcodes, tracking numbers, and product information for 68 mm thermal printers. All order data is processed locally in the browser for better privacy, eliminating repetitive manual label formatting.

Skills and deliverables

Laravel, Business Automation, CSV, Microsoft Excel

Shopee SPX Order Label Maker for Thermal Printing

This tool was built to simplify the shipping label preparation process for Shopee SPX orders. The existing workflow required order data to be exported from Shopee and manually formatted before it could be printed on a thermal printer. This became repetitive and time-consuming, especially when processing multiple orders at once.

We built a browser-based label generator that reads Shopee Excel/CSV exports and automatically converts the order data into clean, print-ready SPX labels. The tool automatically handles: – Tracking numbers – QR codes – Barcodes – Product names and variants – Order quantities – Multiple order files at once – 68 mm thermal printer formatting Users can review all generated labels before printing, without having to manually copy or reorganize the order information.

The order files are processed directly inside the browser instead of being uploaded to a server. This keeps customer and shipment data private while also making the tool fast and simple to use.