arrow_backAll work

Support Desk

One ticket desk between Brand Ambassadors and the teams that handle their requests.

Context
Internal tool · The Branding Club
Year
2026
Role
Concept, design & development
Stack
Cloudflare WorkersSupabaseVanilla JSMicrosoft GraphClaude API

scienceSwitch between the Department and Brand Ambassador view in the top right, drag a card on the Tickets board, or file a new request and watch the team pick it up. Everything in this demo is dummy data.

open_in_fullFull screen
locksupport.demo

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