saurabhpunia/notifyx
| Install | |
|---|---|
composer require saurabhpunia/notifyx |
|
| Latest Version: | 1.0.0 |
| PHP: | ^8.2 |
| License: | MIT |
| Last Updated: | Sep 5, 2025 |
| Links: | GitHub · Packagist |
🔔 Notifyx - Laravel Notification System
A simple and powerful notification system for Laravel applications. Send notifications to users and display them beautifully with real-time updates.
📋 What Does This Package Do?
- 📧 Send Notifications: Easily send notifications to users
- 🔔 Notification Bell: Shows unread count with a nice dropdown
- 📱 Real-time Updates: Notifications appear instantly without page refresh
- ⚙️ User Preferences: Let users choose how they want to receive notifications
- 📄 Notification History: Full page showing all user notifications
- 🏢 Multi-tenant Ready: Works with apps that have multiple tenants/teams
🎯 Quick Demo
After installation, you can send a notification like this:
// Send a simple notification
notify($user)
->title('Welcome!')
->with('Thanks for joining our platform')
->type('message')
->send();
And display notifications in your layout:
<!-- Add this to your layout -->
<livewire:notification-bell />
📦 Installation
Step 1: Install the Package
composer require saurabhpunia/notifyx
Step 2: Publish and Run Migrations
php artisan vendor:publish --tag="notifyx-migrations"
php artisan migrate
Step 3: Publish Configuration
php artisan vendor:publish --tag="notifyx-config"
Step 4: Add Trait to User Model
Open your app/Models/User.php file and add the trait:
<?php
namespace App\Models;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Notifyx\Concerns\HasNotifyx;
class User extends Authenticatable
{
use HasNotifyx; // Add this line
// ... rest of your User model
}
Step 5: Add to Your Layout
Add the notification bell to your main layout file:
<!-- In your layout file (e.g., resources/views/layouts/app.blade.php) -->
<div class="header">
<!-- Your existing header content -->
<!-- Add the notification bell -->
<livewire:notification-bell />
</div>
⚙️ Configuration
Basic Setup
The package comes with sensible defaults. You can customize notification types in config/notifyx.php:
'types' => [
'message' => [
'label' => 'Messages',
'icon' => 'heroicon-o-chat-bubble-left-right',
'color' => 'blue'
],
'system' => [
'label' => 'System Updates',
'icon' => 'heroicon-o-cog-6-tooth',
'color' => 'gray'
],
'billing' => [
'label' => 'Billing',
'icon' => 'heroicon-o-currency-dollar',
'color' => 'green'
],
],
Multi-tenant Applications
If your app has multiple tenants/teams, enable multi-tenancy:
// config/notifyx.php
'multitenant' => true,
'tenant_resolver' => fn() => auth()->user()->current_team_id,
🚀 How to Use
Sending Notifications
Simple Notification
notify($user)
->with('Your order has been shipped!')
->send();
Notification with Title
notify($user)
->title('Order Update')
->with('Your order #12345 has been shipped and will arrive tomorrow.')
->send();
Notification with Type
notify($user)
->title('Payment Received')
->with('We received your payment of $99.99')
->type('billing')
->send();
Notification with Action Button
notify($user)
->title('New Message')
->with('You have a new message from John')
->type('message')
->action('/messages', 'View Message')
->send();
Notification via Multiple Channels
notify($user)
->title('Welcome!')
->with('Thanks for joining our platform')
->type('message')
->via(['database', 'mail', 'broadcast']) // Send via multiple channels
->send();
Using the Facade
You can also use the Notifyx facade:
use Notifyx\Facades\Notifyx;
Notifyx::to($user)
->title('Hello!')
->with('This is a test notification')
->send();
Display Components
Notification Bell (with dropdown)
<livewire:notification-bell />
This shows a bell icon with unread count and dropdown with recent notifications.
Full Notification Page
Create a route and view for the full notification page:
// routes/web.php
Route::get('/notifications', function() {
return view('notifications');
})->name('notifications.index');
<!-- resources/views/notifications.blade.php -->
@extends('layouts.app')
@section('content')
<livewire:notification-page />
@endsection
User Preferences Page
Let users customize their notification preferences:
<!-- resources/views/notification-preferences.blade.php -->
@extends('layouts.app')
@section('content')
<livewire:notification-preferences />
@endsection
📱 Frontend Features
Real-time Updates
If you have Laravel Echo setup for broadcasting, notifications will appear in real-time without page refresh.
SPA-like Experience
All interactions (marking as read, deleting, etc.) happen without page reloads using Livewire.
User Preferences
Users can control:
- Which notification types they want to receive
- Which channels (email, browser, etc.) to use for each type
- Enable/disable notifications entirely
🎨 Customization
Custom Views
Publish the views to customize the appearance:
php artisan vendor:publish --tag="notifyx-views"
Views will be published to resources/views/vendor/notifyx/.
Custom Notification Types
Add your own notification types in the config:
'types' => [
'order' => [
'label' => 'Order Updates',
'icon' => 'heroicon-o-shopping-bag',
'color' => 'purple'
],
'friend_request' => [
'label' => 'Friend Requests',
'icon' => 'heroicon-o-user-plus',
'color' => 'pink'
],
],
🔧 Advanced Usage
Get User Notifications
// Get recent notifications
$notifications = $user->getNotifications(10);
// Get paginated notifications
$notifications = $user->getPaginatedNotifications(15);
// Get unread count
$unreadCount = $user->getUnreadCount();
// Mark notification as read
$user->markNotificationAsRead($notificationId);
// Mark all as read
$user->markAllNotificationsAsRead();
Check User Preferences
// Check if user has enabled email notifications for billing
if ($user->hasEnabledNotification('billing', 'mail')) {
// Send billing notification via email
}
📊 Database Tables
The package creates these tables:
notifications- Stores all notifications (Laravel's default)notification_preferences- Stores user preferences for notification types/channels
🔍 Troubleshooting
Notifications Not Appearing
- Check if the trait is added to your User model
- Make sure migrations ran with
php artisan migrate - Clear cache with
php artisan config:clear
Real-time Not Working
- Setup Laravel Echo for broadcasting
- Configure broadcasting driver (Pusher, Redis, etc.)
- Check broadcast channel permissions
Styling Issues
- Make sure Tailwind CSS is included in your project
- Publish views and customize if needed
- Check for CSS conflicts with your existing styles
📝 Requirements
- PHP: 8.2 or higher
- Laravel: 10.0, 11.0, or 12.0
- Livewire: 3.0 or higher
🤝 Support
For issues or questions:
- Check the troubleshooting section above
- Create an issue if you find a bug
📄 License
This package is open-source software licensed under the MIT license.
🎉 That's It!
You now have a complete notification system in your Laravel app. Users can receive notifications, view them in a beautiful interface, and customize their preferences. The system works great for both simple websites and complex multi-tenant applications.
Happy coding! 🚀