marcelodelgado/filament-announcements
A Filament v5 plugin for institutional announcements and alerts on panel dashboards. Includes a severity-ordered widget, full CRUD resource with badges and bulk actions, per-user dismiss via pivot table, and automatic expiration using date windows—no jobs required.
Architecture fit
The package is a narrow, self-contained Filament panel plugin: a dashboard widget, a CRUD resource for announcement authoring, a dismissal pivot for per-user state, and expiry logic. It layers onto Filament's existing panel/widget/resource primitives rather than introducing a new runtime, queue worker, or external service. That is the right shape for the problem — there is no architectural impedance mismatch for a Laravel + Filament admin stack.
The strategic question is not "does it fit" but "is it worth a dependency." The feature surface is small enough that a competent Filament developer can reproduce it in one to three days: one model, one migration, one resource, one widget, one dismissal table. Adopting a third-party package therefore buys convenience, not capability, and it imports a maintenance relationship whose value must exceed that build cost.
Integration feasibility
Standard Filament plugin install path applies: Composer require, publish config/migrations/assets, register the plugin in the target PanelProvider, and optionally seed. Integration is gated entirely on the Filament v5 constraint — see risk below. Additional feasibility unknowns that must be resolved before commitment:
Technical risk
Risk is concentrated and high relative to the value delivered:
publish_at/expires_at, cache staleness across the boundary, and dismiss-state cleanup for deleted or deactivated users are all common defect sites.Key questions
main?Stack fit
Fits cleanly if and only if the panel is on Filament v5 with a compatible PHP/Laravel baseline. On v3 or v4 the integration is not "hard," it is blocked — the correct move there is to treat this repository as a reference implementation and write the equivalent natively, which also removes the version-pin problem permanently.
Migration path
Sequence the evaluation as a timeboxed spike rather than a rollout:
migrate then migrate:rollback to confirm reversibility.Compatibility
Two compatibility axes to pin explicitly in the ADR: Filament major version (v5 only — hard gate) and the package's own version pinning strategy. Verify whether the constraint is ^5.0 or a tighter range, and whether releases are tagged. Also confirm the panel's other plugins do not conflict on shared Filament widget or resource registration.
Sequencing
Do not deploy to production until the spike passes and a fork-or-fallback decision is recorded. If adopted, land it behind the plugin registration in a single small PR with migrations reviewed like application code, and only after the in-house build estimate is written down for comparison. The realistic recommendation for most teams: do not adopt as a dependency; use it as a spec. The feature is cheap to rebuild, and rebuilding keeps you on your current Filament major with no external maintenance obligation.
Maintenance
Ongoing maintenance is small in absolute terms but non-zero and externally triggered: every Filament major (and occasionally minor) bump is a potential breaking change requiring a package update you do not control. Budget a periodic upgrade-tax line item, or eliminate it by owning the code. The MIT license makes forking viable, which caps the downside — you are never truly stuck, just occasionally inconvenienced.
Support
Single maintainer, GitHub issues as the only channel, no SLA, no commercial backing. Acceptable for an internal, low-blast-radius admin affordance. Not acceptable for anything an audit or customer-facing commitment depends on. Do not staff a support rotation around this.
Scaling
Effectively a non-issue. Announcements are a low-cardinality table; dismissals scale with users × active announcements, which stays small if expired dismissals are pruned. The only scaling concern worth a ticket is the widget query firing on every dashboard load — confirm it is indexed on the active-window predicates (publish_at, expires_at, panel/tenant key) so dashboards do not degrade as the dismissal table grows.
Failure modes
Ramp-up
Hours, not days. Any Filament-fluent developer can read the README and have it running in an afternoon; the spike described above is the whole onboarding. The real cost is not learning the package but the decision overhead of adopting a v5-only, single-maintainer dependency for a feature you could own outright — which is why the build-vs-buy call should be made explicitly and recorded, not defaulted.
How can I help you explore Laravel packages today?