kristories/nova-inspire
kristories/nova-inspire is a Laravel Nova dashboard card that displays a random inspirational quote, adding a touch of motivation to your admin panel. It is simple to install and easy to configure for any Nova application, helping brighten the dashboard and give users a small daily boost.
devtical/nova-inspire is a small Laravel Nova dashboard card that renders an inspirational quote. It ships no models, migrations, or routes — it is a single PHP Card class plus a compiled Vue component, which is exactly what makes it a good first "hello world" card.
Minimum path to seeing it on screen:
nova.laravel.com must already be configured):
composer require devtical/nova-inspire
app/Nova/NovaServiceProvider.php, inside the cards() method (Nova 4/5 style):
use Devtical\NovaInspire\NovaInspire;
public function cards(): array
{
return [
new NovaInspire,
];
}
/nova and confirm the card renders.Where to look first, in order:
src/ — the card class. It's short; read it end to end before anything else. It tells you the constructor signature, whether a topic can be passed in, and what props get handed to the Vue side.resources/js/ — the Vue component. This is your source of truth for how topics are selected and rendered.composer.json — check the Nova version constraint (laravel/nova) before installing into an older Nova 4 app.config/ / resources/lang/ — if the package publishes either, the quote catalogue and available topics live here.First use case: drop it on the main dashboard of an internal admin panel as a morale/lightweight branding touch. It's zero-footprint (no DB, no queues, no external HTTP), so there is no risk in a production deploy.
Composing it into an existing dashboard. Cards are just array entries in cards(). Order matters — it renders top-to-bottom, then left-to-right within a row:
public function cards(): array
{
return [
(new HelpfulMetrics)->width('2/3'),
(new NovaInspire)->width('1/3'),
];
}
Scoping to specific dashboards. If you maintain multiple dashboards (main + per-role), add it only to the one you want:
public function dashboards(Request $request): array
{
return [
(new Main)->cards([
new NovaInspire,
...
]),
(new Ops)->cards([...]),
];
}
Topic selection. The v2.0.3 release added a "knowledge" topic, which confirms topics are a first-class concept. Two patterns are worth trying, in this order:
src/).Do not hardcode quote strings into the card class — you lose them on the next composer update.
Using it as scaffolding for your own card. The real long-term value here is that it's a complete, minimal Nova card: a PHP class that declares component(), a Vue file, and a webpack.mix.js entry. If you need a bespoke dashboard widget, clone the shape from this package rather than starting from the Nova docs' blank slate — you'll get the asset pipeline correct by construction.
Version pinning. For a package this small, pin a caret range that matches your Nova major version and let the lockfile do the rest:
"devtical/nova-inspire": "^2.0"
composer update devtical/nova-inspire is sufficient. Treat it as a reminder that composer.lock churn on a card like this is harmless but noisy; batch it with your regular dependency update PR rather than deploying it alone.Card base class can break under Nova 5 and vice versa. Check the laravel/nova constraint in the package's composer.json before upgrading either side, and test the dashboard visually after a Nova major upgrade — card failures often surface as a blank box rather than a PHP exception.php artisan nova:publish and hard-refresh. Nova serves its own compiled app.js; a cached dashboard asset is the usual culprit.php artisan config:clear is mandatory in local dev and easy to forget — the change will appear to do nothing.ResourceTool and not a field. Don't try to mount it in a resource detail page; it renders in the dashboard card grid and nowhere else.cards() array, Nova's assets are stale, or a JS error from a Nova/Vue version mismatch. Open the browser console before touching PHP.__(). If your admin panel is localised, expect English quotes; overriding via a published view or config is your only lever, and that override will need re-checking on package updates.app/Nova/Cards/ and replace the data source — not to subclass a content package that ships new quotes on every patch release.How can I help you explore Laravel packages today?