Helpdesk App Starter · Industry version
A support desk where every ticket knows its order — returns, refunds, and delivery questions handled with context you own.
Nearly every retail support ticket is about an order, yet most desks make agents alt-tab to the store admin to find it. This starter joins the ticket to the order in the schema itself, so the answer to 'where is my package?' is on the screen the question arrived on.
01 · The problem
Retail support has one dominant question — 'where's my order?' — and a generic helpdesk can't answer it without leaving the ticket. The agent copies an email address into the store admin, finds the order, checks the carrier, and pastes a status back. Sixty seconds of swivel-chair, hundreds of times a day.
Returns make it worse. A return is a stateful process — requested, approved, label sent, received, refunded — but a generic desk can only model it as a conversation, so state lives in whoever read the thread last. Customers chase, agents re-read, and refunds slip.
And retail support is seasonal in a way generic tooling ignores. November triples volume, temp agents join for six weeks, and canned answers about shipping cutoffs change weekly. A desk you own can be reshaped for the peak; a rented one charges you per temp seat for the privilege.
02 · Data model
Everything in the base Helpdesk starter —
ticketsticket_messagesagentsteamssla_policiestags— plus the entities this industry actually runs on:
| table | what it holds |
|---|---|
order_links | The join between a ticket and the store order it concerns — status, items, and carrier data readable in-queue. |
returns | Return cases with reason, state, label, received date, and refund amount — the process, not just the conversation. |
03 · Screens
Tickets arrive already matched to orders by customer email, showing items, ship date, and tracking state beside the message. Agents answer delivery questions from one screen, and mismatches — a ticket about an order under another address — are flagged for a human.
A pre-purchase sizing question and a missing-parcel complaint deserve different clocks. Policies here key on ticket type and order value, so the customer with a delayed high-value order gets the fast lane your revenue numbers say they should.
Satisfaction scores join to what actually happened — refund given, replacement sent, question answered — so you learn which resolutions keep customers, not just which agents are polite. That join is a report in your database, not a premium analytics add-on.
04 · In practice
The ticket opens with the order and its latest carrier scan already attached. The agent confirms the status, sends the tracking link from a snippet, and closes — no store-admin tab, no copy-paste, under a minute.
A return case starts in the ticket, moves through approval and label-sent, flips to received when the warehouse checks it in, and closes on refund. The customer sees each stage; nobody re-reads a forty-message thread to learn the state.
Before the holiday rush you add temp agents at zero marginal cost, load the seasonal macros — cutoff dates, carrier delays — and split a temporary returns team off the main queue. In January you fold it all back. The desk flexes because it's yours.
Order links are part of the schema, and the starter pairs naturally with the Dual7 ecommerce starter — same conventions, same database, one join. Connecting an external store platform is a standard sync job into the order_links table, written against your own code.
Returns are modeled as stateful cases — requested, approved, label sent, received, refunded — attached to tickets and orders. Refund execution stays in your payment or store system; the desk owns the process state so nothing stalls silently between steps.
You scale the desk the way you scale any app you own: add agents without seat fees, spin up seasonal queues and macros, and archive them after. Volume-based pricing surprises aren't a thing when there's no volume-based pricing.
The starter includes a customer-facing view where shoppers see their tickets and return states by logging in with their order email. Fewer 'any update?' messages in the queue, and the ones that remain are real.
Dual7 App Starters
A support desk where every ticket knows its order — returns, refunds, and delivery questions handled with context you own. Describe your version to start — the output is a project you own.