stepanenko3/nova-cards
Add customizable cards to your Laravel Nova dashboard with stepanenko3/nova-cards. Build flexible card layouts for metrics, links, and custom content to surface key information in the admin panel.
Admin-operations UX as a cheap roadmap line item. Nova is the first screen most internal operators see each day, and it is almost always neglected. This package lets us place high-signal static content there — maintenance notices, release notes, known-issues banners, runbook and escalation links, onboarding checklists for new admins, "who owns this dashboard" contact cards, environment banners ("Staging — do not trust these numbers") — without a design pass or a Vue sprint. Scope it as a polish or maintenance-slot item, not a headline feature, and let the visible improvement in internal tooling carry the credit.
Build vs. buy on internal admin tooling. A custom Nova card is roughly a service provider, a Card subclass, a Vue component, and a composer.json. This package compresses that to composer require plus an entry in cards(). It wins on ergonomics, not capability. At one or two cards either answer is defensible — the honest framing is "half a day of scaffolding per card versus a dependency." The answer flips toward building in-house at three or more cards, or the moment any card needs dynamic content.
De-risking stakeholder requests cheaply. When someone asks "can we show a trial-expiry reminder / maintenance window / changelog inside the admin?", this is the cheapest credible demo. Spike it, show it in an afternoon, and only then decide whether the request graduates into a bespoke internal component. Most of these requests die at the demo, and that is a good outcome.
Dependency-portfolio triage. 33 stars, zero dependents, single maintainer, no SLA. That places it firmly in the "vendor-with-fork-option" bucket — a convenience replaceable in about a day — not the "strategic dependency" bucket. Making that categorization explicit is itself a useful governance signal: it keeps the package off architecture review agendas and out of the critical-path dependency list where it does not belong.
A forcing function on Nova version strategy. Adopting any third-party Nova card surfaces "are we on Nova 4 or 5, and when do we upgrade?" Better answered deliberately now than discovered mid-upgrade by a blank dashboard.
One thing to settle before committing: the package is described as info cards (static content), but integration guidance drifting around it assumes value cards rendering computed metrics. Those are different product bets with different risk profiles. Confirm which it actually does by reading the card class and the Vue component. If it is purely static, replacing Nova's first-party Value/Metric cards is off the table and the scope narrows considerably — which is fine, but it should be a decision, not a discovery.
Adopt only when all of the following hold:
composer.json and source, not assumed from the README. Nova 4 versus 5 is the single biggest adoption blocker for small card packages, and a lagging card is a broken dashboard.Look elsewhere, or build in-house, when:
Value, Metric, Partition, and Trend cards. Never substitute a static info card for a real metric — that is a credibility problem, not a technical one, and a dashboard nobody trusts is worse than no dashboard.cards() patterns are achievable, but then we own a dependency and the logic; own it outright instead.canSee, and remember it gates display, not the underlying query. A card that leaks a count or a link to unauthorized users is a real finding, not a nitpick.To executives (30 seconds): This is a free, MIT-licensed add-on for the Laravel Nova admin panel we already run. It lets us drop informational cards — notices, links, release notes, escalation paths — onto the admin dashboard without building a custom frontend component each time. Cost is zero beyond a few hours of integration and validation. Risk is contained by design: the code surface is small, we pin the version, and if it ever goes unmaintained we fork it internally in about a day. Framing matters — this is an admin-experience polish item, not a strategic platform bet. The project's low adoption (33 stars, no dependent projects) is exactly why we treat it as a replaceable convenience rather than infrastructure, and why it should not displace core roadmap work.
To engineering (the honest version): It saves the scaffolding cost of a custom Nova card — the Vue component, the Card subclass, the service provider registration. That saving is real but modest, and the escape hatch is trivial because the surface area is tiny. Three things before merging: pin the version and verify Nova major compatibility against composer.json rather than the README's optimism; skim the source for anything rendering operator- or config-supplied HTML unescaped, the realistic risk class for an info-card package; and confirm the authorization story, since canSee gates rendering but not any query computed eagerly in cards(). Register cards in a custom Dashboard::cards() rather than globally wherever the content has cost or audience, and prefer Nova's native Value and metric cards for anything numeric — this package is for static content, and stretching it into a metrics tool is how we end up with a dashboard nobody trusts. If we find ourselves wanting more than two or three cards, or any dynamic content, we should own a small internal card component instead; at that volume the dependency stops paying for itself.
How can I help you explore Laravel packages today?