laboiteacode/filament-dashboard-widgets
A collection of fifteen polished, ready-to-use dashboard widgets for Filament: KPI metrics, goals, breakdowns, trends, funnels, timelines and more. Typed fluent API, static or computed data, native Filament components, light/dark themes, accessible and escaped by default with no front-end build step...
Architecture fit
Filament\Widgets\Widget / ChartWidget subclasses rendered by Livewire on the panel dashboard), so it slots into an existing Laravel/Filament admin without a new front-end stack, build pipeline, or JS dependency graph.Integration feasibility
discoverWidgets). No queue workers, migrations, or external services implied.php artisan filament:assets, usually triggered via filament:upgrade) with inline fallback. This is a net improvement — it decouples widget styling from the host Tailwind build — but it introduces an explicit asset-publish step to verify in CI/staging.Technical risk
filament:assets / filament:upgrade) must be wired into our release process, and custom themes still need a smoke test.color() / badgeColor() to [a-zA-Z0-9_-]. Not XSS (Blade escaping held), but it confirms these setters write into CSS and must never receive untrusted input. Acceptable now; we should still treat colour arguments as developer-authored constants.Key questions
ChartWidget (pulling Filament's charting stack / Chart.js) or render custom Blade + Alpine? This determines JS asset risk and whether charts are themable/exportable.canView()), panel tenancy scoping, and per-widget pollingInterval? Can polling be disabled globally?1 234,5 / 25 %). Still open: explicit currency symbol/placement control, RTL, dark mode, and narrow-breakpoint behavior.Stack fit
Migration path
php artisan filament:upgrade (or filament:assets) so the cached stylesheet is published, and replace one legacy dashboard section at a time. No data migration is implied; the package reads existing models.composer.json (no floating ^ across Filament majors), commit the lockfile, and record the package in an ADR with an explicit re-evaluation trigger (Filament major upgrade or >90 days of unaddressed issues).Compatibility
filament:assets / filament:upgrade) is part of the deploy pipeline; confirm Chart.js availability if it piggybacks on ChartWidget.composer update), but the upgrade guide lists two optional markup changes to adopt the native card styling — schedule those on the pilot panel before wider rollout.canView()/policy integration exists so role-based dashboards don't require us to re-implement gating per widget.Sequencing
content paths). Decide build-vs-buy against an in-house estimate (~3–6 dev-days for equivalent widgets).Maintenance
Support
patches workflow) after the pilot so a maintainer going quiet doesn't block us.Scaling
COUNT/SUM/date-bucketed scans over large tables. On a 10M-row table, an unpinned trend widget is a slow-query generator.pollingInterval or disable polling, and consider a read replica for dashboard traffic.Failure modes
filament:upgrade / filament:assets) must be enforced in deploy.color() / badgeColor() could append arbitrary CSS declarations. Fixed in v1.0.1 (allowlist [a-zA-Z0-9_-]), and never XSS because Blade escapes attributes — but treat colour arguments as static developer-authored values.Ramp-up
TPM recommendation: Conditionally adopt for internal and low-risk Filament panels, behind a thin internal adapter, gated on a one-day spike that confirms Filament version support, tenancy scoping, and dashboard query counts. v1.0.1 is a meaningful positive delta — localized number formatting, the cached-native asset path, and the colour-sanitization fix each retire a risk we flagged, and the documented upgrade guide is an early maintenance-cadence signal. It does not change the recommendation, however: do not adopt for client-facing, multi-tenant, or contractually-supported dashboards until the compatibility matrix, canView() support, and aggregate-query behavior are verified and the fork/exit path is documented. The overall risk profile shifts modestly downward on styling and locale, while version-coupling and adoption-signal risk remain the dominant concerns pending broader usage evidence. Worth the spike; still not worth an unconditional bet.
How can I help you explore Laravel packages today?