The bundled `Crumbls\Layup\Models\Page` works for most installations. Swap it when you need:

- A custom table name
- Per-panel page tables (multi-dashboard setups)
- Additional columns beyond what Layup ships with
- Custom scopes, accessors, or relationships
- Different soft-delete or auditing behavior

## Configure the swap

Set `pages.model` in `config/layup.php` to your subclass:

```php
// config/layup.php
'pages' => [
    'model' => \App\Models\MarketingPage::class,
    'table' => 'marketing_pages',
],
```

Layup uses this class everywhere it touches the page model -- the Filament resource, frontend routes, the revision system, the safelist auto-sync hook, and scheduled publishing.

## Extend the bundled model

Subclass `Crumbls\Layup\Models\Page` and override only what you need. The base model handles JSON casting, revision auto-save, scheduled publishing, and slug generation -- you inherit all of that.

```php
namespace App\Models;

use Crumbls\Layup\Models\Page as BasePage;

class MarketingPage extends BasePage
{
    protected $table = 'marketing_pages';

    public function campaign()
    {
        return $this->belongsTo(Campaign::class);
    }
}
```

You will also need a migration to create the table. The simplest path is to publish Layup's migrations and adapt them, or write your own using the `layup_pages` schema as a reference.

## Multi-dashboard pattern

Two Filament panels, two completely separate page tables:

```php
// config/layup.php
'pages' => [
    // The "default" model -- used when no override is active.
    'model' => \App\Models\MarketingPage::class,
    'table' => 'marketing_pages',
],
```

Then, in each panel provider, ensure you publish a separate config or override the model registration if your panels run in the same process and you need different models per panel. For most setups, two distinct deployments (each with its own `config/layup.php`) is the cleaner pattern.

## When to use a fully custom model instead

If your "page" concept is very different from Layup's -- say, your model is `Article` with a publishing workflow that is unrelated to Layup's `published_at` semantics -- do not try to subclass `Page`. Use [Embedding the field](../embedding-the-field.md) instead, paired with [Disable the Pages resource](disable-pages-resource.md). You get the editor without inheriting Layup's CMS opinions.

---

## Documentation

- [Introduction](https://documentation.crumbls.com/layup/-/index.md)
- [Introduction](https://documentation.crumbls.com/layup/-/introduction.md)
- [v1](https://documentation.crumbls.com/layup/-/_index.md)
- [Installation](https://documentation.crumbls.com/layup/-/installation.md)
- [Contributing to Layup](https://documentation.crumbls.com/layup/-/CONTRIBUTING.md)
- [Usage](https://documentation.crumbls.com/layup/-/usage.md)
- [Configuration](https://documentation.crumbls.com/layup/-/configuration.md)
- [Examples](https://documentation.crumbls.com/layup/-/examples.md)
- [Grid System](https://documentation.crumbls.com/layup/-/grid-system.md)
- [Field-only Installation](https://documentation.crumbls.com/layup/-/field-only-installation.md)
- [Embedding the Field](https://documentation.crumbls.com/layup/-/embedding-the-field.md)
- [Widgets](https://documentation.crumbls.com/layup/-/widgets/_index.md)
- [Getting Started](https://documentation.crumbls.com/layup/-/getting-started/_index.md)
- [Customization](https://documentation.crumbls.com/layup/-/customization/_index.md)
- [API Reference](https://documentation.crumbls.com/layup/-/api-reference/_index.md)
- [Upgrade guide](https://documentation.crumbls.com/layup/-/upgrade-guide.md)
- [Troubleshooting](https://documentation.crumbls.com/layup/-/troubleshooting.md)
- [Changelog](https://documentation.crumbls.com/layup/-/CHANGELOG.md)
- [🔐 Security Policy](https://documentation.crumbls.com/layup/-/SECURITY.md)
- [The MIT License (MIT)](https://documentation.crumbls.com/layup/-/LICENSE.md)
- [Layup Widget Development Guide for AI Agents](https://documentation.crumbls.com/layup/-/AGENTS.md)
- [Layup — Sprint TODO (overnight Feb 23-24)](https://documentation.crumbls.com/layup/-/TODO.md)
- [Vision](https://documentation.crumbls.com/layup/-/VISION.md)
- [Content Widgets](https://documentation.crumbls.com/layup/-/widgets/content.md)
- [Media Widgets](https://documentation.crumbls.com/layup/-/widgets/media.md)
- [Interactive Widgets](https://documentation.crumbls.com/layup/-/widgets/interactive.md)
- [Layout Widgets](https://documentation.crumbls.com/layup/-/widgets/layout.md)
- [Advanced Widgets](https://documentation.crumbls.com/layup/-/widgets/advanced.md)
- [Creating Pages](https://documentation.crumbls.com/layup/-/getting-started/creating-pages.md)
- [Adding Widgets](https://documentation.crumbls.com/layup/-/getting-started/adding-widgets.md)
- [Saving and Publishing](https://documentation.crumbls.com/layup/-/getting-started/publishing.md)
- [Disable the Pages Resource](https://documentation.crumbls.com/layup/-/customization/disable-pages-resource.md)
- [Rendering Content](https://documentation.crumbls.com/layup/-/customization/rendering-content.md)
- [Frontend Rendering](https://documentation.crumbls.com/layup/-/customization/frontend-rendering.md)
- [Creating Custom Widgets](https://documentation.crumbls.com/layup/-/customization/custom-widgets.md)
- [Extending Existing Widgets](https://documentation.crumbls.com/layup/-/customization/extending-widgets.md)
- [Livewire-rendered widgets](https://documentation.crumbls.com/layup/-/customization/livewire-widgets.md)
- [Filament Plugin API](https://documentation.crumbls.com/layup/-/customization/filament-plugin-api.md)
- [Theme System](https://documentation.crumbls.com/layup/-/customization/theme-system.md)
- [Tailwind Safelist](https://documentation.crumbls.com/layup/-/customization/tailwind-safelist.md)
- [SEO Meta](https://documentation.crumbls.com/layup/-/customization/seo-meta.md)
- [Page Templates](https://documentation.crumbls.com/layup/-/customization/page-templates.md)
- [Revision History](https://documentation.crumbls.com/layup/-/customization/revision-history.md)
- [Testing](https://documentation.crumbls.com/layup/-/customization/testing.md)
- [Widget Contract](https://documentation.crumbls.com/layup/-/api-reference/widget-contract.md)
- [Models](https://documentation.crumbls.com/layup/-/api-reference/models.md)
- [Service Provider](https://documentation.crumbls.com/layup/-/api-reference/service-provider.md)
- [Support Classes](https://documentation.crumbls.com/layup/-/api-reference/support-classes.md)
- [Commands](https://documentation.crumbls.com/layup/-/api-reference/commands.md)
