Appearance
Blog
Notes from building FilamentCraft: how a feature works under the hood, the trade-offs behind it, and what shipped in each release. Subscribe with RSS.

Livewire "Unable to find component" in a package component
Why a Livewire component from a package renders fine and then fails with "Unable to find component" on its first click, and the one-line registration fix.

Livewire Wireable: keep a value object across requests
How to make a custom PHP object survive Livewire requests with Wireable, what to send over the wire, and how FilamentCraft rebuilds section data on each click.

Why overflow hidden is not clipping an absolute child
overflow: hidden and overflow: auto skip absolutely positioned children whose containing block sits higher up. The CSS rule, our double scrollbar and the fix.

A responsive toolbar with CSS container queries, no JavaScript
How we rebuilt the FilamentCraft editor topbar as a responsive toolbar with CSS container queries: priority tiers, a More menu and no resize observers.

Laravel "This cache store does not support tagging", handled
Why Laravel throws "This cache store does not support tagging" on file and database stores, and how a package can probe for tags and fall back instead.

A Livewire full page component layout that matches your site
Give Livewire full page components the same header, footer, fonts and theme as your visually built pages, using one attribute or one route macro.

A Filament media library scoped to each site, not each tenant
How FilamentCraft's Filament media library keeps images per site, fills itself from section uploads, and survives Filament's image editor without duplicates.

A Laravel OpenStreetMap map with no API key, drawn in PHP
How FilamentCraft renders a Laravel OpenStreetMap map with no API key: server-side Web Mercator math, percentage tiles that work without JavaScript, and tile policy.

Livewire multiple root elements: the version that never throws
Livewire multiple root elements usually throw, but a Blade @if above the root can leave a component rendered and inert with no error. Why, and how to catch it.

Livewire wire:navigate dark mode, lost on every page hop
Why a Livewire wire:navigate dark mode toggle resets to light after one click, and the small idempotent restore script that fixed it in FilamentCraft.

Why a Filament select dropdown gets cut off
A Filament select dropdown gets cut off when an ancestor clips overflow, because the option panel renders inside the input wrapper. Here is how we fixed ours.

The best CMS for Filament depends on who edits the pages
An honest guide to the best CMS for Filament: the Builder field, Filament Fabricator, a headless CMS or FilamentCraft, and when each one is wrong.

Filament custom page builder blocks, built step by step
Build a custom FilamentCraft section from scratch: scaffold it, declare settings and blocks, write the Blade view, add presets, register it and test it.

Build a Filament multilingual website with Arabic RTL
A step-by-step tutorial for a Filament multilingual website with RTL Arabic: site locales, per-locale content, hreflang tags and a visitor language switcher.

A Filament page builder with live preview and revisions
What the FilamentCraft editor adds to a Filament panel, how its live iframe preview, revisions and undo work, and how to install it in four commands.

A Filament theme editor for public websites
How FilamentCraft lets editors restyle a public site from a Filament panel with color schemes, a font picker, custom fonts and a visitor dark mode toggle.

Laravel CMS SEO: llms.txt, sitemaps and AI crawler rules
How FilamentCraft handles Laravel CMS SEO and llms.txt for Filament-built pages, from SERP previews and canonicals to sitemaps, robots.txt and IndexNow.

A Laravel ecommerce storefront builder on Filament
Build a Laravel ecommerce storefront with Filament and FilamentCraft over your own Eloquent product tables, with one template serving every product URL.

A Laravel multi-tenant website builder without a tenancy package
How FilamentCraft gives every tenant its own site using a polymorphic owner, two resolvers and host matching, with no tenancy package to install.

Livewire wire:model losing keystrokes, and how we fixed it
Why a debounced Livewire call erased characters typed while its request was in flight, the wire:model.unintrusive.blur fix, and the regression it caused.

A no-code section builder for Laravel and Filament sites
How the FilamentCraft no-code section builder for Laravel lets editors compose, style and publish their own sections, and what keeps it safe.
