laravel-notification-channels/cmsms
A Laravel notification channel for CMS Made Simple (CMSMS). Send notifications from your Laravel app through CMSMS using the familiar Laravel notification API. Easy to install and configure, it extends the laravel-notification-channels ecosystem with a clean, tested driver for CMSMS-powered sites.
Multi-channel notification architecture — keep fan-out in Laravel, not in bespoke glue. This package makes CMS Made Simple just another entry in Notification::via(). The strategic bet it supports is "every delivery destination is a Laravel notification channel," so email, SMS, Slack, database, and CMS-authored alerts share one routing model, one queue, one set of per-user preferences, and one testing story (Notification::fake()). That is a platform decision, not a CMSMS decision — and it is worth making regardless of whether this specific package survives.
Build vs. buy on a genuinely small surface. A notification channel is a thin transport adapter — a few hundred lines at most. The real decision is adopt-as-dependency vs. vendor-a-fork vs. write-in-house, not "do we buy enterprise software." All three options cost days, not quarters. Because it is MIT-licensed, the downside of adopting is capped at "we fork it," which means the call can be made quickly and cheaply instead of escalated into a planning cycle.
Scoping the CMSMS integration request honestly. When a client or internal stakeholder asks "can the app notify CMS editors when a form is submitted / when content is flagged / when a publish fails," this package answers the how much work question: install, add a channel to notification preferences, write payload mapping, add a contract test. That is a spike, not an epic. Framing it that way lets you compare it against other channel requests (Teams, WhatsApp, push) on audience size rather than on gut feel.
Prioritization signal via adoption data. Nine stars and zero dependents is the most product-relevant fact in this package's metadata. It does not mean the code is bad — it means no one has validated this path in production. Use it as a forcing function: adopt only if CMSMS is already load-bearing in the estate, and only with an owner named in the same breath as the adoption decision.
Risk register and dependency policy input. Adding a single-maintainer, zero-dependent community package to a production notification path is a policy question as much as a technical one. This package is a clean test case for "what evidence do we require before adopting a community dependency on a delivery path?" — pinned version, vendored source, wrapper interface, contract test, documented fallback.
Delivery semantics for free. Queuing, retries, backoff, per-notifiable routing, and test doubles all come from Laravel, not from this package. The PM takeaway: any new destination should be built as a channel rather than an ad-hoc service class, because the operational behavior is already solved. This package being small is a feature in that framing — it adds surface area without re-implementing infrastructure.
Use cases it directly unlocks (only if CMSMS is in the estate): notifying CMS editors/admins of Laravel-side events (form submissions, moderation queue items, failed jobs, order events); pushing app-generated alerts into CMS-managed admin dashboards where editors actually spend their day; giving a Laravel admin panel a way to reach CMS-side operators without building a second inbox. It does not unlock rich content authoring, two-way sync, media push, or templating — scope those separately if requested.
Adopt-or-spike only when all of the following hold:
Look elsewhere / decline when:
illuminate/* constraints against your actual Laravel/PHP combination. If installation needs --ignore-platform-reqs, that is a red flag, not a workaround.To executives (60 seconds): "We have a request to notify CMS editors about events in our Laravel app. The options are: a few days to adopt a small open-source adapter, a few days to write our own, or a few days to vendor a copy. All three cost about the same, so this is a low-stakes call, not a budget item. The one thing worth flagging: the package is maintained by a single person with no other projects depending on it. That's fine for internal editor alerts — it is not fine for anything customer-facing or contractual. I'm recommending we spike it for internal notifications only, behind a feature flag, with email as the fallback, and revisit if the dependency ever looks abandoned."
To engineering (the ask): "Treat this as a leaf, not a dependency of domain code. It should appear in exactly two places: one notification class and one via() decision. Keep mail in the channel list and gate CMSMS behind a config flag so we degrade to email instead of dropping messages. Queue it on its own rate-limited worker with explicit tries/backoff/timeout — a legacy PHP CMS behind an authenticated endpoint is not built for throughput. Pin the exact version, read the channel and message classes before trusting the README, and add one unfaked contract test against Http::fake() so an upstream break is a red CI build rather than a user complaint. Wrap it behind an internal CmsmsNotifier interface so swapping to our own implementation is a binding change."
The honest summary: this is a small, MIT-licensed transport adapter that buys us Laravel's notification infrastructure — queueing, retries, routing, test doubles — for a destination we may or may not need. It is a cheap, reversible bet on the "everything is a channel" architecture. It is not a platform, it is not supported, and it should never sit on a delivery path we've promised someone an SLA on. Approve it as a spike with a named owner and a written fork plan; decline it if CMSMS isn't already in the estate or if email would reach the same people.
How can I help you explore Laravel packages today?