devletes/filament-timeline-view
Render Filament Tables as chronological timelines with asTimeline() or asDoubleSidedTimeline() plus a TimelineEntry column, giving date-grouped cards, avatars, timestamps, kebab actions, and load-more.
composer require and one column swap. The decision is close to a no-brainer for a view-layer surface.->query(), ->groups(), ->filters(), ->searchable(), ->recordActions(), ->paginated()), it can ship as a presentation variant on a resource you already have rather than a new feature track. It can ride along with an existing resource release instead of owning a sprint.TableWidget support is the commercially interesting bit: a "Company Pulse" or "Account Activity" panel on a dashboard becomes a widget definition, not a new page type.Adopt when:
filament/tables ^5.0, so v3/v4 shops are out until they upgrade.Look elsewhere when:
TimelineEntry setters — though note the documented escape hatch (drop in Stack/Split layout columns and the chrome still renders), which softens this considerably.Two implementation items to plan for, not discover: Filament's date grouping sorts ascending by default, so newest-first needs an explicit orderQueryUsing; and collapsible day groups are opt-in, not default.
To executives: This is a presentation-layer package that turns an existing admin table into a chronological feed. No database migrations, no new data store, no new query surface, no vendor contract — MIT licensed, one composer dependency, scoped to a view. Estimated saving is roughly a week of design and engineering per surface, and the exit cost is close to zero: removing it means restoring ->columns(). The honest risk is maintenance concentration (single maintainer, low adoption), which is why we'd pilot it on one internal, non-revenue surface first and treat broader adoption as a second decision.
To engineering: Zero plugin registration — the service provider auto-loads and registers its table macros; one php artisan filament:assets after install. Critically, it doesn't invent a new abstraction: you compose with standard Filament query / groups / filters / searchable / recordActions / recordUrl / paginated APIs, swap ->columns() for TimelineEntry::make(), and call ->asTimeline() or ->asDoubleSidedTimeline(). Filters, deferred filters, session persistence, filter layouts, and search all pass through to Filament's own implementation. When the opinionated card doesn't fit, you can replace TimelineEntry with stock Stack/Split layout columns and keep the dot, caret, card chrome, and action kebab. Two known config items: set orderQueryUsing for newest-first date groups, and call ->collapsible() on the Group if you want day collapse. What we need to validate before wider rollout: bulk-action behavior, pagination at production volume, and whether the ^5.0 pin will hold through our next Filament upgrade.
How can I help you explore Laravel packages today?