Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

Browse all series

Customizing Filament For User-Facing Apps

In this series, we'll build a real, user-facing app called Booknest using Laravel and Filament. We'll begin with a fresh install and begin pushing Filament beyond the usual "internal admin only" setup that you typically see. It's capable of so much more.

Progress

Series Info

Episodes
14
Run Time
2h 53m
Difficulty
Intermediate
Last Updated
Mar 4, 2026
Version
Latest

Series Episodes

  1. Setup and Foundation (4)
    1. Welcome to Booknest

      In this series, we'll take Filament beyond the usual internal admin dashboard and shape it into a real, user-facing app called Booknest. We'll kick things off with a fresh Laravel install so we have a clean foundation for the design, layout, and overall experience.
    2. Set Up Two Filament Panels

      We'll install Filament and set up two panels: one for admin work and one for app users. Then we'll lock down access, create our first Book resource with a policy, and seed realistic data so we have something solid to build on.
    3. Make It Yours with Branding and Themes

      With our panels and book resource in place, it's time to make Filament feel like our app. We'll customize branding, colors, fonts, and dark mode support, refactor shared panel config into a BasePanelProvider, and generate a theme with php artisan make:filament-theme for clean, future-proof styling.
    4. Style the Book Listing

      In the app panel, we need a clean way for readers to browse books. We'll generate a new Book resource and trim it down to a simple, read-only listing, then improve the layout with Split, Stack, responsive grids, and a custom view() when built-in columns aren't enough.
  2. Core Features (6)
    1. Track Requests, Borrows, and Returns

      Now we'll build the heart of the app: tracking requests and reading activity with a many-to-many relationship, a pivot table, and a BookUser pivot model. Then we'll create a Filament resource scoped to the signed-in user, complete with tabs, badges, and a few UI touches to make it feel just right.
    2. Add Ratings and Status Badges

      Let's enrich our book cards with an average rating—without running into n+1 issues—and render it as stars with a custom table column. Then we'll eager load the current borrow status with with(), derive state with state(), and display it as a clean, colored badge.
    3. Build Helpful Table Actions

      We'll add custom actions to our Filament tables with recordActions() so users can request books, cancel requests, and start a return with a quick feedback form. Along the way, we'll polish the UI with button(), outline(), and visible() so actions only appear when they make sense.
    4. Polish UX with Better Notifications

      Let's upgrade our notifications so they feel tailored to the app, not generic defaults. We'll improve the success and error copy, set global positioning in AppServiceProvider, and create richer notifications with Notification::make(), actions, and persistent().
    5. Create a Star Rating Form Field

      Instead of a boring select, we'll build a custom rating form field that lets users leave a star rating. We'll scaffold it with php artisan make:filament-form-field, hook it up with Livewire and Alpine using state and getStatePath(), and style the interactions with Tailwind.
    6. Redesign the Book Detail Page

      The default view page is fine to start, but we want a proper book detail screen. We'll reshape the Infolist with Section and Grid, add a custom Rating entry, include actions and reviews with RepeatableEntry, and clean up the title and heading so everything reads nicely.
  3. Polishing (4)
    1. Refine the Sidebar Navigation

      With the core functionality in place, it's time to make navigation feel intentional. We'll adjust sidebar width, labels, slugs, icons, and navigation groups in our panel providers, then add small touches like badges and dispatch('refresh-sidebar') to keep everything in sync.
    2. Style Filament with CSS Hooks

      Now we'll lean on Filament's CSS hooks and the Fi-* classes in the markup to style the app with confidence. We'll work from our theme file, inspect elements as we go, and use Tailwind @apply (plus a bit of custom CSS) to refine the sidebar, tables, and tabs.
    3. Build a Dashboard with Widgets

      Let's turn our blank dashboard into something useful with widgets powered by real reading stats. We'll start with a StatsOverviewWidget, then create custom Livewire widgets and a custom Dashboard page so we can control ordering, columns, and columnSpan.
    4. Customize the Login Page with Render Hooks

      We'll finish by giving the login screen a polished, on-brand look using Filament render hooks. We'll register a hook in AppServiceProvider, inject a bit of Blade, and load a dedicated login.css via @vite to style the page properly.

Continue Learning