I just shipped my second Laravel package: Notify Matrix. It manages per-user notification preferences with per-channel opt-in/opt-out and per-group default policies. The pattern came from rebuilding the same notification settings logic in every SaaS I've worked on. The question is always "should this user receive this notification on this channel?" and the answer is always a hand-rolled mess of config arrays and `if/else` in `via()`. Usage: // User model use Scabarcas\LaravelNotifyMatrix\Concerns\HasNotificationPreferences; class User extends Authenticatable { use HasNotificationPreferences; } // Notification class use Scabarcas\LaravelNotifyMatrix\Attributes\NotificationGroup; #[NotificationGroup('orders')] class OrderShipped extends Notification { /* ...β¦