Suganth
← Projects
ProjectsSep 20263 min read

ReplyX: A Help Desk Where Every Ticket Finds Its Own Team

Visit ReplyX ↗ ReplyX is a help desk for teams that support customers over chat. Customers get one simple chat window. Behind it, every conversation becomes a…

Visit ReplyX ↗

ReplyX is a help desk for teams that support customers over chat. Customers get one simple chat window. Behind it, every conversation becomes a ticket that finds its own team, and an AI drafts a reply sized to how hard the question actually is.

Why I built it

In most help desks, someone has to read every new message just to decide who should handle it. That person becomes the bottleneck, and quick questions wait in line behind hard ones. I wanted the sorting to happen on its own, with a person stepping in only when it's genuinely unclear.

I also wanted the customer side to stay simple. Customers never see tickets, queues or statuses. They just chat.

Two sides of one conversation

For customers

A single chat window. They write, they get answers, and the conversation picks up where it left off.

For agents

A desk where each conversation is a ticket with a team, a status and its full history. Agents work their team's queue, and AI Assist can answer or draft replies using the company's own policies.

Tickets that find their own team

When a new conversation comes in, ReplyX decides which team should own it. Three things can make that call, and the strongest one always wins.

How a new ticket is routed: rules first, then the decision model, then Needs Triage

1. Rules first

Admins write routing rules for cases they can describe exactly, like password resets going to Accounts. If a rule matches, the ticket goes straight there.

2. AI when no rule fits

Otherwise, a decision model reads the customer's message and compares it with a short description of each team. It gives every team a confidence score and picks the likeliest one. At 70% or above the ticket is assigned; below that, it waits in Needs Triage.

3. People have the last word

If someone triages a ticket by hand, their choice stands. Every AI decision is saved in the ticket's history with its confidence, so admins can see which team descriptions need sharpening.

The right model for each reply

Not every question needs the most capable (and most expensive) AI model. "Where's my order?" and "the app crashes on export and I've been charged twice" are very different conversations.

How complexity picks a model: weighted factors produce a score that maps to Fast, Standard or Advanced

ReplyX asks a few questions about each conversation. Is the customer frustrated? Are there several issues? Is it technical? Is this a VIP? Each answer is weighted (frustration counts double) and together they make a score from 0 to 1. Low scores go to a fast model, the middle to a standard one, and only the hardest to an advanced model. Admins can change the factors and move the thresholds with a slider.

So most tickets are answered by the quicker, cheaper models, and the strongest one is saved for the conversations that need it.

Every team sees only its own work

Each company gets its own workspace. Inside it, access is set per team: a role can read, create, update or delete tickets in specific groups. Tickets that don't have a team yet are only visible to the people allowed to sort them.

Roles and groups permission grid

Under the hood

A React and MUI front end, a NestJS API, and PostgreSQL with row-level security, so one company's data can never show up in another's. Redis and Socket.IO keep the chat and the agent desk live, and the whole thing runs on Docker Compose. I planned it feature by feature with GitHub Spec Kit.

See it

The full guides, from working tickets to routing rules and roles, are at replyx.suganth.me.