DEV3 Deskly is a self-hosted support desk: email, live chat, the web form, the portal, the REST API and phone tickets all land in one queue.
Stack: Laravel 12, Filament 4 (/admin and /portal), Livewire 3, a plain Blade public site and the shared DEV3 core.
Decisions that mattered
- One ticket service for every channel, so SLA policy, automations, round-robin assignment and notifications behave the same whatever the source.
- Email replies thread by
In-Reply-ToandReferences, falling back to a[#DSK-1042]subject tag. Quoted text is stripped and duplicate message ids are ignored. - The SLA engine counts business minutes against a schedule with its own timezone and holidays. The clock pauses on pending or on hold and the paused time is added back when the customer replies. A
deskly:sla-checkcommand runs every minute from the scheduler, so timers stay correct without a queue worker. - Automations are trigger, conditions, actions, with a depth guard so a rule that changes a ticket never re-triggers the engine.
Limits: there is no public live demo, only screenshots, video tours and your own install.
Trade-off we chose: SLA breaches are flagged by a command that runs every minute, so timers do not depend on a queue worker.
How do you model paused SLA time in your own tools? We would like to compare notes.
#laravel#filament#helpdesk#case-study