beyondcode/nova-filterable-cards
Nova Filterable Cards lets you add interactive, filterable cards to Laravel Nova dashboards. Define metrics and filters so users can quickly narrow results by date range or custom criteria, making dashboard insights more flexible. Simple to configure and ideal for dashboards that need more than stat...
Architecture fit. This is a Laravel Nova card extension: a PHP card base class plus a Vue 2 filter control injected into the card header. It reads Nova's dashboard filters query parameter, decodes it, and replays each filter's apply() against the card's metric query so the card's numbers are scoped to the selected criteria. Fit is essentially binary — it matters only if the back office runs Nova and we have a per-card filtering requirement that native Nova filters do not already satisfy. Two structural considerations dominate the decision. First, Nova 3+ introduced native filter-refresh behavior (refreshWhenFiltersChange()), which duplicates most of this package's reason to exist. Second, the 2018-era Vue 2 frontend does not survive Nova 4/5's Vue 3 transition without a rewrite. The TPM posture is therefore to treat this as a validated reference design and scoping input, not a component to depend on.
Integration feasibility. composer require is not a realistic path on a current stack. The package pins php ^7.1, laravel/framework 5.6|5.7, and laravel/nova ^1.0; --ignore-platform-reqs only moves the failure from dependency resolution to a blank card in production. There is also no service-provider asset registration — it is a library of card classes, so cards are registered the usual way in NovaServiceProvider::cards(). The feasible integration is source-level reuse under MIT: read the small, conventionally structured PHP/Vue implementation, extract the filter contract, and reimplement against current Nova card scaffolding. For a Nova-familiar developer that is a one-to-two-day clean-room build. Vendoring is defensible only for a genuinely pinned Nova 1.x/Laravel 5.x application, and even then via a mirrored repository.
Technical risk. Risk here is ownership and obsolescence, not code complexity. The repository is archived: no security response path, no maintenance, no compatibility work inbound, 58 stars, zero dependents, a single maintainer, and one experimental release (August 2018). Negligible field testing means any defect surfaces first in our environment. Any build that references the GitHub URL as a Composer vcs repository is a supply-chain item — deletion breaks builds. The substantive behavioral risk sits in the filter mechanism itself: date-range inclusivity/exclusivity, timezone handling, tenant and policy scoping, and composition with Nova's native filters. That is where a seven-year-old implementation is most likely to be subtly wrong, and where our own contract definition matters more than the reference code.
Key questions.
vcs source?Stack fit. Laravel + Nova only. There is no framework-agnostic API, headless mode, or alternative admin-panel integration. If the organization standardizes on a different admin surface or a BI tool, this is not a candidate; the pattern may still inform requirements.
Migration path. In descending order of preference:
Compatibility. Treat compatibility as per-Nova-major and verify rather than assume. Nova 1.x is the design target; Nova 2.x may work with constraint edits; Nova 3 requires registration and asset changes; Nova 4/5 requires a Vue 3 rewrite. Each step is engineering work, not a version bump — budget accordingly and do not let a ticket estimate imply otherwise.
Sequencing.
vcs reference exists, mirror the code into owned VCS and remove the upstream reference before the archived repository disappears.Maintenance. Adoption converts an external dependency into a permanent internal obligation. Every Nova upgrade, PHP upgrade, and frontend build-tool migration becomes our work, indefinitely, with no upstream to hand it back to. Absolute effort is modest given the small surface area — but it is an indefinite tail, and it competes with roadmap commitments. The archived status means zero compatibility work will ever arrive from the maintainer.
Support. No maintainer, no issue triage, no security advisories, negligible community. Internal escalation ends at whoever forked or reimplemented it. A TPM must name that owner explicitly and budget their time; an unowned fork sitting in the admin surface is a governance gap that will only be discovered during an incident or an upgrade crunch.
Scaling. Card rendering is client-side and scales trivially. The filterable behavior is where it bites: each card typically issues its own aggregate query, and re-querying on every filter change multiplies database load per dashboard view. With several cards over large tables, unindexed COUNT/SUM queries with date predicates will show up as dashboard latency long before application traffic is affected. Before rollout: confirm indexes on filtered timestamp columns, consider caching card results, and cap or debounce filter-triggered refreshes. Treat the dashboard's P95 load time as an acceptance criterion, not an afterthought.
Failure modes.
vcs.Ramp-up. Low. The codebase is small, conventionally structured, and readable by a mid-level Laravel developer in under a day. The real gate is Nova familiarity — card lifecycle, asset registration, metadata passing — not this package specifically. That low ramp-up cost is itself the argument for reimplementation: the effort to understand the package is most of the effort to replace it, and replacement removes the archived-upstream risk entirely. Budget the saved time into defining the filter contract and validating query performance, which is where the actual product and operational value sits.
How can I help you explore Laravel packages today?