pvtl/voyager-page-blocks
A Laravel package that adds reusable page blocks to Voyager, letting you compose pages from modular content sections managed in the admin panel. Includes block types, page associations, and flexible rendering for faster, more maintainable site building.
Architecture fit. This package is a Voyager module, not a general-purpose Laravel content library. It augments Voyager's BREAD (Browse/Read/Edit/Add/Delete) admin model with a page_blocks content type plus a polymorphic-style association so reusable blocks can be attached to pages. Architecturally it is a sound fit only if the application already treats Voyager as its admin surface and Blade as its rendering layer. In a headless, API-first, or non-Voyager stack it is a non-starter: it contributes no standalone domain model, no REST/GraphQL surface, and no admin UI of its own. Treat it as a Voyager feature pack, not an integration dependency.
Integration feasibility. Installation is the standard Laravel package path — Composer require, service provider registration, publish config/migrations/assets, then php artisan migrate. That is a one-day job for a developer already fluent in Voyager. The real friction is not install, it is design: the package assumes a specific page/block content model, so the team must either adopt that model wholesale or write adapters and custom Blade partials. Documentation is thin (README-level), which shifts discovery cost onto the implementer. Expect 3–5 days to a working proof of concept on a Voyager host, not the 4 hours the install steps imply.
Technical risk. The headline risk is lifecycle: archived, last release July 2020. There will be no security patches, no PHP 8.x compatibility work, no Laravel 9/10/11 support, and no fixes for the deprecations that modern PHP emits (dynamic properties, null-to-string coercion in older helper code). It also inherits the lifecycle risk of Voyager itself, which is dormant relative to current Laravel. Secondary risks: supply-chain exposure through an orphaned Composer dependency; content lock-in to a schema nobody is maintaining; and a bus factor of essentially zero. At 75 stars this is a niche package with no meaningful community to fall back on.
Verdict. Adopt only as a vendored, forked dependency inside an existing Voyager codebase where the alternative is rebuilding block content from scratch. Do not introduce Voyager and this package into a greenfield or modern-Laravel application.
Key questions to resolve before commitment:
Stack fit. Laravel + Voyager + Blade. That is the whole addressable surface. If the stack includes Livewire, Inertia, a separate SPA, or a headless CMS already, this package either duplicates functionality or cannot participate. Confirm stack fit first; everything downstream depends on that single yes/no.
Migration path. Three scenarios:
Compatibility. Assume a PHP 7.2–7.4 and Laravel 5.8–8 envelope as shipped. Expect breakage on PHP 8.1+ from deprecations and on Laravel 9+ from framework contract changes (service provider signatures, model casting behavior, pagination/Blade internals). Verify by actually running composer require against a pinned target before any planning estimates are socialized.
Sequencing.
Maintenance. The package is archived, so maintenance is entirely ours. That means a standing ownership commitment: dependency bumps, PHP/Laravel upgrade compatibility, security triage for the admin-facing surface, and bug fixes discovered in production. Realistically 2–5 engineer-days per year in steady state, and materially more at each framework upgrade. This must be an explicit line item, not an implicit hope.
Support. No vendor, no maintainer, no active issue tracker. Internal documentation is the only support artifact — write it during integration, while the knowledge exists. Identify at least two engineers who can operate the module; a single owner is an unacceptable concentration for a content-critical path.
Scaling. The block model implies per-page queries for blocks plus per-block rendering, which is an N+1 pattern waiting to happen on page render. For a marketing site or internal portal this is fine with response caching and eager loading. For high-traffic or personalized content it will not hold; you would need a render cache or a materialized page output. The admin side (Voyager) is not designed for large content volumes — expect slow BREAD screens past a few thousand records. Assess against the actual content ceiling before committing.
Failure modes.
Ramp-up. A Laravel developer new to Voyager needs roughly 1–2 weeks to become productive across BREAD, widgets, and this module's block model; someone already fluent in Voyager needs 1–2 days. Document the block schema, the rendering partials, and the fork/patch process during integration. Factor ramp-up into the support plan — with no upstream documentation, onboarding cost recurs with every new team member.
Overall. Low strategic value, non-trivial ownership cost. Justified only inside an existing Voyager estate where the alternative is a rebuild, and only with a named owner, a fork, and CI.
How can I help you explore Laravel packages today?