safi/filament-atelier
A visual page builder plugin for Filament. Developers define section blocks in PHP with a Blade view and a settings schema; clients assemble pages in a full-screen editor with a live, responsive iframe preview. Pages are stored as JSON and rendered server-side by Blade. Multi-language.
lang/dir, hreflang, per-locale SEO and noindex, with RTL font stack following dir not locale code, is unusually complete for a package this young. If internationalisation is on the roadmap, this converts a hard build into a config decision — and it derisks the RTL work most teams underestimate.lastmod and alternates, per-page noindex dropping pages from the sitemap, 301s on published slug renames, and a single JSON-LD graph with typed page schemas (nine types, FAQ from a block) are the items that typically surface late and slip launches. Having them native changes the launch checklist.->sitemap([...]) closures and @include("atelier::partials.schema") mean non-Atelier routes (blog, services) share the same organisation graph and sitemap rather than drifting. That's a real integration cost avoided — worth weighing in a build estimate.Consider it when most of these are true:
restoreRevision() exists; the screen doesn't).Look elsewhere when:
For executives — one paragraph. Atelier gives us a client-facing page builder without us building one: a full-screen editor with a true-to-production live preview, draft/publish separation so edits never touch the live site, per-language content and SEO, sitemap, redirects and structured data out of the box. Engineering defines the section library in code; the client composes pages from it. That keeps quality and brand consistency under our control while removing routine content tickets. It's MIT-licensed, has no page-builder dependency to inherit, and pages render as server-side Blade, so speed and SEO aren't traded away for editability. The honest caveat: it is a solo-maintained MVP — 34 stars, no downstream dependents, first release this month, and a published list of what isn't built (no header/footer blocks, no drag-reorder, no revisions screen). Recommendation: pilot on one internal or low-risk marketing site, budget one engineer for block authoring and gap-filling, and re-evaluate before making it the standard for client delivery.
For engineering — the technical case. A page is a JSON tree of typed blocks rendered by Blade at request time: Gutenberg's data model with Elementor's rendering approach, minus stored HTML and block validation chains. A block is one PHP class declaring key/label/icon/category plus a Filament schema, and one Blade view — registered via AtelierPlugin::make()->blocks(...) and it appears in the picker; no plugin internals are edited. supports() gives background and vertical spacing to every block for free. Design tokens are shared CSS custom properties between the editor preview and the public layout, so preview and production cannot drift. Publishing writes revision snapshots with restoreRevision(); preview links are signed and expiring; slug changes write 301s. The JSON-LD graph is built at render from data already entered (no second copy, no cache to clear) and can be extended into your own routes via atelier::partials.schema, with ->sitemap() accepting closures or invokable classes. Watch the operational detail: new tables ship as new migration files, so re-publish and migrate on every upgrade — skipping it surfaces as a "no such table" error at first use. Also point Tailwind at the package views; the install guide calls out three steps that fail silently if missed.
How can I help you explore Laravel packages today?