ResolveHQ README

The project's README from github.com/mirza-rizvi/ResolveHQ. As one markdown file: README.md.

ResolveHQ

CI Release License: source-available Runs on Cloudflare Workers

ResolveHQ is a Cloudflare-native, self-hostable helpdesk for small support teams.

Requirements: a Cloudflare account and a domain on Cloudflare (for Email Routing). Runs on the Free plan for small teams.

Deploy to Cloudflare

Screenshots

The three-pane inbox, showing a ticket thread with an internal note and a queued reply:

Inbox with a ticket open, showing the queue list and conversation thread

Dashboard with open, unassigned, and urgent ticket counts, plus recent tickets and activity Overview dashboard Reports page showing ticket volume, response times, and breakdowns by status and priority Reports
Knowledge base article list with draft and published articles Knowledge base Public help center page listing published articles by category Public help center
Automations page with two rules and their conditions and actions Automations Inbox in dark mode with the same ticket thread open Dark mode

More screenshots, including the mobile view and the customer and settings pages, are in docs/images/.

What you can do

Interface

The workspace uses a Slack-inspired aubergine sidebar, self-hosted Lato typography, Lucide icons, and Radix UI primitives. Theme-aware controls and status colors support light and dark workspaces. On mobile, bottom navigation and a keyboard-accessible workspace drawer keep all destinations available; ticket columns adapt to preserve subject readability.

Use Cmd/Ctrl+K to jump between pages. The sidebar dock contains notifications, theme switching, and account actions.

How it works

ResolveHQ runs as a single Cloudflare Worker in your own account. Hono serves both the REST API and the built React application. Cloudflare D1 holds tickets and customers, Cloudflare R2 holds attachments, and Cloudflare Queues carry inbound and outbound mail jobs. Cloudflare Email Routing delivers incoming mail to the Worker, and Resend sends outgoing mail. Tickets and attachments are stored in your Cloudflare account; outbound email content passes through Resend. On Workers Paid you can send natively through Cloudflare Email Sending instead, and no mail content leaves your account.

How much does it cost?

ResolveHQ can run on Cloudflare's Free plan for getting started and light use, provided usage stays within the current limits for Workers, D1, R2, Queues, Cron Triggers, and Email Routing. Expect to outgrow Free. Workers Free allows 10 ms of CPU per request; a signup on one Free deployment measured 29 ms, and several other paths also ran over 10 ms on an empty workspace. Cloudflare tolerates a Worker that exceeds the limit infrequently, which is why that deployment works, but the margin shrinks as tickets, customers and notifications accumulate. Measure CPU time under your Worker's Metrics and move to Workers Paid before the queue gets busy. Queues are available on Workers Free. R2 requires account activation and billing setup separately. Resend handles outbound email under its own limits. See the Free-plan audit.

Deploy

The easiest way to get started is with the Deploy to Cloudflare button above. You will need:

Check the deployment before signing up. GET /api/ready answers without a session:

curl https://<your-worker>/api/ready   # {"ok":true,"database":"ready"}

If it reports "database":"unmigrated", apply the migrations once and re-check:

npx wrangler login          # if this machine is not already authenticated
npm run db:migrate:remote   # wrangler d1 migrations apply DB --remote

Setting the Worker's Deploy command to npm run deploy in the Cloudflare dashboard makes every later deploy migrate first. See the deployment guide.

To check a deployment end to end, including the parts that only fail on real Cloudflare infrastructure:

npm run smoke -- https://<your-worker>            # read-only checks
npm run smoke -- https://<your-worker> --signup   # also creates one throwaway workspace

After that, open your ResolveHQ URL and sign up as the owner, giving an optional support email that becomes your default inbox. In the Cloudflare dashboard, add an Email Routing rule sending that address to the deployed Worker, then send a test email to confirm it arrives in the inbox.

See the deployment guide for what the deploy flow provisions, required configuration, first-run setup, and manual deployment.

Local development

npm install
cp .dev.vars.local.example .dev.vars
npm run db:migrate:local
npm run db:seed:local
npm run dev

npm run dev starts a single Vite dev server on http://localhost:5173. The @cloudflare/vite-plugin runs worker.ts inside the Workers runtime behind it, so the SPA and /api share one origin and there is no proxy and no second port. The React app hot-reloads; editing Worker code reloads the Worker.

