Your helpdesk. Your Cloudflare account.

ResolveHQ is a shared-inbox helpdesk for support teams of one to fifteen. It runs as a single Worker on your own Cloudflare account, so customer email never leaves your tenant and there is no per-seat bill.

Needs a Cloudflare account with Email Routing, plus Resend for outbound mail (or Cloudflare Email Sending on Workers Paid). Small teams fit on the Cloudflare Free plan.

  • Source-available
  • Zero telemetry
  • Runs on Cloudflare Free
  • Data stays in your tenant
ResolveHQ inbox: a queue of tickets on the left, an open conversation in the centre, and customer details on the right.

Why it exists

The gap between a shared Gmail inbox and Zendesk

Most small teams outgrow group email long before they can justify an enterprise helpdesk, an ops person to run it, or a per-agent invoice.

Too little

Shared mailbox

No assignment, no status, no history per customer. Two people answer the same email, or nobody does. Nothing tells you what is overdue.

Too much

Zendesk, Intercom

Built for hundreds of agents. Priced per seat, configured by an admin, and your customer conversations live on someone else's servers.

Yours

ResolveHQ

Small, fast, and deployed to your Cloudflare account. Everything a team of one to fifteen needs to answer email well, and nothing that needs an admin.

What you get

Everything between "email in" and "answer out"

Triage, threading, routing, and reporting. Built to survive hundreds of small decisions per shift without wearing your team down.

Shared inbox and triage

Three panes: queue, thread, composer. Assign, set status and priority, tag, and search across every ticket. Bold subjects mark what is unread.

Email that threads correctly

Replies land on the right ticket using RFC 5322 headers, not subject-line matching. Outbound mail shows sent, failed, or retrying, with dead-letter recovery.

Automations

Rules route, tag, assign, and reply before a human sees the ticket. Keep the queue small enough to read.

SLAs and working hours

Response targets that respect your calendar, holidays, and timezone. Overdue and Due-soon queues tell you what needs you now. Snoozed tickets wake on reply and never count as late.

Knowledge base and help center

Write articles once, publish them to a public help center on your domain. Drafts stay private until you say otherwise.

Teams, roles, workspaces

Owner, admin, and agent roles. Invite by email. Run several workspaces from one deployment, each isolated from the others.

AI assist, off by default

Summaries, reply drafts, classification, and translation through Cloudflare Workers AI or OpenAI. Turned on per workspace by an admin in Settings, never silently.

Connects to what you already run

Slack and Telegram notifications, signed webhooks to your own service, a REST API with scoped keys, and a read-only MCP server for Claude Code, Claude Desktop, and Cursor.

Notification payloads carry ids and statuses, never message text.

Privacy and backups

Per-customer export and erasure for GDPR requests, a retention period you set, weekly backups to your own R2 bucket, and no telemetry of any kind.

How it works

One Worker, four Cloudflare services, no servers

The whole helpdesk is one deployment on infrastructure you already pay for or get free.

  1. A customer emails support

    Cloudflare Email Routing hands the message to your Worker. Attachments go to R2.

    Email Routing · R2

  2. The ticket is threaded and routed

    Headers match the reply to its existing ticket. Automations tag it, assign it, or answer it. It lands in the right queue.

    Workers · D1 · Automations

  3. An agent answers

    Read the thread, use a saved reply or a draft, add an internal note for the team, send. Two minutes, next ticket.

    Inbox · Saved replies · Notes

  4. Delivery is visible

    Queues carry the reply to Resend. The thread shows sent, failed, or retrying, so nobody wonders whether the customer got it.

    Queues · Resend

Order #4821 arrived damaged
Solved shipping Assigned to Priya #1207
Jonah Meyer Tue 09:14

Hi, the box for order 4821 came in crushed and the mug inside is cracked. Can I get a replacement?

Automation "Damage claims" tagged shipping and assigned to Priya
Priya (you) Tue 09:21

Sorry about that, Jonah. A replacement ships today with tracking, no need to return the cracked one. I have marked this solved; reply here if anything else comes up.

Delivered via Resend · 09:21:08 · rating links appended
Reply to Jonah… Send

Self-host

Deploy in minutes, keep it forever

No license key, no phone-home, no per-seat pricing. The code is yours to run and modify for your own team.

  1. Click Deploy to Cloudflare

    Cloudflare copies the repository into your GitHub account, creates the D1 database, R2 bucket, and queue, and builds the Worker.

  2. Point a support address at it

    Add an Email Routing rule on your domain that forwards to the Worker, and paste a Resend API key for outbound mail.

  3. Run the setup check

    The built-in setup page verifies configuration and checks MX, SPF, DKIM, and DMARC so replies land in inboxes, not spam.

  4. Invite the team

    Create the workspace, invite agents by email, and start answering. Updates are a redeploy from the Cloudflare dashboard.

You will need

  • A Cloudflare account with a domain on it, for Email Routing
  • R2 enabled on the account (free tier, separate activation)
  • A Resend account for sending replies, or Workers Paid to use Cloudflare Email Sending instead
  • A GitHub account, so Cloudflare can fork and build the code

In the product

Considered enough to bet customer relationships on

Light and dark, keyboard-first with a command palette, and a bottom-nav layout on phones for the agent on call.

Reports page with ticket volume and response-time charts and a CSV export button.
ReportsVolume, first-response and resolution times, CSAT with response counts, CSV export.
Public help center page listing knowledge base articles for a workspace.
Public help centerYour knowledge base, readable by customers without an account.
Mobile ticket view with status, priority and assignee fields, the conversation, and a five-item bottom navigation.
On a phoneBottom navigation, ticket detail replaces the list, same triage with one thumb.

Questions

Before you deploy

Is ResolveHQ open source?

No. It is source-available. You can read the code, deploy it for your own team or company, and modify it for your own use. You cannot resell it, host it as a service for others, redistribute it, or rebrand it without written permission. Read the license.

Does any data leave my Cloudflare account?

Tickets, customers, attachments, and users live in your D1 database and R2 bucket. Outbound email passes through Resend, which you set up under your own account. There is no telemetry, no update check that reports usage, and no third-party analytics in the app.

If you turn on AI assist, the text you choose to summarise or draft from is sent to Workers AI on your account or to OpenAI with your key. It is off until an admin enables it in Settings.

What does it cost?

ResolveHQ itself is free to deploy. You pay Cloudflare and Resend for usage on your own accounts. Small teams fit within both free tiers; see the cost notes above.

Can I use my own domain?

Yes. Attach a custom domain to the Worker in the Cloudflare dashboard, and add an Email Routing rule for the support address on that domain. The public help center is served from the same domain at /help/<workspace>.

Does it really run on the Cloudflare Free plan?

For small deployments, yes. Requests, D1, Queues, and R2 all have free tiers that a team of a few agents will not exhaust. Password hashing at sign-in is close to the Free plan CPU limit per request, so if sign-ins start failing under load, Workers Paid removes that ceiling.

How do customers rate support?

Resolving replies get three rating links appended. Ratings are stored in your database and shown in Reports next to the number of responses, so a score is never presented without its sample size. No tracking pixels are used.

How do I report a security issue?

Use GitHub private vulnerability reporting on the repository. Details are in SECURITY.md.

Deploy a helpdesk you own

One click creates the Worker, database, bucket, and queue in your Cloudflare account. Connect a support address and start answering.