Clone from template

A new product starts from a clone of template/. The clone is a working application the moment it boots — admin and app panels, Filament Shield, Media Drive, Passport, the first-run installer, and Reverb are already wired. From there the clone adds brand, public HTML, and CMS roles; the CMS itself comes from the docs-stack plugins, required through Composer.

What the clone owns

Per ADR 0006 and ADR 0008, the clone — not the template, not the plugins — owns everything a customer sees that is specific to this product:

  • Brand — logo, panel colors, APP_NAME, mail from-name, HTML titles
  • Public HTMLresources/views/site/*, CSS, the landing/docs/blog chrome
  • Business names — copy, footer, header links, public menu text
  • Public routesroutes/web.php plus PublicPageController (/, /docs, /blog, /sitemap.xml)
  • CMS Shield roles — the editor / author matrix in the clone's RoleSeeder
  • Optional Subscriber model — newsletter v1, not a plugin yet

What the clone does NOT own

CMS tables and Filament resources live in the plugins. Do not copy a plugin's migrations or resource classes into the clone. Require the plugin through Composer and let it register its own resources on the panel. A clone that duplicates posts, docs, or their resources has forked the CMS — the exact failure mode ADR 0008 exists to prevent.

Steps

# 1. Clone the published template
git clone https://github.com/Qcentic-Edge/qcentic-edge-template my-product
cd my-product

# 2. Copy the dev env file and fill in APP_KEY
cp .env.docker.dev.example .env.docker.dev

# 3. Bring the stack up (sqld, MinIO, Vite, Reverb)
docker compose -f docker-compose.dev.yml --env-file .env.docker.dev up -d

# 4. First-run installer — migrate, seed, first super_admin
#    open http://localhost:8090/install

Then require the docs-stack plugins, migrate, and seed the CMS role matrix:

docker compose -f docker-compose.dev.yml --env-file .env.docker.dev exec app \
  composer require qcentic-edge/filament-seo qcentic-edge/filament-blog \
    qcentic-edge/filament-docs qcentic-edge/filament-admin-bar

docker compose -f docker-compose.dev.yml --env-file .env.docker.dev exec app php artisan migrate
docker compose -f docker-compose.dev.yml --env-file .env.docker.dev exec app php artisan db:seed --class=RoleSeeder

Wire the plugins in the panel provider, add the public routes, and render them with the clone's Blade. The full plugin list and ->plugin() block are on Enable docs stack; the route/controller shape is on Public HTML recipe.

Flow

flowchart LR
  A[template<br/>substrate] --> B[clone]
  B --> C[+brand<br/>+Blade<br/>+routes<br/>+roles]
  C --> D[product]
  B -.require.-> E[docs-stack plugins]
  E --> D

The substrate evolves in template/; the product look lives only in the clone; the plugins supply the CMS. Three repos, three concerns.

See also

Built by Qcentic