Saving
Click the Filament Save button to persist your page. On every save:
- Content is validated structurally (rows have columns, columns have widgets, widgets have types)
- Widget-level validation runs (e.g., buttons need a label and URL)
- If revisions are enabled, a revision snapshot is created automatically
- If safelist auto-sync is enabled, the Tailwind safelist file is regenerated
Validation warnings are logged but do not block the save. This lets editors save work in progress without losing data.
Publishing
Set the Status field to published to make the page live. Draft pages are only visible in the admin panel.
Frontend routes
When frontend.enabled is true in config/layup.php (the default), published pages are served at:
/{prefix}/{slug}
The default prefix is pages, so a page with slug about-us would be at /pages/about-us.
Configure the prefix, middleware, domain, layout, and view in the frontend section of the config:
'frontend' => [
'enabled' => true,
'prefix' => 'pages',
'middleware' => ['web'],
'domain' => null,
'layout' => 'app',
'view' => 'layup::frontend.page',
'max_width' => 'container',
'include_scripts' => true,
'excluded_paths' => [],
],
SEO metadata
Each page supports meta fields stored in the meta JSON column:
title-- overrides the page title for<title>tagdescription-- meta description (160 character limit in the form)keywords-- meta keywords
The frontend view receives $page and $meta variables. The Page model provides helper methods:
$page->getMetaTitle(); // Falls back to page title
$page->getMetaDescription();
$page->getMetaKeywords();
$page->getMetaTags(); // Array of all meta tags
$page->getStructuredData(); // JSON-LD (WebPage, Article, FAQPage, BreadcrumbList)
Structured data
Set meta.schema_type to control the JSON-LD type:
WebPage(default)ArticleorBlogPosting(includes author ifmeta.authoris set)FAQPage(auto-extracts questions from Accordion and Toggle widgets)
Breadcrumb structured data is generated automatically from the page slug.
Duplicating pages
In the page list, use the Duplicate action to create a draft copy with a randomized slug. This is useful for creating variations of existing pages.
Exporting and importing
Export a page to JSON:
php artisan layup:export --slug=about-us
Import from a JSON file:
php artisan layup:import path/to/page.json
Contributors
Thank you to everyone who has contributed to this package. Every pull request, bug report, and idea makes a difference.