thijssimonis/nova-list-card
A Laravel Nova card that displays records from any model as a clean, configurable list on your dashboard. Show recent items, top entries, or filtered results with customizable columns, sorting, and resource links—ideal for quick at-a-glance overviews without custom code.
A buy-vs-build call, not a vendor decision. With 7 stars, zero dependents, and an archived repository, thijssimonis/nova-list-card is not a dependency to adopt — it is a reference implementation worth roughly 1–3 developer-days. The decision it informs is "do we staff a short internal dashboard spike, or defer the ops-visibility surface entirely." Frame it that way in planning docs so nobody mistakes it for a supported component of the stack.
Scoping the v1 internal admin dashboard. The concrete decision this unlocks is whether the Nova home screen ships with a handful of at-a-glance list cards — latest signups, open tickets, failed jobs, top accounts — or whether that surface waits behind a custom build. It is the tabular sibling of a metric card: read-only, small-N (5–20 rows), fixed columns, no interaction. Approving it means approving a presentation layer for queries we already have, not a new capability.
Choosing the right primitive before anyone writes code. It forces an early, cheap decision about surface area. If the requirement includes sorting, filtering, search, pagination, export, or drill-down, the answer is no — that is a Nova resource index page or a maintained data-grid package. Making that call up front prevents the classic "we'll just extend the card" trap that quietly turns a one-day card into a two-sprint grid.
Placing it on the roadmap. It matters only inside a Nova-committed shop. It accelerates the internal admin-tooling workstream and has near-zero bearing on the customer-facing roadmap. Score it as an internal velocity lever, never as a differentiator or a "reporting" capability.
Budgeting ownership, not just integration. Adoption forces a named owner and a recurring maintenance allowance — a few hours per Nova major plus asset rebuilds. That is a resourcing decision a PM owns and should appear in planning, not surface later as unplanned work.
Reading the deprioritization signal correctly. Archived status, single-digit stars, zero dependents, and a low opportunity score all point the same direction. Default position: treat as a code sample to learn from, not a component of the stack. Anything that reverses that default needs a written justification and a fork owner.
Consider it when:
Card subclass, Vue component, cards() registration — to shortcut the learning curve on your first custom card.Look elsewhere when:
Card base class is the realistic in-house equivalent — dependency cost then exceeds build cost.Gate before any real wiring: confirm which Nova major composer.json targets, whether compiled assets ship in-repo, whether the payload is server-injected via withMeta() or fetched from the cards/{card} endpoint, and whether cells render with v-html. Those four answers decide whether this is a ten-minute win or an afternoon of frontend plumbing. Timebox the spike to one day.
For executives (30 seconds). This is a small, free, MIT-licensed add-on for our internal admin dashboard. It displays short record lists — recent orders, open tickets, top customers — as table cards, and it saves roughly one to three developer-days of dashboard plumbing. The catch is that it is no longer maintained, so we would copy the code into our own repository rather than depend on it. That caps the risk at "we maintain a small piece of UI code we would have written anyway," and it stays entirely off customer-facing surfaces. Recommendation: a one-day evaluation spike inside the admin-tooling workstream — not a roadmap commitment, and not a line item anyone should defend at a quarterly review.
For engineering. A Nova card package: one PHP Card subclass, one Vue component, compiled assets. No migrations, no persistence, no events, no meaningful transitive dependency chain. The integration surface is auditable in under an hour; the exit path is deleting a single registration line. Archived status means the code is frozen — no supply-chain churn, but also no fixes, no Nova 4/5 compatibility work, no Vue 3/Vite migration, no security-response path.
Integration plan if it survives the audit: fork into an internal namespace (e.g. App\Nova\Cards\ListCard), commit compiled assets, pin to the current Nova major, cap rows at 5–10 with limit(), add a short-TTL cache around the query, eager-load anything resolved across relationships, ship behind a feature flag on one non-critical dashboard, and record the fork owner plus a retirement trigger — folding into an in-house class at the next Nova major rather than patching the fork indefinitely. Two non-negotiables before it touches a real dashboard: apply tenant/permission scoping at the query (the card will not consult a Nova policy) and confirm cells are escaped rather than rendered with v-html, since user-editable model content in a v-html cell is a stored-XSS vector with admin privileges behind it.
How can I help you explore Laravel packages today?