bokshorn-it/filament-activity-timeline
A Filament plugin that turns spatie/laravel-activitylog into readable timelines: enum, date, boolean, and relationship diffs rendered through the subject model's own casts, plus a filterable activity resource, custom events, and German translations.
Architecture fit. The package is a presentation layer, not a data layer. It registers a Filament relation manager/timeline widget and a filterable Activity resource on top of spatie/laravel-activitylog, and its differentiator is a diff resolver that replays stored raw values through the subject model's own casts and relationships. That is the right shape: the activity log table remains the single source of truth, the package owns no schema of its own (beyond whatever it reads), and adoption is reversible by removing a panel plugin registration. Lock-in is genuinely low, which is the strongest thing about it from a portfolio-risk standpoint.
Integration feasibility. Mechanically simple for anyone already on Filament + activitylog: composer require, register the plugin in a panel provider, attach the timeline to a resource, and the resource appears in navigation. Prerequisites are the real gate — LogsActivity must already be wired on the subject models and logging the events you care about, because the package is read-only and cannot backfill history that was never captured. Teams that adopted activitylog "just in case" but never tuned logOnly/logExcept will find the output noisy rather than insightful.
Technical risk. Concentrated in three places:
attribute_changes vs properties) alter what the resolver reads. With 7 stars and 0 dependents, there is no crowd to surface a compatibility break before you hit it. Pin constraints and verify against your exact matrix before committing.Key questions for the vendor/author (or to answer yourself in a spike).
Stack fit. Laravel + Filament + spatie/laravel-activitylog is one of the most common admin-panel combinations in the PHP ecosystem. Whoever is running Filament for back-office CRUD almost certainly already has the other two dependencies installed, or will. This is a near-zero-friction additive dependency for that audience, and essentially useless outside it.
Migration path. No data migration is required — it reads the existing activity_log table. The migration that is required is behavioural: if the team has not been logging, there is no history to show, and no amount of plugin installation creates it. Sequence the decision accordingly. If the team already has a bespoke activity screen, this is a replacement, so plan a parallel period rather than a cutover.
Compatibility. Treat the composer constraint as a hard gate in the PR. Confirm the resolved versions of Filament, Laravel, PHP, and activitylog against the package's composer.json, and re-check on every Filament minor bump. Because there are no dependents, you are the de facto compatibility test.
Sequencing.
LogsActivity, and that logOnly/logExcept produce signal rather than noise.subject_type/subject_id/created_at and confirm eager-loading before enabling the filterable resource broadly.Maintenance. This is the dominant consideration. Seven stars, zero dependents, one apparent maintainer, and a maturity signal that reads "readme, changelog" — meaning the project is credible enough to have packaging and release hygiene, but has no adoption base behind it. Plan on being the primary QA for your version combination, and on filing or fixing your own issues. MIT licensing makes a fork legitimate and cheap if the upstream stalls; budget a small contingency rather than assuming upstream responsiveness. That contingency is realistically a few days, not a few weeks, because the surface area is one resolver plus two UI components.
Support. Community-only, no SLA, no commercial backing. Weigh that against the alternative: rebuilding the diff resolver in-house is roughly one to two weeks of engineering plus ongoing maintenance of your own cast-introspection edge cases — which is not obviously cheaper, and is certainly less well-specified than a package that has already thought about enums and foreign keys. For a non-critical, read-only audit surface, the tradeoff is acceptable.
Scaling. The bottleneck is the activity_log table, not the plugin. That table grows monotonically and is usually the largest in a mature Laravel app. Adopt spatie's activitylog:clean or your own archival policy at the same time you enable the UI, or you will be paginating through millions of rows within a year. Index subject_type/subject_id, causer_id, and created_at; verify the filterable resource uses them. The timeline on a single record is naturally bounded and cheap; the cross-cutting resource is where cost appears.
Failure modes to instrument for.
Ramp-up. Low. Any developer comfortable with Filament needs perhaps half a day to install, wire, and read the source; the underlying concepts — activitylog properties, Eloquent casts, relation managers — are already familiar to the team. The real ramp-up cost is not learning the package but building the historical-corpus test pass and the authorization policy around it. That work is unavoidable regardless of which package you choose, and is where the estimate should sit.
Recommendation. Trial it on one non-critical resource. It addresses a real, narrow, high-friction problem (raw activity log values are unreadable and therefore unused) with low lock-in and a plausible in-house fallback. Do not make it load-bearing for compliance-grade audit logging without first pinning versions, gating access, verifying historical-entry rendering, and accepting that you are the maintenance backstop.
How can I help you explore Laravel packages today?