kunstmaan/dashboard-bundle
Dashboard bundle for the Kunstmaan CMS on Symfony, adding a configurable admin dashboard with analytics, statistics and widget blocks that surface key site metrics at a glance. Small and low-activity; intended for existing Kunstmaan projects rather than standalone use.
Architecture fit. kunstmaan/dashboard-bundle is a Symfony bundle, not a framework-agnostic PHP library. Its entry point is a Bundle subclass with a DI extension, compiler passes, and Twig template overrides, all of which are meaningless to Laravel's service container, routing, or view layer. It is purpose-built as a plugin for KunstmaanCMS's admin area: dashboard pages, a widget registry (WidgetManager-style service), and widget classes rendered into the CMS admin layout. The only reusable asset is the domain pattern — a widget abstraction, a per-user dashboard layout store, and an analytics data adapter — not the code itself.
Integration feasibility. Effectively zero as a drop-in. The package was last released 2014-07-29, in the Symfony 2.x / PHP 5.4–7.0 era; its Composer constraints will hard-conflict with Laravel 10/11 on PHP 8.2+. Even if you forced resolution under a legacy stack, Laravel does not boot Symfony bundles, so nothing would register. Two viable paths exist:
Technical risk. High and largely non-technical in nature:
google/apiclient pin with known CVEs.Key questions for stakeholders.
Stack fit. Poor at the package level, good at the pattern level. Laravel already provides the primitives the bundle invented for Symfony: a container for widget registration, Blade components for rendering, Cache for API response buffering, Schedule for nightly analytics pulls, and authorization policies for per-role dashboards. Nothing is gained by importing the bundle; several things (DI extension, Twig overrides) are actively in the way.
Migration path.
| Layer | Bundle artifact | Laravel replacement |
|---|---|---|
| Widget contract | Symfony widget interface/abstract | DashboardWidget interface + registry bound as singleton |
| Rendering | Twig partials in bundle Resources/views |
Blade components / Livewire widget components |
| Layout persistence | Doctrine entity for user dashboard config | Eloquent model + JSON column |
| Analytics | Google Analytics v3 client | google/analytics-data (GA4) or Matomo Reporting API |
| Caching | Bundle cache service | Cache::remember + queued refresh job |
Compatibility. Assume PHP 5.x-era syntax ([] short arrays at best, no scalar type hints, no ??), Symfony 2 DI semantics, and a GA client library that no longer authenticates. Treat every file as reference source, not as copy-paste code: audit for deprecated crypto, hardcoded credentials patterns, and unsafe HTML interpolation before lifting anything. Do not add the Composer package to any lockfile — vendor-by-fork only if legal review insists on literal code reuse.
Sequencing.
Maintenance. The bundle itself is zero-maintenance because it is dead — there is no upgrade treadmill, no changelog to track, no CVE feed to monitor. The cost transfers entirely to whatever you build from it. Budget ownership explicitly: a ported dashboard is a small internal product, not a dependency.
Support. No vendor, no community (0 dependents, 4 stars), no issue triage. Any bug is yours. This should be stated plainly in the ADR so future maintainers don't assume upstream fixes are coming.
Scaling. The bundle's model is request-time rendering with synchronous external API calls — the classic failure pattern. In a Laravel port, move all analytics fetching to queued jobs writing into cache/dashboard_metrics tables, render from cache, and let widgets degrade to "last updated N hours ago" rather than blocking the admin page. This removes the Google API from the request path entirely and makes the dashboard scale with your queue workers, not your admin traffic.
Failure modes.
Ramp-up. Low for the framework layer — a mid-level Laravel developer reproduces the widget registry and layout persistence in days, and the bundle's code is small enough to read end-to-end in an afternoon. The real ramp-up cost is analytics domain knowledge (GA4 dimensions/metrics, quotas, property structure), which the bundle cannot supply because its implementation predates GA4. Plan for one developer to own that adapter, and treat the bundle purely as a UI/UX reference for what the original dashboards displayed.
How can I help you explore Laravel packages today?