Vibe code your own Help Scout
Vibe code your own Help Scout as inbound mail, assignment, and a reply. Collision detection, deliverability, and the knowledge base stay on the skip row.
You can vibe code your own Help Scout as inbound mail, assignment, and a reply. The catalog calls Help Scout that loop, not a helpdesk operating system.
You pay $25–$75 a person a month. The card says that price scales with the team. The verdict is “Great for one inbox”.
Last time I wrote about building a Kit alternative. That was a regular backlog post. This one is a teardown.
Vibe code your own Help Scout as an inbox
The Help Scout page splits the work into three rows.
The first row is 3 days. Inbound email threading, assignment, replies. That is one shared address, a list of conversations, and a composer. You can vibe-code this.
The second row is 2 weeks and up. Queues, collision warnings, saved replies, reports. Still one inbox.
The third row is 1 month and up. Deliverability infrastructure, live chat, a knowledge base, apps. Skip that row.
If you tell an agent to “clone Help Scout”, it aims at the third row. The useful v1 is the first one.
Here is the shape of one conversation. Nothing else has to exist at 3 days.
const conversation = {
id: 'conv-1842',
customerId: 'cus-ada',
subject: 'Login after password reset',
status: 'active',
assigneeId: null,
}
const message = {
conversationId: 'conv-1842',
type: 'customer',
body: 'The Slot login page 500s after a reset.',
}
A mailbox, a customer, a conversation, messages with a type. Notes and collision checks wait a week.
The audience on the page is a five-person support team sharing one email address. If that is you, one inbox is enough. If the company already lives in Beacon, Docs, and Workflows, keep paying.
The same v1 also replaces Zendesk, Freshdesk, and Chatwoot if what you wanted was shared mail. Intercom is the in-app cousin at $74–$139 a person a month. I already wrote that teardown. Gorgias is the store ticket at $10–$900.
How does Help Scout work
Help Scout publishes an Inbox API at https://api.helpscout.net/v2, plus Docs, Beacon, Chat, Apps, and webhooks. I am summarizing those pages, not reconstructing today’s mail cluster.
An inbox is the shared address. The inboxes article says the first one is [email protected]. A custom address is a second step. You prove you own it, then forward from your provider. Replies must leave Help Scout. Answer from the original mailbox and the thread splits.
Outbound mail can ride Help Scout’s servers, Google OAuth, Microsoft 365 OAuth, or custom SMTP. Send from their servers on your domain and they ask for DKIM. Without those records the message shows as “via helpscout.net”. That is the start of the skip-row deliverability product.
A conversation lives in one inbox. Create it with POST /v2/conversations. The create conversation docs want a subject, a mailboxId, a type (email, chat, or phone), a status, a customer, and at least one thread. Status is active, closed, or pending. The catalog’s v1 uses active and closed.
The customer is an id or an email. An unknown email creates a customer. A known email is a lookup. The rest of the profile is ignored on a match. That is their rule, not a guess.
A thread is one slice of the conversation. The list threads page names customer, message (a user reply), note, and lineitem, plus chat, phone, and forward types. A reply is POST /v2/conversations/{id}/reply. A note is POST /v2/conversations/{id}/notes. Those are two URLs. Copy that split. Do not store a boolean internal.
A lineitem records assignment, a status change, or a move. It has no body. A published reply without an explicit status reactivates the conversation. One conversation can hold 100 threads. The 101st returns HTTP 412.
Folders are views, not copies. The default folder page lists Unassigned, Mine, Assigned, Closed, and Spam. Unassigned is active or pending with no owner. Mine is assigned to you. Waiting is a sort, not a folder. It updates on a customer or user reply. Notes do not move it. A v1 can show Unassigned, Mine, and Closed.
Assignment is one field. Create and update use assignTo. The value is a user id or a team id. Same ID space. A dropdown that writes assigneeId is enough for 3 days.
Collision Detection is the other product. The collision article says it is on for every plan. No setting. Yellow means a teammate is viewing. Red means they are typing a reply or a note. A send pauses if another reply, note, or inbound message landed while you were writing. The API marks that thread underreview. You send, edit, or discard. Treat “they keep presence on a socket per conversation” as an educated guess. The public contract is the color, the pause, and the thread state.
Presence also drives routing. The status page and the users statuses endpoint expose active or away. The source can be presence_detection. Away users skip automatic assignment. Skip that on the 3-day row.
Inbound mail is forwarded or received on the Help Scout address. Their delivery article says a missing message may already sit on another conversation. Show Original keeps headers for two years. Treat matching on Message-ID and In-Reply-To as an educated guess. The public fact is that a reply can land on an existing conversation.
Saved replies, seven reports, Workflows, and signed webhooks sit on later rows. You verify X-HelpScout-Signature. Beacon and Docs are separate APIs.
I would not claim I know their database. A mailbox table, conversations, threads, and a search index is an educated guess. The public picture is the inbox, the conversation, and the thread types.
A v1 can skip multiple inboxes. One mailbox, one From address, one team. The card’s stack is Workers, Astro, and D1. Node.js plus Astro is the catalog default. Use TanStack Start if React is your weekday language.
Screens of a Help Scout alternative
Three surfaces for v1. If the agent starts a Beacon or a Docs site, send it back.
The folder is home. Unassigned, Mine, Closed. A row is a subject, a customer, and how long they have waited. Open a row to the conversation.
The conversation is the thread. Customer mail on the left. Your replies on the right. A note is a third shape, never mailed. Assignment and status sit in the header.
The composer is the send. Body, optional attachment, a status after send. Saved replies wait for the 2-week row. The guardrail on the card is the useful sentence: separate private notes from outbound replies, and sanitize inbound HTML and attachments.
How a Help Scout alternative inbox works
The loop is receive, assign, reply.
Ada mails support. The worker sanitizes the HTML and looks up her email. No match, so it creates a customer and an active conversation with one customer thread. Unassigned picks it up.
Lea assigns herself. That is one write and a lineitem. The row moves to Mine. She adds a note about the Slot reset job. That write must not call the email provider.
She sends a reply and closes. The app writes a message thread, queues one provider send, and sets status to closed. A later reply from Ada reopens it. Help Scout’s API does the same unless you mark the thread imported.
Two people grabbing Unassigned is the collision you skip this week. Assignment is the cheap lock. Add the yellow and red presence on the 2-week row.
The hard half of a Help Scout alternative
The skip row starts when the inbox grows a second product.
Collision Detection is the first tax. Live viewers, typing state, a paused send, and a thread your UI has to resume. Presence that flips people to Away so routing stays honest. A 3-day v1 has assignment and one owner.
Deliverability is the second. Forwarding quirks, DKIM, OAuth send, custom SMTP, bounced threads, and a two-year source archive. I already wrote the Mailchimp teardown for reputation. Rent that part if the shared address is public.
Beacon is live chat plus Docs search, with web and mobile SDKs. Docs is a second API at docsapi.helpscout.net. Workflows are a rule engine you can run by id. Apps are a sidebar. Reports are seven products. Chat and phone sit next to email.
Treat their exact mail-matching rules as an educated guess. The public docs show headers, folders, and thread types. They do not publish the parser.
I would rebuild Help Scout for five people and one support address. Unassigned. Mine. A reply that cannot leak a note.
I would not turn on chat. I would not invent a knowledge base so the same login can search articles.
Host it next to the product, on Node.js and Astro, with Workers on inbound and outbound mail, because that is the stack on the card. Use TanStack Start if React is your weekday language. The hosting post already covers D1. Persist mailbox, customers, conversations, and messages in D1. Attachments wait for object storage on the 2-week row.
If the rent is an in-app bubble, that is Intercom, 4 days. If it is a ticket beside an order, that is Gorgias, 3 days. If the questions are already in a FAQ, that is Chatbase, $40–$150.
Start with the first row
Go to Build your own Help Scout. Copy the Astro prompt, or TanStack Start if that is what you write.
Tell the agent the first estimate only: inbound email threading, assignment, replies. Three days.
If twelve coworkers already live in Beacon, Docs, and Workflows, keep paying.