Enable docs stack

After cloning template/, enable the docs-stack plugin set on the panel that owns the CMS resources. The template already ships Drive and the installer; this step adds SEO, Blog, Docs, Admin bar, and Content API (ADR 0008).

Composer

While developing, require each plugin from a path repository — the workstation plugins/<name> checkout or a copy inside the clone's packages/:

composer require qcentic-edge/filament-seo:@dev \
  qcentic-edge/filament-blog:@dev \
  qcentic-edge/filament-docs:@dev \
  qcentic-edge/filament-admin-bar:@dev \
  qcentic-edge/filament-content-api:@dev

Once remotes exist (Qcentic-Edge/filament-*), switch the path entries to vcs repositories and tag a version. The package names do not change.

Register in a PanelProvider

Add the plugins to the admin panel — the panel that owns the CMS resources:

->plugins([
    FilamentShieldPlugin::make(),
    MediaDrivePlugin::make(),
    FilamentSeoPlugin::make(),
    FilamentBlogPlugin::make(),
    FilamentDocsPlugin::make(),
    FilamentContentApiPlugin::make(),
    FilamentAdminBarPlugin::make(),
]);

FilamentContentApiPlugin belongs on the admin panel; it is optional on a second app panel and absent from the published template by default.

Then

  1. php artisan migrate — create the plugin tables (posts, docs tree, SEO morph, API keys, delivery log).
  2. Seed the Shield CMS matrix. The template seeds super_admin and user only; the clone adds editor and author with shrinking Shield permission rows — not just role names, or the Roles UI counts zero and RolePolicy 403s. Keep super_admin as the all-permissions role. Copy the RoleSeeder + ShieldPermissionMatrix pattern from experiments/agency-site/app/database/seeders/; do not push those roles into the template.
  3. Wire AdminBar::newItems(...) and AdminBar::editUsing(...) so the toolbar links to the clone's edit routes for the current Post / Doc.
  4. Add the public routes in the clone's routes/web.php: /, /docs, /blog, and /sitemap.xml. Render them with the clone's Blade (resources/views/site/*).

The matrix shrinks as: super_admin (all) > editor (everything except :Role, :User, and the counts chart; full :Post / :Doc / :Media plus View:*) > author (write-only on :Post, :Doc, and a subset of :Media) > user (View:ApiTokens only).

Content API and discovery

The Content API writes Posts and Docs because those resources sit on the panel. The plugin reads $panel->getResources() and exposes them as REST endpoints, API-key abilities, and webhook events automatically. There is no per-model ContentApi::resource() call for Post or Doc — only for models with no Filament resource.

Flow

flowchart TD
    A["Clone PanelProvider<br/>->plugins(...)"] --> B["migrate"]
    B --> C["seed Shield CMS matrix<br/>editor / author / user"]
    C --> D["public routes<br/>/ /docs /blog /sitemap.xml"]
    D --> E["product live"]

See also

Built by Qcentic