muazzambuilds/filament-white-label
White-label your Filament admin panel with this Laravel package. Quickly customize the panel name, logo, favicon, colors, login page, and assets, hide Filament branding and references, and give clients a polished, fully branded backend experience without editing core files.
Install the package into a Filament v5 application:
composer require muazzambuilds/filament-white-label
Then publish and run any migrations the package ships, and create the public storage link if you will upload logos/favicons:
php artisan vendor:publish --tag="filament-white-label-migrations" # confirm the exact tag in the package source/README
php artisan migrate
php artisan storage:link
Register the package’s plugin or settings page in each PanelProvider you want to white-label. The exact plugin class is in the package source; registration follows normal Filament v5 plugin conventions. Do this per panel—do not assume one registration covers every panel.
Your first useful workflow should be “brand a client panel without a deploy”:
Where to look first: the package README, the plugin/settings page class, the migration that creates the settings table, and any config file. Because the public documentation is thin, the source is the source of truth for exact class names, table columns, publish tags, and tenant-resolution behavior.
Treat branding as data, not code. The main value is letting an admin change brand name, logos, colors, fonts, footer, and CSS from the panel. Use that for client-specific branding instead of hard-coding values in PanelProvider or Blade. Reserve code changes for structural layout changes the package does not expose.
Panel defaults first, tenant overrides second. For a multi-tenant SaaS, configure sensible panel-level defaults and use per-tenant rows only where tenants actually need distinct branding. This avoids a large settings table and makes fallback behavior predictable when a tenant has no row yet.
Use one panel per client when isolation matters. If you run separate admin panels per client, register the plugin in each panel and configure each panel independently. This is simpler than tenant overrides and keeps settings, assets, and access control separated.
Use tenant overrides when one panel serves many tenants. Enable Filament tenancy, ensure the tenant context is resolved before the panel renders, and configure branding from the tenant’s settings page or tenant menu. Test what happens when the tenant switches, when a tenant row is missing, and when a tenant is deleted.
Map colors deliberately. Set primary to the brand color, then choose gray/danger/warning/success/info so they remain readable against the panel background. Check buttons, badges, links, charts, disabled states, and dark mode. A brand color that looks good in a logo may fail contrast as a button background.
Keep font choices constrained. Bunny Fonts is convenient and the live preview helps non-developers choose, but confirm the chosen font has the weights you use. Provide a fallback stack and test with the font blocked or offline—especially if your CSP or privacy requirements prevent third-party font loading.
Use custom CSS as a last-mile tool. The package sanitizes CSS, so use it for small adjustments: spacing, footer styling, minor border radius, or a panel-specific accent. For deep component changes, use Filament’s theme build or view overrides instead of fighting the sanitizer with large CSS blocks.
Scope CSS to the panel. Avoid global selectors and excessive !important. Target Filament’s panel body class or stable component classes. Keep a copy of production CSS snippets in your repo or runbook so you can restore them if a settings row is lost.
Handle logo and favicon assets like production assets. Upload reasonably sized SVG/PNG files, set logo height explicitly, and verify the generated URL works from the browser. If you use S3 or a non-default disk, confirm the package reads from the disk you expect. Favicons are aggressively cached—test in a private window after changing one.
Restrict who can edit settings. The package provides the settings surface, but you should still gate it with Filament policies or role checks. In tenant panels, tenant admins may edit their own branding, but platform staff should control defaults and dangerous fields like custom CSS.
Seed defaults for repeatable environments. For new panels or tenants, create a small seeder/service that writes default branding. This keeps staging and production consistent and avoids “someone configured it manually” drift.
Test the failure modes. Verify: missing logo, broken logo URL, font blocked by CSP, invalid color, empty footer, tenant without settings, tenant switch, dark mode, and a fresh panel with no settings row. The package advertises safety guards—confirm what “safe” looks like in your panel rather than assuming.
storage:link, disk configuration, file permissions, and whether the panel is generating URLs from the expected disk.@import, remote url(), JavaScript, and some advanced CSS to be removed or rejected. If your custom CSS “does nothing,” inspect the saved value and the rendered output before assuming the selector is wrong.How can I help you explore Laravel packages today?