[ A Laravel Nova card ]
Nova gives you metrics for numbers and a Vue SDK for everything else. This is the middle: markup your application already produces, placed on the dashboard grid, with lazy loading, caching and dark mode handled for you.
Four content sources. Twelve presentation methods. Five performance methods. One trust boundary, documented, with an opt-in sanitizer on the safe side of it.
Override content(), or build it fluently at the call site. Both are first-class; the subclass hook has never changed.
lazy() keeps queries off the critical path. #[LazyState] carries a selected year across the fetch.
sanitize() for anything a user touched. text() escapes. Markdown strips HTML unless you say otherwise.
4.95 kB of JS, 2.23 kB of CSS, both gzipped under 2 kB. No runtime dependency of its own.
On the dashboard
Every card here is ->lazy(). The dashboard shell paints first, then each card fetches its own content through Nova's own middleware group. Add ->cache() and a hit costs one small request instead of a query.
| 3.0.0 — lazy loading | new |
| 2.2.1 — generator fix | patch |
| 2024 | 418 |
| 2025 | 602 |
Sheet 01 · card geometry
Nova lays its dashboard out on twelve columns. A card declares how many it takes, and this package honours every one of them — including width('full'), which Nova itself forces to a dynamic height.
Sheet 02 · every option except width
Every presentation and behaviour method on one card, live. Width has its own sheet above; everything else is here. The call on the right rewrites itself as you click, listing only the options you actually switched on.
| Visitors | 1,284 |
| Signups | 1,002 |
| Activated | 861 |
| Trialing | 640 |
| Converted | 512 |
| Renewed | 481 |
| Upgraded | 402 |
| Churned | 77 |
Grows with its content — no scrollbar.
Usage
Four content sources, one card. Closures resolve through the container, so they can type-hint NovaRequest.
Trial → paid, rolling 30 days.
Performance
A dashboard of HTML cards runs every card's queries before the page renders, because serialization happens inside the dashboard request. Four methods move that work off the critical path.
Illustrative timings for a six-card dashboard. The shape is the point: the shell no longer waits for the slowest query on the page.
Support this package
This package sits on two moving targets. Nova ships a release and the way cards serialize shifts underneath it; Laravel ships a major and a helper moves. Neither is your problem until the morning a dashboard comes up blank — and the work that stops that happening is, by definition, work you never see.
Sponsorship pays for that work: the upgrades nobody demos, 86 tests kept green across two Laravel majors, and a trust boundary somebody keeps checking. It stays MIT either way.
Per month · cancel anytime
♥ Become a sponsorCompany tiers get your logo in the README and on this page.
Thirty seconds, and it is the first signal other developers look at when deciding whether to trust a package.
A clear reproduction is worth more than you think. The generator bug fixed in 3.0 was somebody else noticing their card would not load.
Goes towards the maintenance nobody sees: Nova and Laravel upgrades, and keeping the test matrix green.
Your logo here and in the README. If this package renders the dashboards your team reads every morning, it is cheaper than the afternoon it saves.
❤️ Why ask at all? This package is MIT and always will be. Nothing is paywalled, nothing phones home, and no feature is held back for sponsors. Sponsorship buys maintenance time, not features — and if you cannot sponsor, the star and the bug report genuinely help.