graham-campbell/bootstrap-cms
Bootstrap CMS is a full-featured content management system for Laravel, built on Bootstrap. It provides pages, blog posts, events, user and permission management, and a responsive admin area, giving you a ready-made CMS foundation for your Laravel applications.
Architecture fit. The critical framing for a TPM is that graham-campbell/bootstrap-cms is not a library we add to a service — it is a complete Laravel 5 application skeleton (repo BootstrapCMS/CMS). There is no composer require seam, no service provider to register, no headless API, and no composable module boundary that lets us consume "just the blog" or "just the ACL." Adopting it means adopting its routing, schema, admin panel, theming layer, and release cadence wholesale. The TPM question therefore is not "should we take this dependency?" but "should this become the application?" — a platform-level decision with platform-level governance. As an artifact, the package behaves more like a reference implementation than a runtime component.
The stack profile is Laravel 5.0/5.1 on PHP 5.x/7.0, Cartalyst Sentry for auth and ACL, Twig via TwigBridge for public templating, Blade for admin views, Bootstrap 3 on the front end, plus a cluster of graham-campbell/* helpers and Intervention Image. The feature surface is genuine commodity CMS scope: pages, blog, events, users, groups, permissions, settings, redirects, navigation, uploads. That value is real, but it is fused to a foundation with no upstream support.
Integration feasibility. Low as a runtime dependency, moderate as a reference. Composer constraints pin PHP to roughly 5.4–7.0 and Laravel to 5.0/5.1; a modern PHP 8.1+ build image fails dependency resolution outright. That is a hard stop, not a soft warning — it should surface in a one-week discovery spike, not in week six of a delivery plan. Integration into an existing Laravel platform is effectively zero-fit against a current LTS standard.
Technical risk. Every layer is simultaneously end-of-life:
| Component | Status | TPM-relevant consequence |
|---|---|---|
| Laravel 5.0/5.1 | EOL since 2016 | Unpatched framework CVEs; no upstream to escalate to |
| PHP 5.x / 7.0 | EOL 2018/2019 | Interpreter exposure no app hardening fully mitigates |
| Cartalyst Sentry | Abandoned (superseded by Sentinel) | Auth/ACL is highest blast-radius and unmaintained |
| Twig 1.x / TwigBridge | EOL | Template CVEs; sandbox risk if themes are editable |
| Bootstrap 3 | EOL | Front-end and accessibility debt |
The aggregation is the risk, not any single row — there is no vendor to call on any incident. Zero stars and zero dependents further signal no ecosystem validation and no downstream bug-fixing. The opportunity score of 6.59 is not supported by this posture; it reflects borrowable feature scope, not adoptable risk.
Key questions a TPM must force answers to before commitment.
spatie/laravel-permission without data loss?Stack fit. Fits only a Laravel shop comfortable with Twig-over-Blade and a server-rendered Bootstrap front end, and only on legacy PHP. It does not fit Laravel 10/11, API-first or headless requirements, SPA front ends, or container-native 12-factor standards without substantial rework. Against a current Laravel LTS platform standard, fit is effectively zero.
Decision framing for stakeholders. I would present two viable options and one non-option:
spatie/laravel-permission, TwigBridge with Blade, Bootstrap 3 with 5, then step Laravel 5.0 → 5.5 → current LTS. This is realistically a rebuild of the glue layer preserving schema and domain logic — scope it as a rebuild, because the arithmetic converges on the cost of building fresh with materially worse risk.Compatibility and migration realities. Password hashes are bcrypt and portable with rehash-on-login, so a user migration off Sentry is tractable. Sentry's groups, permissions, and throttles tables require a genuine mapping exercise into a modern ACL model — budget real time, this is the schedule driver. Note also the split rendering stack: admin is Blade, public site is Twig, so UI work spans two templating mental models. Composer 2 can still resolve many 2015-era packages, but abandoned constraints generate constant noise; expect to pin and ignore permanently.
Sequencing. Time-boxed discovery spike (one week) → build-vs-fork decision with a costed estimate → schema and domain extraction → auth replacement first (highest risk, do it early) → framework upgrade → theming/UI parity → feature gap closure. Do not start with UI; auth migration is the critical path and must be de-risked before any cosmetic work.
Gate criteria. No production commitment without a dependency audit, a security review of the auth and template layers, a named owner for the fork or an explicit "no fork" decision, and a written exit/sunset plan recorded in the decision log.
Maintenance. We inherit 100% of patching responsibility across framework, interpreter, auth, and templating. This is a standing security-triage allocation, not a one-off remediation budget, and it belongs in roadmap capacity rather than the initial estimate. Every future dependency bump is a manual, high-touch exercise with no upstream to lean on; abandoned constraints mean constant pinning and ignoring.
Support. No vendor, no active maintainer, negligible community. Internal runbooks and architecture decision records are mandatory, otherwise institutional knowledge leaves with the original engineer. For a TPM this is a bus-factor risk tracked explicitly alongside delivery milestones, not a footnote.
Scaling. Not the blocker — it is a conventional PHP-FPM monolith and scales horizontally like any Laravel app. Two caveats to flag early: Sentry's throttling table adds write amplification on the auth path, and uploads default to local disk. Both need rework (central cache such as Redis, object storage) before meaningful traffic, and neither is in the package's defaults.
Failure modes for the risk register. Dependency resolution failure on a clean rebuild (most likely, and it surfaces at the worst possible moment); unpatched auth vulnerabilities; schema drift between our migrations and Sentry's expectations; stored XSS or template injection where themes or page content permit raw Twig/HTML; file-upload bypass through stale image-handling libraries; interpreter-level exposure from EOL PHP. Each needs a named owner and a mitigation or an explicit, signed acceptance.
Ramp-up. Engineers who worked in Laravel 5 will be productive in days and can clone the Pages/Blog CRUD module as the template for new features. Newer hires will find Twig plus Sentry plus Bootstrap 3 a foreign, poorly documented stack and a two-templating-system split — a hiring and retention liability that compounds every year the fork lives. Plan onboarding time accordingly and avoid making this a system-of-record touchpoint for new team members.
Bottom line for the product decision. This supports a "borrow first" decision for non-differentiating admin and CMS capability, and can accelerate a simple CMS/admin MVP or demo by weeks when Laravel 5 is already acceptable. It does not support a strategic platform decision. Executives should hear it as: time-boxed accelerator or legacy bridge, approved with explicit exit criteria and a sunset date — never as the foundation for a public-facing, regulated, or long-lived product. If the business genuinely needs a CMS on the roadmap, budget a build on a current Laravel LTS; the migration arithmetic shows the reuse path converging on the same cost with materially worse risk.
How can I help you explore Laravel packages today?