a2zwebltd/laravel-customer-support
Portable Laravel helpdesk engine: support tickets with threaded replies, internal notes, attachments (Spatie MediaLibrary), agent assignment, SLA due dates and escalation, mail notifications, events, policies, Livewire + Flux UI, and optional Nova resources.
A portable Laravel customer-support / helpdesk engine — tickets with threaded replies, attachments, internal notes, agent assignment, SLA tracking, mail notifications, a Livewire + Flux UI, and Nova admin resources.
Designed to drop into any Laravel app with minimal wiring while remaining fully customisable.
| Agent dashboard | New ticket |
|---|---|
![]() |
![]() |
| Ticket details | Nova admin |
|---|---|
![]() |
![]() |
livewire/livewire ^3 or ^4 (for the bundled UI)livewire/flux ^2 (recommended — Blade templates use Flux components)spatie/laravel-medialibrary ^11 (attachments)laravel/nova ^5 (optional — auto-registers Nova resources when present)composer require a2zwebltd/laravel-customer-support
php artisan migrate
php artisan vendor:publish --tag=customer-support-config # optional
Add the trait to your User model:
use A2ZWeb\CustomerSupport\Concerns\HasSupportTickets;
class User extends Authenticatable implements HasMedia
{
use HasSupportTickets;
}
Define the agent gate in AppServiceProvider::boot():
Gate::define('manage-support-tickets', fn (User $user) => $user->is_admin);
SupportTicketMessage)spatie/laravel-medialibrary (on tickets and messages)assigned_todue_at) + EscalateOverdueTickets console command for cron escalationTicketCreated, TicketReplied, TicketStatusChanged, TicketAssigned| Method | URI | Name |
|---|---|---|
| GET | /support |
support.index |
| GET | /support/new |
support.create |
| GET | /support/{ticket} |
support.show |
| GET | /support/admin |
support.admin.dashboard |
(Prefix and middleware configurable in config/customer-support.php.)
See config/customer-support.php. Highlights: user_model, routes, admin_gate, categories, sla_hours, mail.admin_recipients, attachments, theme.accent.
// routes/console.php
use Illuminate\Support\Facades\Schedule;
Schedule::command('support:escalate-overdue')->hourly();
composer test
If you discover a security vulnerability, please report it responsibly through private communication with the maintainers.
The MIT License (MIT). Please see License File for more information.
Developed and maintained by the A2Z WEB crew:
How can I help you explore Laravel packages today?