awesome-nova/filter-card
A Laravel Nova card that adds configurable filter controls to resource index screens, letting users narrow listings by date ranges, selections, and custom criteria. Lightweight, easy to register, and designed to drop into existing Nova dashboards with minimal setup.
Architecture fit
Card subclass, a service provider that registers the card and its published assets, and a Vue component that reads/writes Nova's route query string. There is no backend service, no database migration, no queue or event surface. Architectural surface area is essentially zero.?param= query state so Back/Forward and bookmarkable dashboards keep working. That pattern is reusable in-house even if the package is not.Integration feasibility
laravel/nova and php constraints, and (2) asset compilation (Laravel Mix bundle vs. a modern Vite build). Both are discoverable in a half-day by reading composer.json and the Vue source.--ignore-platform-reqs is not a viable path; it defers the failure to every fresh clone, every new hire, and CI.nova-components/ via a Composer path repository (plus a replace entry where needed) — or simply reimplement the pattern in-house. Estimated in-house effort: an afternoon to a few days, not a sprint.LICENSE file, which is all-rights-reserved by default and blocks internal redistribution/forking until resolved. Verify in discovery, not after vendoring.Technical risk
package.json pins will almost certainly trip npm audit with no upstream fix. Any fork inherits a JS toolchain bump.$route.query, the UI desyncs on Back/Forward. Two cards or a card plus a resource filter both writing ?status= will fight — namespace params (?fc_region=) if coexisting.Key questions
composer.json constraint resolve without flags? (Answer this first; it determines ten-minute install vs. fork vs. skip.)Stack fit
Migration path
composer.json, the Card subclass, the provider, and the Vue component (fifteen minutes of reading covers the whole surface). Run npm audit.Card subclass with component(), a Vue SFC registered via Nova.booting, a provider that publishes the compiled bundle, and query-string read/write.composer require, publish assets (vendor:publish --tag=filter-card-assets or nova:publish), rebuild with the package Mix config, register in NovaServiceProvider::cards(), then load the dashboard and confirm the card mounts with no console errors before wiring real filter definitions.nova-components/filter-card/ with a path repository and document why in the repo, so the next engineer doesn't delete it and break the build.Compatibility
component() name matches the name registered in Nova.booting; verify the config/meta payload reaches the component via the card prop; verify the router emit and that metrics read identical param names.vendor/. Publish assets and edit the published copy; move to nova-components/ at the first sign of a second change.Sequencing
npm audit. Deliverable: go/no-go on "build this UX."ValueMetric/PartitionMetric reading the same params.user_settings-style table keyed on user_id + dashboard, hydrated on boot — implemented in your card, not by patching the package.Maintenance
Support
composer.json regardless of technical feasibility.Scaling
Failure modes
public/vendor/... are served as-is. After any edit: rebuild, re-publish, view:clear, hard-refresh; check the network tab for a 404 on the card's JS before debugging Vue.$route.query; breaks Back/Forward and pre-applied filter links.--ignore-platform-reqs workaround.Ramp-up
Card subclass, a service provider, and a Vue component. Fifteen minutes of reading gives the whole surface area; a day or two of building gives a first-party replacement.How can I help you explore Laravel packages today?