npm run preview builds nothing on its own — run npm run build first — and then serves the built output in the Workers runtime on http://localhost:4173, which is the closest local match to production.

Handlers that have no HTTP route of their own are triggered through the runtime's handler URLs:

# Run the cron handler once (the schedule itself does not fire locally)
curl "http://localhost:5173/cdn-cgi/handler/scheduled?cron=*/5+*+*+*+*"

# Deliver a raw RFC822 message to the email handler
curl -X POST --data-binary @message.eml \
  "http://localhost:5173/cdn-cgi/handler/[email protected]&[email protected]"

Queue producers and consumers run locally as well; messages are delivered by the local queue simulator. Workers AI has no local simulator, so with the ai binding uncommented the dev server needs wrangler login or CLOUDFLARE_API_TOKEN.

Documentation

Optional configuration

Not yet implemented

License

See LICENSE.

ResolveHQ (mirza-rizvi/ResolveHQ)

Searching Database…

这是什么东西?ResolveHQ 是一个可以自己部署、专为 Cloudflare 打造的客服工单系统,适合小型支持团队:它提供共享收件箱,支持工单分配、状态、优先级和标签,邮件会话完全符合 RFC 规范,还带有知识库和公开的帮助中心、报表,以及可选开启的 AI 助手。
这是注册就能用的托管 SaaS,还是需要我自己运行的软件?是自托管软件,但只能在 Cloudflare 上运行:它以单个 Worker 的形式运行在你自己的 Cloudflare 账户里——Hono 同时提供 REST API 和内置的 React 应用。没有可以注册使用的托管版本,你也不需要自己维护任何服务器。
我怎么把它部署到自己的 Cloudflare 账户?使用 Deploy to Cloudflare 按钮,执行数据库迁移(把部署命令设为 npm run deploy,之后的每次部署都会先执行迁移),然后访问 GET /api/ready 检查。接着注册成为所有者,并添加一条 Email Routing 规则,把你的客服邮箱指向这个 Worker。
部署之前我需要准备什么?需要一个 Cloudflare 账户(Queues 在 Free 套餐下可用,R2 需要单独开通并绑定付费)和一个托管在 Cloudflare 上的域名,这样 Email Routing 才能接收来信。如果想发送外发邮件,还可以选择注册一个 Resend 账户并验证发件域名。
它真的能在 Cloudflare 的 Free 套餐上运行吗?刚开始可以,但迟早会不够用。Workers Free 每个请求只允许 10 毫秒的 CPU 时间,而实测一次注册就花了 29 毫秒;Cloudflare 只能容忍偶尔超时,所以要留意 Worker 的 Metrics 页面,在队列变繁忙之前升级到 Workers Paid。
我的工单和客户数据会存到哪里?工单和附件都保存在你自己的 Cloudflare 账户里(D1 和 R2)。唯一的外部环节是外发邮件,会经过 Resend——除非你在 Workers Paid 上启用 Cloudflare 原生的 Email Sending,那样任何邮件内容都不会离开你的账户。
AI 功能会把客户对话发给第三方吗?只有管理员主动开启才会:AI 助手默认关闭,需要在 Settings 里按工作区启用。它可以在你自己账户内的 Cloudflare Workers AI 上运行(无需密钥),也可以通过 OpenAI 运行(默认模型为 gpt-4o-mini);两者都没配置时,该功能不会显示,也不会发出任何 AI 请求。
Claude 或 Cursor 能连接我的客服系统吗?可以——Claude Code、Claude Desktop 和 Cursor 都能通过 MCP 连接,用来搜索工单、查看会话记录、检查队列数量、查询客户资料和搜索知识库。它是刻意设计成只读的:任何工具都不能回复、分配或修改任何内容。
客户的工单在搁置期间如果客户回复了会怎样?工单会立刻回到队列。搁置中的工单会移出工作队列,休眠期间也永远不会被算作逾期,但客户一回复它就会提前返回——所以把事情先搁置起来是一种坦诚的做法,而不是赌自己能记得住。
它目前还有哪些做不到的事?多语言界面和应用外的通知、在应用内恢复工作区导出的备份(重新导入目前只能按照文档里的 wrangler 操作手册手动完成),以及 MCP 的写入权限——在助手操作可以经过审批之前,AI 服务器始终保持只读。
Size
3.6 MB
Stars
205
Age
1mo
Commits · 90 Days