amjadiqbal/laravel-notification-inbox
amjadiqbal/laravel-notification-inbox is a database-backed notification inbox for Laravel. It helps you store, retrieve, mark as read, and organize user notifications, making it easier to build in-app notification centers with a clean, simple API and read/unread status handling.
manageNotificationInbox, local-only by default) turns "who can read captured notifications" and "who can delete them" into two explicit product/permission decisions rather than one implicit one. This directly supports a defensible answer to "can a contractor with dashboard access wipe the QA inbox?"redact) but any key containing password, passcode, secret, token, otp, code, private_key or webhook (redact_containing), plus an opt-in mask_codes_in_text (NOTIFICATION_INBOX_MASK_CODES) for 4–8 digit codes inside message bodies. This is a decision you can make per environment: dev can stay readable, shared staging should enable masking. Routes are deliberately never code-masked, so support flows remain debuggable.toX() methods still execute. So this package supports preview and inspection, not guaranteed suppression — plan a separate mailer/transport trap if suppressing email is a requirement.NotificationSending listener in register() (ahead of boot() listeners) means an app-level listener can no longer pre-empt interception. That reduces "it works locally but the inbox is empty after we added our own listener" flakiness in test environments.prune_lottery, with docs recommending a scheduled notification-inbox:prune. This is a small but real recurring-ops decision: who owns the schedule, and what retention window do we accept before the table bloats staging.redact, redact_containing, mask_codes_in_text, manageNotificationInbox, prune_lottery) and will schedule the prune command.toX() code still runs. If a stray email or DB row in staging is unacceptable, add transport-level suppression.To executives: A small, configurable dev-tooling package that gives the team a window into the notifications our app would have sent on non-mail channels, so QA and support stop guessing and stop asking engineering to add throwaway debug code. The latest release hardens it: deleting or clearing the inbox now needs a separate permission (locked to local by default), sensitive fields are masked more aggressively before anything is written to disk, and one-off verification codes can be masked in message text with a single flag. Cost is near zero; the benefit is faster iteration on customer-facing messages and fewer "what did we actually send?" incidents in staging. It is explicitly not a production audit log, and it does not suppress email — those remain separate concerns.
To engineering: Adopt for non-production only, pinned to a version. Register the manageNotificationInbox gate wherever the inbox is reachable by more than one person; enable redact_containing everywhere and mask_codes_in_text in any shared environment. Schedule notification-inbox:prune and tune prune_lottery — pruning is opportunistic, not guaranteed. Note the interception listener now registers in register(), so it wins over app boot() listeners; that's the fix, not a bug, but re-verify after upgrades. Be precise about semantics with stakeholders: chat/SMS/push are intercepted, mail and database still send, and your toX() code still runs — if we ever need mail suppression, that's a separate transport trap.
How can I help you explore Laravel packages today?