What a small team actually lives in is a shared mailbox where every thread has an owner, a status, private comments and a few canned replies. An agent can wire that up over IMAP and SMTP in a weekend, and it will run a support@ address for a handful of people. What stays behind is the rest of Front: SMS, WhatsApp and chat in the same list, phone apps, analytics, CRM and Slack connectors and the AI add-ons. Getting into the mailbox is the fiddly part, because Microsoft 365 and some Google Workspace setups only allow OAuth.
Before you buildThere is no free Front plan. If you want a free shared inbox without building one, self-host FreeScout or Chatwoot.
Build me a self-hosted team shared inbox to replace Front. Requirements:
- Node.js 22 + TypeScript: a Fastify API and a React front end built with Vite.
`npm start` serves everything on http://localhost:4900.
- Mail in: watch one or more IMAP mailboxes (support@, sales@) with `imapflow`,
using IDLE where the server supports it, and parse with `mailparser`.
Credentials live in .env. Never delete or move mail on the server.
- Group messages into threads by Message-ID, In-Reply-To and References. Store
them in better-sqlite3 at ./data/inbox.db, attachments in ./data/files/.
- Each thread has a status (open, snoozed until a date, done), one assignee,
tags and internal comments with @name mentions that are never emailed.
Views: Unassigned, Mine, All open, Snoozed, Done, and one per tag.
- Reply and forward from the shared address over SMTP with `nodemailer`, keeping
the threading headers; canned replies with {{first_name}} placeholders.
- When a teammate has the same thread open or a draft started, show it live
(server-sent events) so two people never answer the same customer.
- Rules: if sender or subject matches, then tag, assign or mark done. Search
subjects and bodies with SQLite FTS5.
- Teammates come from team.json and one shared password in .env guards the app.
No sign-up flow, no telemetry, self-hosted.
- Out of scope: SMS, WhatsApp and chat channels, mobile apps, analytics.
- README: setup, backups, and an honest note that Microsoft 365 mailboxes refuse
IMAP passwords (OAuth only), while Gmail needs an app password.Opens your agent with the prompt filled in, you press enter. Or copy it and paste it into an empty folder.
The first prompt builds the core. Run these one at a time in the same folder to grow it into your own Front.
Add a Front importer to the shared inbox in this folder. Requirements: - Read FRONT_API_TOKEN from .env and page through the Front Core API: the inboxes, their conversations, then each conversation's messages and comments. - Respect the rate-limit headers and resume where it stopped if interrupted. - Save everything as normal threads tagged "imported from Front", keeping the original dates, authors, assignees and attachments. - Skip conversations that were already imported, so a second run is safe. - Print totals at the end: conversations, messages, comments, failures. - Update the README with how to create the API token.
Add AI reply drafts to the shared inbox in this folder. Requirements: - A "Draft reply" button on each thread calls the Anthropic API (key in .env). - Give the model the thread plus the five most similar closed threads found with the existing FTS5 index, and the canned replies. - Put the draft in the reply box marked "AI draft"; never send on its own. - Log tokens and cost per draft to ./data/ai-log.csv. - Update the README with the cost per draft I should expect.
Add a reports page to the shared inbox in this folder. Requirements: - From the stored messages, compute first-response time and time to done per thread, then weekly medians per assignee and per tag. - Page at /reports with a table and a small bar chart (Chart.js), plus a list of open threads waiting more than 24 hours. - CSV export of the weekly numbers. - Out of scope: business-hours calendars. - Update the README.
Add a website chat channel to the shared inbox in this folder. Requirements: - A small script tag shows a chat bubble; messages travel over a WebSocket. - Each chat becomes a thread with channel "chat" in the existing views. - Replies reach the visitor live while the page is open, and by email if they left an address. - Serve only the widget routes on WIDGET_PORT from .env; rate-limit by IP. - Update the README with the embed snippet and how to expose the port.
Teams pay because every customer message lands in one place with a clear owner, so nobody answers the same email twice and nothing slips. Once rules, templates, reports and CRM links are built around it, Front runs the support or ops desk, and a seat costs less than one lost customer.
Estimate · Mail keeps flowing through the mailbox you already pay for. A small VPS for the team is about $5 a month, or nothing on a machine you already run. The build is token usage on your agent plan.
| Plan | Monthly | Annual, per month | What you get |
|---|---|---|---|
| Starter | $35 | $25 | Up to 10 seats, one channel type, 1 workspace, up to 10 automation rules, basic analytics and a basic knowledge base. |
| Professional | $85 | $65 | Up to 50 seats, every channel (email, SMS, social, WhatsApp), up to 5 workspaces, 20 rules plus macros, advanced analytics, SSO and SCIM. |
| Enterprise | — | $105 | Unlimited workspaces, rules and macros, custom roles, a multi-language knowledge base; Copilot, Smart QA and Smart CSAT included. |
Kinda. The core is a weekend build with the prompt on this page, but real gaps remain: SMS, WhatsApp, social and live chat in the same inbox, Phone apps and push notifications.
About $35 a month on the Starter plan per seat, $420 a year (checked 2026-10-13).
SMS, WhatsApp, social and live chat in the same inbox; Phone apps and push notifications; Response-time analytics and SLA reports; Connectors to CRMs, Slack and Jira; Copilot drafts and the Autopilot AI agent. If any of those matter to you, keep paying.
Yes: Chatwoot (open source), FreeScout (open source), Zammad (open source).