Support tickets
An admin-side ticket queue with replies, filters and a badge. The public side, the form or email that creates a ticket, is yours to build.


What it adds
| File | Purpose |
|---|---|
app/Models/SupportTicket.php, app/Models/TicketReply.php | Models with a ulid per ticket, open() scope, replies relation |
database/factories/SupportTicketFactory.php, TicketReplyFactory.php | Factories, with closed() and fromAdmin() states |
database/migrations/*_create_support_tickets_table.php, *_create_ticket_replies_table.php | support_tickets with subject, category, priority, status, IP and closed timestamp; ticket_replies with an is_admin_reply flag |
app/Livewire/Admin/Support/TicketList.php, TicketDetail.php and their views | The queue and the thread |
Install
php artisan ui-kit:install-module support-tickets
No Composer packages.
What the installer changes
- Adds two routes between the markers in
routes/admin.php. - Adds a
Supportentry with theopen_ticketsbadge between the nav markers inconfig/admin.php. - Runs the two migrations.
Routes
| Route | Name | Component |
|---|---|---|
GET /admin/support | admin.support.index | TicketList: search by name or email, filter by status, priority and category |
GET /admin/support/{ulid} | admin.support.show | TicketDetail: the thread, inline reply, status and priority changes validated server-side |


Left to you
- Creating tickets. Write to
SupportTicketfrom your contact form, your API, or an inbound mail handler. The contacts module adds a Copy to Ticket button when both are installed. - Notifications. The module ships no Mailables, so replies do not email anyone until you add a notification where
TicketDetailsaves a reply. - The badge. Bind a
SidebarBadgeResolverthat returns['open_tickets' => SupportTicket::open()->count()]; see Customising.
Removing
Delete the models, factories, Livewire components and views, remove the two route lines and the nav entry between their markers, drop the two tables, and remove support-tickets from installed_modules in config/ui-kit.php.