A help desk with a live ticket queue, built by Claude Code on Elements

A help desk with a live ticket queue, built by Claude Code on Elements

A live ticket queue with overdue badges, email replies, internal notes, canned replies, and who is viewing or typing on each ticket.

How it's built

Replyhaven needed a shared queue that reorders itself as tickets arrive, conversations that stay current in every open window, email both ways with customers, and a way for agents to see who else is on a ticket. Each of those is a part of Elements, so the agent spent its 16 minutes on the help desk itself.

  • A live queue and conversations. Tickets, messages and canned replies are LiveTables. A database trigger announces every change, so a new ticket from the contact form lands in each agent's queue, sorted by priority then age, and a reply appears in every open copy of the ticket.
  • First reply targets. Each priority has a target, from one hour for urgent to 24 for low. The queue counts down to each ticket's target, marks it overdue once the time passes, and the dashboard reports the median first reply and the share that met the target.
  • Who is viewing and typing. A presence channel records each open ticket page, which shows "Priya is also viewing this ticket" and an eye with avatars on the queue row. A typing channel carries "is writing a reply" between agents on the same ticket.
  • Email both ways. The public contact form opens a ticket and emails the customer a confirmation. An agent's reply schedules a background job that emails it to the customer, and internal notes stay with the agents.
  • Server calls as function calls. The contact form, invites and presence lookups call server functions straight from the page with @rpc, with types checked from the template to the database.
  • Sessions and roles. The admin invites agents by email and manages canned replies, and every server call checks the signed-in role with one shared guard. Migrations define the schema and seed one admin, three agents and 20 tickets with their conversations.

Why Elements

Elements is an integrated full-stack app framework and a project server. The project server checks the agent's work as it builds: it type-checks the server and browser code, analyzes the program, applies migrations and runs the tests, then reports the results to the agent. A security mistake, such as calling a server-only function from the browser, is a compile error. The agent reads the report and fixes its own mistakes before it tells you a feature is done. The same checks run on every feature you ask for next.

Run it yourself

  1. 1 Sign up

    Already have an account? Sign in

  2. 2 Install and run the demo One prompt to paste into your agent.

View the code on GitHub →

The prompt

What Claude was given to build this app.

Agent Prompt
Build a help desk named replyhaven for a software company's support team.

Two kinds of accounts: admin and agent. The admin invites agents by email.
Customers never sign in: they write in through a public contact form and get
replies by email.

- Tickets: subject, customer name and email, status (new, open, pending,
  solved), priority (low, normal, high, urgent), assigned agent, tags.
- A shared queue with views for unassigned, mine and each status, sorted by
  priority then age. A ticket waiting past its first reply target gets an
  overdue badge.
- First reply targets per priority: urgent 1 hour, high 4, normal 8, low 24.
- Ticket view: the conversation with the customer, internal notes only agents
  see, and a reply box. Replying emails the customer.
- Canned replies that agents insert into a reply and the admin manages.
- Dashboard: open tickets by status and priority, tickets solved this week per
  agent, and median first reply time.
- An agent sees when another agent is viewing or typing a reply on the same
  ticket.

Seed one admin, three agents and twenty tickets across statuses and
priorities, with conversations. Show the seeded logins on the sign-in page.

The queue, ticket conversations and who is viewing update in real time.