Product Decisions This Supports
- Embedding product analytics where the team already works. The package puts Umami sessions, events and tabular breakdowns directly into Filament panels, so PMs can decide to surface acquisition/engagement metrics inside the admin rather than sending stakeholders to a separate analytics tool. This supports roadmap and feature-investment reviews with data in-context.
- Build vs. buy for internal dashboards. Because the plugin handles authentication, caching, polling, chart rendering, date normalisation and failure states, the build-vs-buy comparison shifts toward “buy/adopt” for teams already on Filament + Umami. The 2.1.0 release specifically removes the hidden cost of building resilience yourself: slow/unreachable Umami, malformed responses, missing keys and shared cache stores are now handled.
- Self-hosted analytics strategy. The fixes around self-hosted Umami being down at login, per-server/per-website cache scoping, and credential error clarity make this viable for teams running their own Umami instance — relevant to privacy/GDPR-driven decisions to avoid third-party analytics SaaS.
- Multi-site and shared-platform architecture. Cache keys are now scoped per Umami server and website, so a single Laravel app (or shared cache store) can safely serve multiple brands, websites or environments. That enables platform-level decisions rather than one-off per-site dashboards.
- Accessibility and inclusivity commitments. Colour-blind-safe Okabe-Ito event colours and corrected screen-reader labels (
fi-sr-only, translated) support public accessibility standards or internal DEI/accessibility policies. Low effort, visible compliance win.
- Upgrade timing and platform lifecycle. Laravel 11 is no longer supported due to open security advisories; Laravel 12 and 13 are supported. This informs the platform upgrade roadmap: teams still on Laravel 11 must either stay on an older plugin release or prioritise the Laravel upgrade.
- Operational reliability / support-cost decisions. Failures are no longer cached and widgets degrade to empty values instead of breaking. That reduces “dashboard is broken” escalations and makes the plugin safe to expose to non-technical stakeholders.
When to Consider This Package
Consider adoption when:
- The application uses Filament 4 or 5 and Laravel 12 or 13 (Laravel 11 is explicitly unsupported in 2.1.0).
- The organisation uses Umami — cloud or self-hosted — as its product/marketing analytics source, and wants those metrics inside the admin panel rather than a separate tool.
- You need multiple Umami servers or websites in one app, or share a cache store across apps; 2.1.0 scopes cache keys and login tokens per server/website.
- You want low-maintenance dashboard widgets: polling intervals, caching, empty-state fallbacks and credential error handling are already implemented.
- You have accessibility requirements for internal tooling; the release improves screen-reader labels and uses a colour-blind-safe palette.
- You value maintenance rigour as a selection criterion: strict types everywhere, PHPStan at max level with no baseline, architecture tests and 18 new failure-path tests reduce long-term fork/maintenance risk.
- You may have published the package views — note that you must republish them to pick up the
fi-sr-only fix, otherwise hidden labels render as visible text.
Look elsewhere when:
- You are on Laravel 10/11 and cannot upgrade soon; Composer will block this release anyway due to security advisories.
- You are not using Filament — the value is almost entirely in Filament widgets, panel plugin registration and polling integration.
- You need full analytics product capabilities (funnels, cohorts, retention, session replay, warehouse-level querying); this is a dashboard surface over Umami’s API, not an analytics platform.
- You require real-time or high-frequency streaming data; polling and caching are deliberately coarse.
- You need write-side analytics instrumentation; this package reads from Umami and does not replace event tracking.
- Your dashboards are public-facing or multi-tenant with per-tenant Umami credentials at scale — the per-server/website scoping helps, but validate the credential and cache model against your tenancy design.
How to Pitch It (Stakeholders)
For executives: This is a maintenance and hardening release of our Filament/Umami analytics integration. There are no new features to sell and, importantly, no code changes required on our side. What it buys us is reliability and reduced support load: analytics widgets now fail gracefully — showing empty values rather than breaking a dashboard — and recover automatically when Umami comes back. It also closes an accessibility gap in the dashboard UI and tightens security by dropping Laravel 11, which Composer already blocks due to open advisories. Net: lower operational risk, better accessibility compliance, no migration cost.
For engineering: 2.1.0 is a robustness, accessibility and maintenance release. Bug fixes cover session/page-view confusion, dropped event days, duplicate-day normalisation to Y-m-d, non-JSON/slow/unreachable Umami responses, self-hosted Umami downtime during login, immutable CarbonImmutable dates, widgets on panels without the plugin, invalid browser-supplied date ranges/limits/options, and shared-cache cross-contamination via per-server/per-website cache keys. Event colours move to the colour-blind-safe Okabe-Ito palette; table select labels switch from sr-only to fi-sr-only and are translated — republish published views to pick this up. Laravel 11 support is dropped (12 and 13 supported). New FilamentUmamiPlugin::current() returns null instead of throwing. Quality bar raised: declare(strict_types=1) enforced by an architecture test, PHPStan max level on src and config with no baseline, and 18 new tests covering the failure paths. No application code changes needed.
For product/design: The dashboard widgets can now be shown to non-technical stakeholders without fear of a broken panel when analytics is slow or down. Charts are colour-blind-safe and screen-reader labels are corrected, so the embedded analytics surface meets our accessibility expectations. Cached failures are no longer persisted, meaning a transient Umami outage won’t leave stale “broken” widgets behind.