Support Desk
One ticket desk between Brand Ambassadors and the teams that handle their requests.
A ticket tool that connects the Brand Ambassadors, who own the member relationship, with the departments that handle their requests: sourcing, purchase, finance, logistics and IT. Ambassadors get one simple intake and one place to follow up; departments get queues, stages and SLA clocks.
The problem
Requests travelled through email threads, chat messages and a shared spreadsheet. Nobody could see who owned a request, how long it had been waiting, or whether a member was still waiting for an answer. Ambassadors chased colleagues for updates, and the departments had no overview of their own workload.
The approach
I built it as one Cloudflare Worker with a Supabase database, replacing an earlier prototype after a round of user testing. The intake is a three-step wizard (department, subject, details) whose form adapts per subject. SLA clocks count work hours only, pause while a ticket is on hold and move the due date on resume; the same work-time module runs in the browser and on the server. Permissions are enforced server-side: a ticket owner never sees individual handler names, only the team. Supplier conversations run through a shared mailbox via Microsoft Graph, and in-app feedback is triaged and de-duplicated by Claude.
Highlights
- checkWork-hour SLA clocks for first response, resolution and time in stage, paused while on hold
- checkRole-aware views: Brand Ambassadors see their own requests and a team name, departments see handlers, queues and bulk actions
- checkThree-step intake that adapts per subject: products for sourcing, reason and amount for credits
- checkDepartment queues sorted by time left, with auto-assign to the handler with the fewest open tickets
- checkFour-eyes approval on credits, and a rating from the ticket owner once a ticket is resolved
- checkLive updates without websockets: light polling that only redraws what actually changed