capell-app/content-sections
A Laravel package from Capell for creating and managing reusable content sections across your application. Define structured content blocks once, then render them anywhere to keep layouts consistent and content easily editable through the CMS.
Architecture fit. capell-app/content-sections is a section-registry layer for the Capell CMS: each section type is a PHP class carrying a typed field schema plus a Blade view, registered through config/content-sections.php, and pages are composed from ordered section records with a JSON data payload. From a product-architecture standpoint this is the correct shape for the problem — it is the "blocks" primitive (a blocks JSON column plus a stable set of Blade components) that we would otherwise hand-roll. The registry pattern means section types are additive: new content capabilities arrive as new classes and views, not as schema migrations. That is a real roadmap lever, because it converts "marketing wants a new page variant" from an engineering ticket into a section-type definition plus a template.
Integration feasibility. Composer-installable, publishable migrations and config, Blade rendering, and a Filament-facing admin surface. The critical constraint is that this is not a standalone package: it is an add-on to capell-app/capell and assumes the core CMS is installed and bootstrapped. The honest framing for the evaluation is that we are not adopting a section package, we are adopting the Capell CMS content stack — the sections package is the part we actually care about, but the dependency surface we inherit is larger than it appears from the repo. Feasibility is therefore gated on a prior decision: is Capell already our CMS, or is this package pulling it in?
Technical risk. Bounded but real, concentrated in supply, not in code.
Key questions to resolve before committing:
Stack fit. Laravel + Filament + Blade, which matches a conventional Laravel application and matches Capell's own admin conventions. Section editing wires into the page resource as a Filament relation manager or repeater against the package's section model, driven by the config-registered type list so new types surface automatically. Presentation stays in the section's Blade view; structured data only in storage. This is the right separation and keeps content portable and testable.
Migration path. Two phases, deliberately separated.
Compatibility. Pin with a caret or tilde constraint (^1.0 / ~1.0) — do not float. Because patch releases ship without changelog bodies, adopt a gate: read the compare diff before bumping a production pin. Keep custom section types in application-level config rather than editing vendor config, and diff before re-publishing migrations or config on upgrade — publishing is one-way and will overwrite local customizations. Treat php artisan config:clear (or config:cache in deploy) as a mandatory deploy step; cached config hiding newly registered types is the single most common failure.
Sequencing.
Do not begin backfill before step 5 succeeds — an unsettled taxonomy produces rework across every converted page.
Maintenance. We own version pinning, pre-upgrade diff review, and the fork decision. The recurring cost is small but nonzero: a diff review per patch bump (frequent, unannotated), a deploy step for config caching, and discipline around not editing vendor files. Assign a named owner for the content layer — an unowned single-maintainer dependency is where this goes wrong quietly.
Support. No vendor, no SLA, no security review process. Support is internal by definition. Document a fork-and-replace path now, while the surface is small, and state the trigger for executing it (maintainer inactivity beyond N months, or a breaking change we cannot absorb). Content exportability keeps the downside bounded: JSON payloads plus our own Blade views are recoverable without the package.
Scaling. Sections are per-page rows with JSON payloads, so page render cost scales with section count. The realistic risks are query patterns (loading a page's sections without eager-loading nested data) and render cost on long pages. Both are addressable with standard Laravel caching and eager loading. This is not a high-throughput path — content pages, not API endpoints — so scaling is a tuning concern, not an architectural ceiling.
Failure modes to instrument for:
config:clear in every deploy; add a health check that asserts registered type count.Ramp-up. Developers need familiarity with the registry-plus-Blade pattern — a day, not a sprint, for anyone with Laravel experience. Editors need training on the available section types and the guardrails around them, and that training is ongoing: every new type is a new editorial capability that needs a documented intent and a usage example. Content ops, not engineering, should own the section catalog and its documentation.
Recommendation for the review. Adopt conditionally, as a content-layer dependency inside a Capell-based stack, pinned to ~1.0 with a diff-review gate. The value is editorial autonomy and fewer one-off page tickets; the cost is a small-vendor dependency we can exit cheaply because the surface is narrow and the data is portable. Do not represent v1.0.51 as a feature or milestone — it is a maintenance patch with unverified change content, evidence of an active cadence and nothing more. If Capell is not otherwise part of the stack, stop here and re-scope: the sections package is not worth introducing the CMS for.
How can I help you explore Laravel packages today?