Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Nova Inspire Laravel Package

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.

View on GitHub
Deep Wiki
Context7

Getting Started

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:

  1. Install into an app that already has Nova installed and authenticated (Nova is a paid package, so your Composer auth to nova.laravel.com must already be configured):
    composer require devtical/nova-inspire
    
  2. Register the card in app/Nova/NovaServiceProvider.php, inside the cards() method (Nova 4/5 style):
    use Devtical\NovaInspire\NovaInspire;
    
    public function cards(): array
    {
        return [
            new NovaInspire,
        ];
    }
    
  3. Load /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.

Implementation Patterns

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:

  1. Pass the topic at construction time if the card accepts it (check the constructor in src/).
  2. Otherwise publish the package config (if a publishable config exists) and set the default topic there, keeping the card instantiation bare so the config stays the single source of truth.

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"

Gotchas and Tips

  • Release v2.0.3 is a content-only change. "Add knowledge topic" adds an entry to the quote catalogue; it does not alter the public API, config keys, or the Vue props contract. No code changes are required — a routine 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.
  • Nova version compatibility is the number one failure mode. A card built against Nova 4's 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.
  • Stale compiled assets. If you change anything in the card's Vue layer, or if the card renders but looks unstyled after an update, run php artisan nova:publish and hard-refresh. Nova serves its own compiled app.js; a cached dashboard asset is the usual culprit.
  • Caches after config changes. If you published a config file to change the topic, php artisan config:clear is mandatory in local dev and easy to forget — the change will appear to do nothing.
  • The card is dashboard-only. It is not a 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.
  • No data, no debugging surface. There is no backend call, so if the card is blank the cause is essentially always one of three things: the card isn't in the cards() array, Nova's assets are stale, or a JS error from a Nova/Vue version mismatch. Open the browser console before touching PHP.
  • Content is not translated. Quote text is almost certainly baked into the package rather than going through __(). 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.
  • Extension points are thin by design. Don't wrap this card in elaborate abstractions. If you need your own quote source (database-driven, per-user, API-backed), the right move is to copy the card's structure into app/Nova/Cards/ and replace the data source — not to subclass a content package that ships new quotes on every patch release.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
socialdept/tenant-domains
tautvydasr/blade-class-names
socialdept/color-scales
maherelgamil/controller
coleus/widgets
coleus/table
coleus/users
coleus/music
coleus/health
coleus/calendar
coleus/notes
coleus/support
coleus/settings
coleus/apps
seampact/laravel
emmyconceptng/laravel-ng-postcode
jjsquady/round-robin
skyraptor/chatter
edlugz/sasapay
abbasudo/artisan-route