coreproc/nova-notification-feed
A Laravel Nova package that adds a notification feed to your admin panel, with unread counts, a slide-out feed, and read/unread management. Built for Nova 4.
Architecture fit. The first job is classifying the asset correctly, because misclassification is where this evaluation goes wrong downstream. coreproc/nova-notification-feed is a Nova tool — a presentation layer over Laravel's native notifications table — not a notification platform. It registers via NovaServiceProvider::tools(), adds a trait to the authenticating model, publishes Vue assets, and renders a bell dropdown in the Nova navbar. Its audience is internal operators: support agents confirming a transactional notification was created for a given user and when, ops staff triaging "queued, sent, failed, or never created?", and admins with the panel already open. It does not serve an end-user inbox, channel preference management, digest scheduling, mobile parity, or per-tenant scoping. Any roadmap line item phrased as "notification center" must be disambiguated in writing before this package is cited as progress toward it — conflating an internal observability bell with a customer-facing inbox is the single most likely way this assessment gets misused by a stakeholder skimming a slide.
Integration feasibility. Mechanically low, which is why it looks attractive in a backlog grooming session: one composer require, one asset publish, one migration or reuse of the existing notifications table, a trait on User, tool registration. The real effort is validation, not installation — confirming the migration is idempotent against our schema, that read/unread semantics match our product definition ("seen" vs. "acknowledged"), and that the data payloads our notification classes already emit render as readable content rather than a raw JSON dump. That last point is where a "one-day install" quietly becomes a week.
Technical risk. This dominates the decision and should be stated bluntly to sponsors. Last release: March 2020 (1.4.0, a Pusher SDK bump), placing the code in the Nova 2.x/early-3.x, Laravel 6–7, Vue 2 era. Nova 4 rewrote the frontend on Vue 3 and reworked the tooling model, so the Vue components are the likely break point and installation cannot be assumed on a current Nova license. Compounding: zero Packagist dependents, meaning no downstream community to surface breakage first, no fork ecosystem to lean on, and no effective upstream maintenance guarantee. MIT licensing is the mitigation — we can legally fork and own it — but that converts a dependency into a codebase with a named internal owner, a staffing commitment rather than a procurement line item. Ninety-nine stars represents historical interest, not active use; do not let the star count anchor the risk conversation.
Key questions.
composer.json constraint resolve against our lockfile? This is a 15-minute check that gates everything else.notifications table? This determines whether a future UI swap is a frontend redesign or a data migration.Stack fit. Acceptable only for a Laravel + Nova monolith where the feed is an internal-operations convenience. Not acceptable where the requirement is end-user notifications, delivery guarantees, or compliance-grade audit (retention, immutability, PII redaction, access logging) — it is a UI over an application table and inherits none of that. The saving grace is that it sits on top of infrastructure we already own, so replacing the UI later is a frontend swap rather than a data migration. That materially lowers the cost of being wrong, and it is the argument that should let us timebox a spike instead of running a procurement cycle for a free package.
Migration path. Two routes, and the choice should be made by version reality, not preference:
notifications table — roughly 1–2 engineer-weeks, no upstream dependency, fully owned, works on a supported stack. Priced honestly against a fork-and-upgrade, this is usually the better outcome: same support-deflection benefit, no orphaned third-party code, and it leaves the door open to a proper notification platform if volume or compliance needs grow.Compatibility. Three hard gates before any commitment: (a) PHP and laravel/nova constraints resolve against our lockfile; (b) Nova's asset pipeline accepts the published JS — Vue 2 versus 3 is decisive; (c) the migration is idempotent alongside our existing schema. Treat a failure at (b) as a decision point, not a workaround to engineer around. Shimming Vue 2 components into a Vue 3 pipeline is the class of "small" task that quietly consumes a sprint and delivers no user-visible value.
Sequencing.
(notifiable_type, notifiable_id, read_at, created_at).Maintenance. Upstream is effectively unmaintained. Budget half a day to two days per Nova major upgrade, concentrated entirely in frontend assets, and assign a named owner at adoption time — not at first incident. Orphaned Nova tools are a classic source of post-upgrade "the bell icon is gone" tickets precisely because nothing fails loudly: the tool deregisters or the asset fails to compile and the icon simply stops appearing. Documentation is the README plus whatever we write; rewrite it with our fork's specifics before rollout and treat that as adoption cost, not an afterthought.
Support. No vendor, no SLA, no issue triage, no security response on bundled dependencies. Internal support is the only support. The compensating benefit is real and should be measured: a bell dropdown lets Tier-1 agents verify transactional delivery (welcome emails, password resets, order confirmations) inside a ticket without escalating to engineering. That is a defensible Tier-1 deflection line item in a support-tooling budget — instrument it so we can prove or disprove it rather than assert it.
Scaling. Two low-grade but real concerns. The notifications table grows unbounded; without a prune job (read notifications older than N days) unread counts and feed queries degrade quietly rather than failing visibly. And polling scales with concurrent admin sessions, not total users — negligible at tens of sessions, wasteful at hundreds, and worst exactly during an incident when every admin has the panel open. Index and retention discipline are prerequisites, not follow-ups.
Failure modes.
notifications table → deploy failure. Verify pre-merge, not on release night.data shapes — a try/catch with a generic fallback is mandatory before anyone outside engineering sees it.Ramp-up. Hours for a mid-level Laravel developer to make a first customization. The real constraint is not Laravel familiarity but Vue 2 component work, which is increasingly scarce and deprioritized across teams. If the team is Vue 3-only, the fork inherits technology debt on day one — factor that into build-versus-fork rather than treating the package as free.
Verdict. A reasonable, narrowly-scoped convenience on a legacy Nova stack; a maintenance liability on a current one. Position it as reference design, not strategic infrastructure: adopt-with-fork on Nova ≤3 with a named owner and a pinned commit, reject-and-build on Nova 4+, and cite it as prior art in the ticket either way. The ~1–2 engineer-days saved by adopting is not worth an unbounded, single-author, five-years-stale dependency in the admin panel — the panel is the one surface where an operator notices breakage first and trusts it least.
How can I help you explore Laravel packages today?