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

Notification Bell Laravel Package

caiquebispo/notification-bell

An elegant, framework-agnostic Laravel notification bell for Livewire with per-user preferences, sound and category controls, dark mode, and a zero-build delivery pipeline. No Tailwind, Bootstrap, or npm needed—install via Composer, drop the component in your layout, done.

View on GitHub
Deep Wiki
Context7

Product Decisions This Supports

  • Build vs. buy for in-app notifications. The package covers the whole surface a PM would otherwise spec from scratch: bell UI, unread badge, toasts, preferences, categories, history page, admin panel, and REST endpoints. Deciding to adopt it converts a multi-sprint epic into a Composer install plus a trait — useful when notification UX is table stakes rather than a differentiator.
  • Roadmap sequencing. Because the feature set is unusually complete for a package, it lets you defer "notification preferences," "quiet hours," "do not disturb," and "deduplication/rate limiting" out of the near-term roadmap and into a single evaluation task. If it holds up, those items move from Q3 to done.
  • Prioritizing user-control features. The per-user controls (mute category, snooze 1h/4h/8h/24h, quiet hours, pin, archive, undo delete) represent a specific product stance: notification fatigue handled by the end user, not by internal editorial rules. Adopting it commits the product to that stance — worth confirming against your support-ticket themes before adopting.
  • Multi-surface delivery as one decision. REST API, broadcasting with polling fallback, and the history page mean mobile app and SPA notification needs get addressed by the same choice. That's a single architectural decision instead of three.
  • Operational policy defaults. Deduplication window, per-user rate limit (30/min), cleanup retention (--days, --unread-days), and scheduling/expiry are all configurable. These are product policies, not just config — the PM owns the numbers, and this package gives them a home.
  • Where it does not decide anything: channel strategy (email, Slack, push) stays with you. The NotificationCreated event is the intended hook for mirroring elsewhere, so this is an in-app layer, not a notification platform.

When to Consider This Package

Consider it when:

  • The product is Laravel + Livewire 3 already, and the team wants an in-app bell with zero frontend build work. The "no Tailwind, no npm, no vendor:publish" claim matters if your team is backend-heavy or your design system is Bootstrap/plain CSS.
  • You need breadth fast — admin panel, history page, REST endpoints, preferences — and can accept opinionated defaults you may later replace piecemeal. Publishing is optional and per-tag, so the escape hatch is real.
  • Your notification volume needs guardrails. Deduplication, per-user rate limiting, grouping, and scheduling/expiry are the kind of thing teams retrofit after an incident, not before.
  • Localization to pt_BR or English is sufficient; anything else means publishing and maintaining translations.

Look elsewhere (or build) when:

  • Vendor risk is unacceptable. This is the decisive factor: 2 GitHub stars, 0 dependents, and a single maintainer. There is no ecosystem signal, no third-party usage to learn from, and no obvious succession path. For a revenue-critical surface, that's a hard stop without mitigation.
  • You're not on Livewire — the frontend is coupled to it, and the "framework-agnostic" phrasing in the README refers to CSS, not the component layer.
  • You need omni-channel notifications (email/push/SMS/inbox as one system). Laravel's native Notifiable + database channel plus a UI layer may fit better, or a heavier platform.
  • Your design system is strict and the theming via CSS variables plus item_view/bell_icon overrides isn't deep enough — you'll end up forking views, which erodes the buy argument.
  • You require published security posture (CVE process, disclosure policy, audit). None is evidenced here.

Mitigation if you proceed anyway: pin the version, vendor:publish the migrations and config so schema and defaults live in your repo, wrap all calls behind a thin internal Notifier service so the package is swappable, and treat upgrades as manual reviewed PRs rather than composer update drift. The README's "deploy safety" section (idempotent, reconciling migrations) suggests the author has thought about production, but treat that as a claim to verify in staging, not a guarantee.

How to Pitch It (Stakeholders)

For executives: This is a candidate shortcut for a feature every user sees but no customer buys. It would give us a complete in-app notification center — bell, badges, toasts, preferences, history, admin tools, mobile API — for roughly the cost of an evaluation spike instead of an estimated multi-sprint build. The trade-off is concentration risk: it's a young package from a single author with essentially no adoption. My recommendation is a time-boxed, two-week spike in a non-critical surface, gated on three checks: (1) does it survive our staging deploy and cleanup job, (2) can we theme it to our design system without forking, (3) can we wrap it so removal is a one-file change. If any check fails, we fall back to building the bell ourselves on Laravel's native database notifications — the spike still leaves us with the spec, the config decisions, and the schema.

For engineering: The functional surface is broader than what we'd build in a first pass — deduplication, rate limiting, grouping, scheduling/expiry, soft deletes with undo, broadcasting with automatic polling fallback, and an optional REST API that scopes to the authenticated user. Integration is a composer require, a migration, a HasNotifications trait on User, and one <livewire:notification-bell /> in the layout. No frontend build step. The asks in return: pin the version, publish and own the migrations and config, put every call behind an internal service class, and don't let NotificationCreated listeners become a hidden coupling. We accept the maintenance burden of a solo-maintainer dependency in exchange for roughly a sprint of frontend and API work we don't do.

What we should decide now, regardless of adoption: the dedup window, the per-user rate cap, retention periods for read vs. unread vs. archived, whether quiet hours and snooze are on by default, and which categories users are allowed to mute. Those are product calls the package only parameterizes — and they're the same calls we'd need to make if we built it ourselves.

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