philperusse/nova-column-filter
philperusse/nova-column-filter adds configurable column filters to Laravel Nova resource index tables, letting users narrow records by specific fields directly from the Nova UI for faster, more focused browsing.
Architecture fit
ColumnFilter subclass that exposes a developer-defined columns() allowlist and an apply() that maps a user-chosen column/operator/value onto a WHERE clause on the Nova index query. No service provider of consequence, no migrations, no model coupling. It is a presentation-layer convenience at the far edge of the system.Integration feasibility
composer.json constraint check against our pinned laravel/nova, illuminate/*, and php. A conflict is an instant, near-zero-cost "no" and should be run before anyone reads the source.apply(Request $request, $query, $value) signature is broadly stable across Nova 2–4, but filter metadata and asset registration are not. The filter can install cleanly server-side and silently never render — the highest-time-waste failure mode in a spike, because it presents as a misconfiguration rather than an incompatibility.Technical risk
Key questions
composer.json permit them? (Cheapest disqualifier — check first.)nova:publish, and does that survive our deploy pipeline and current Nova tooling?Stack fit
use in a resource's filters() method plus a columns() map. No model, migration, or policy changes. That minimal surface is the appeal — and precisely why adoption is the wrong frame: anything that small is cheaper to own than to depend on.Migration path
apply()) in app/Nova/Filters, retain MIT attribution in a header comment, and add no Composer entry. This keeps us on current Nova contracts and lets us restrict the allowlist to indexed, safe columns. Estimate under one engineering day for a developer fluent in Nova and Eloquent.composer.json as a routine dependency. With no maintainer, no dependents, and no release cadence, we would inherit a fork we neither wrote nor chose.Compatibility
Sequencing
app/Nova/Filters with an allowlist restricted to indexed, low-cardinality, developer-defined columns; add tests covering scopes, soft deletes, and tenant boundaries.Maintenance
Support
filters() method.Scaling
WHERE clauses, LIKE '%…%' scans, and correlated subqueries on the largest resource tables. The filter's cost is bounded by whichever column a user picks, not by the filter's own footprint — so the worst case is chosen by the least-informed user.Failure modes
Ramp-up
composer.json.How can I help you explore Laravel packages today?