mirovit/nova-notifications
mirovit/nova-notifications integrates Laravel notifications with Nova, adding a notification bell or inbox to your admin panel so you can send, display, and manage user notifications. It provides a clean, native Nova experience with simple setup for Laravel apps.
Architecture fit. mirovit/nova-notifications is a thin Laravel Nova tool over Laravel’s native notifications table. It adds a persistent, per-user inbox inside the Nova admin panel — distinct from Nova’s ephemeral toast notifications — with read/unread state and mark-as-read behavior. Architecturally it is additive and low-blast-radius: one tool registration, reuse of Laravel’s Notifiable contract, and no domain-model changes. For a TPM, the leverage is that it cheaply tests whether an admin notification inbox has product value before committing engineering effort to an owned solution. Treat it as a pattern to borrow, not a strategic dependency.
Integration feasibility. Installation is straightforward for a Laravel/Nova team: Composer install, register the tool in NovaServiceProvider::tools(), and ensure the standard notifications table exists. The real effort is the payload contract: existing notification classes must persist to the database and emit renderable fields (title, message/body, level, optional url). Many Laravel notification classes store free-form data, so the package may render raw payloads or nothing useful. A TPM should budget a 0.5–1 day spike plus several days adapting representative notification classes. The Nova dependency itself is commercial and private, so CI needs license credentials or a mocked Nova user resolver.
Technical risk. The dominant risk is version coupling to a fast-moving commercial host. Last release was 2022-03-02, with 64 stars, zero dependents, and a single-maintainer profile — weak maintenance signals. It likely targets Nova 4 / early PHP 8.1; Nova 5’s shift toward Inertia/Vue 3 is a plausible breaking axis, and Laravel 11/12 / PHP 8.3+ drift is near-certain. Secondary risks: authorization scoping (routes must sit under Nova middleware and resolve the current Nova user), morph-map mismatch between FQCN and alias in notifiable_type, UI duplication with Nova’s native toasts, and pre-built dist/ assets that may not match the installed Nova front-end. A TPM should log these in the vendor/package risk register and use them to frame a fork-vs-rebuild decision.
Key questions.
data without throwing?nova middleware group and scoped to the authenticated Nova user?Stack fit. Good fit for a Laravel + Nova monolith already using database notifications; it composes with existing Notifiable traits and queue-driven fan-out without new infrastructure. Poor fit if we are Nova 5-only, multi-tenant with per-tenant database connections, or migrating the admin panel off Nova. In those cases the effort should go into a framework-agnostic notification API or an owned Nova component rather than this package.
Migration path. Three options, ascending cost: (a) trial as-is on a staging branch and contract-test against our notification classes; (b) fork into our VCS — vendor the source under packages/, switch Composer to a path/VCS repository, and own the Vue build and Nova compatibility shim; (c) rebuild as a ~1-day in-house Nova tool if the fork needs more than a day of Nova 5 modernization. Option (c) is credible because the package is small — the buy-vs-borrow-vs-build line is thin. A TPM should frame this as a decision gate after the spike, not a foregone adoption.
Compatibility. Pin explicitly: laravel/nova major, PHP >=8.2, and Laravel 10/11/12. Verify the front-end build toolchain compiles under our Node version; Nova tools often ship pre-built dist/ assets, so confirm a rebuild is possible rather than trusting checked-in assets. Confirm the notifications table exists with the standard index on (notifiable_type, notifiable_id) and that our User/Notifiable model uses the expected morph strategy.
Sequencing.
Maintenance. If forked, ownership is permanent and unglamorous: every Nova major and Laravel LTS bump becomes a compatibility ticket with no upstream to lean on. Budget roughly one to two engineer-days per Nova major upgrade, plus a few hours per minor. Assign a named owner; an unowned fork of an unowned package is the realistic failure state. A TPM should include this in the quarterly maintenance forecast and require a runbook before pilot.
Support. No vendor, no SLA, no upstream activity since 2022; the 64-star / zero-dependent profile confirms no community backstop. Internal support means reading the source, which is feasible at this size. Document the payload contract and the fork’s Nova-version matrix so the next engineer does not rediscover it. A TPM should set expectations with stakeholders that support is entirely internal.
Scaling. Modest. The notifications table grows monotonically — a standard Laravel retention problem, not a package problem. Add a pruning job and an index supporting (notifiable_id, notifiable_type, read_at). Confirm the list endpoint paginates; if it loads all unread rows on every panel render, polling from many concurrent admins becomes a cheap but real query load. Watch for N+1s if the tool eager-loads per-notification relations.
Failure modes.
notifiable_type is a morph alias, or notifications were queue-only/broadcast-only.data payload throws in the Vue component, blanking the dropdown.dist/ assets incompatible with the installed Nova front-end.Ramp-up. Low for any Laravel developer: half a day to read the source, a day to get a first notification rendering under contract. The non-obvious cost is Nova-specific knowledge — tool registration, the Nova guard, and asset builds — which concentrates in whoever does the spike. Plan for that person to write the runbook; expect the second engineer to take two to three times as long without it. A TPM should schedule knowledge transfer before the pilot expands beyond one team.
How can I help you explore Laravel packages today?