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.
Architecture fit — Presentation-layer only. The package registers two Table macros (->asTimeline(), ->asDoubleSidedTimeline()) and a layout column (TimelineEntry) that extends Filament's own Layout\Component. No migrations, models, events, jobs, cache, or storage — nothing to provision, nothing to migrate. Because it consumes Filament's standard grouping, filter, search, action, and pagination APIs rather than reimplementing them, authorization policies, filter state, and session persistence keep behaving the way the platform already expects. The blast radius is one table instance's render path. It is also usable anywhere a TableWidget can be built, including custom dashboard pages via a Livewire schema component — that is the lowest-risk insertion point available to us.
Integration feasibility — High value-per-effort but gated on platform version. Requires PHP ^8.2 and filament/tables ^5.0. Filament v5 is very recent; most installed production panels are v3/v4, so this is not adoptable today without a panel upgrade first. It is a post-upgrade reward, not a migration driver. Favorably, it depends only on filament/tables, not filament/filament, so it does not drag the full panel dependency chain. Install is composer require plus php artisan filament:assets; the service provider auto-registers. Time to first working screen: hours.
Technical risk — Low code risk, moderate supply risk, moderate UX/product risk.
Layout\Component and defines macros — surfaces that can shift on Filament minor releases.->defaultGroup(Group::make('x')->date()) puts Today at the bottom; newest-first requires orderQueryUsing(...). Search must be declared on the table (->searchable([...])), not per-column, or stray column text appears inside cards.->time() Carbon-formats at render in app timezone. Records near midnight can group under one day and display a time from another — material for multi-region feeds.Key questions
defaultSort?collapsed_summary and date headers beyond English; any RTL intent?Stack fit — Laravel + Livewire + Filament 5 Tables. The only performance obligation we inherit is eager loading the relations referenced by ->author() and ->image() (e.g. ->with(['author'])), and that obligation is ours, not the package's.
Migration path — No data migration exists to plan. Realistic path: (a) Filament v5 upgrade as a prerequisite project, (b) pilot in one dashboard TableWidget, (c) promote to one read-only resource list page, (d) stop. Each step is a small reversible diff — reverting to ->columns() is a handful of lines — which is the strongest argument for approving a bounded trial rather than a rollout.
Compatibility — Pin the exact version in the lockfile and treat minor bumps as reviewable diffs given the single maintainer and zero dependents. Confirm the asset pipeline: php artisan filament:assets must run in the deploy step after composer install, and cache-busting must be verified on rollback. Resolve the theme story (prebuilt CSS vs. custom theme scanning) before promising UI sign-off, and confirm the Filament 5 minor in use matches what the README screenshots reflect.
Sequencing — Prerequisite: v5 upgrade plus asset build wired into CI. Then pilot a dashboard widget: read-only, bounded query, no destructive actions, one place to fail, and the highest demo value. Then one resource list page with filters, search, and recordUrl links. Evaluate the double-sided variant only for a marketing/announcement-style surface where the layout earns its cost. Defer destructive actions inside kebabs until authorization and modal behavior are proven. Do not adopt on any list page whose workflow depends on bulk operations — keep those as tables.
Maintenance — Near-zero running cost: no services, no scheduled jobs, no storage, no config to drift. The burden is version-tracking, concentrated at Filament minor upgrades and asset republishes. Assign one named owner to watch the repo and hold the fork decision. Budget roughly a day per Filament minor to smoke-test the timeline surfaces.
Support — GitHub issues only; no vendor SLA, no commercial backing, and no community depth (zero dependents means no Stack Overflow trail). Internalize knowledge deliberately: a one-page internal note covering the grouping-order gotcha, the search-declaration gotcha, the asset step, and eager loading will prevent most self-inflicted tickets. MIT plus a small surface keeps "escalate to fork" credible.
Scaling — Page weight is bounded by page size, not table size, so list scale is not the concern. The concerns are: (1) N+1 on author/avatar per card, which we control via eager loading; (2) Livewire payload and DOM growth if Load-more accumulates many pages in a single session — cap pages or lean on filters; (3) the double-sided alternation logic under paginated groups, which needs a read test against a large dataset before commit.
Failure modes — Ranked by likelihood and visibility: unstyled cards because filament:assets did not run (loud, caught in smoke test); wrong chronological order from the ascending date-group default (silent, damages user trust in the feed); stray column text from per-column searchable() (cosmetic, confusing); timezone-shifted day headers for late-night records (subtle, credibility cost for global teams); a broken action modal inside a card (blocks a workflow, caught in pilot); macro collision or minor-version incompatibility (rare, loud, recoverable by pinning); accessibility regression on keyboard/screen-reader paths (invisible in a demo, requires an explicit check). Rollback in every case is reverting to standard columns — no data is at risk at any point.
Ramp-up — Developer ramp is short. The README is unusually complete for a 23-star package: field-setter table, closure-vs-dot-path semantics, a custom-layout escape hatch to Stack/Split, and the ordering, collapse, and filter caveats are all documented with screenshots. Estimate half a day for a Filament-fluent engineer to ship the widget pilot. Product/design ramp is mostly a screenshot review plus an explicit decision on the sub-768px collapse and mobile behavior of the double-sided layout. The main onboarding risk is that the documented caveats get skipped — make them part of the pilot's definition of done rather than tribal knowledge.
How can I help you explore Laravel packages today?