{"slug": "show-hn-resolvehq-a-helpdesk-built-on-cloudflare-workers-d1-r2-and-queues", "title": "Show HN: ResolveHQ – A Helpdesk Built on Cloudflare Workers, D1, R2 and Queues", "summary": "ResolveHQ launched as a Cloudflare-native, self-hostable helpdesk for small support teams, running as a single Cloudflare Worker with Hono serving both the REST API and a React app, D1 storing tickets and customers, R2 holding attachments, and Queues carrying inbound and outbound mail jobs. The tool includes opt-in AI-drafted responses that stay off until an admin enables them in Settings, at which point ticket conversations are sent to OpenAI, and it can run on Cloudflare's Free plan for small deployments within current Workers, D1, R2, Queues, Cron Triggers, and Email Routing limits. Outbound mail is sent through Resend, incoming mail arrives via Cloudflare Email Routing, and a five-minute cron job retries stalled mail jobs and cleans up staging and orphaned data.", "body_md": "ResolveHQ is a Cloudflare-native, self-hostable helpdesk for small support teams.\n\n- Run a shared inbox with tenant-isolated customers, tickets, assignment, status, priority, tags, and full-text search.\n- Sign up as owner, invite teammates, and manage Owner/Admin/Agent roles with a workspace switcher across organizations.\n- Thread email correctly per RFC 5322, resistant to subject-line spoofing across tickets.\n- Receive mail through Cloudflare Email Routing and send it through Resend, with delivery status, retries, and idempotent webhooks. Outbound replies carry their linked attachments, and dead-letter queues drain to durable, recoverable records.\n- Attach files to tickets through validated, authorized R2 uploads.\n- Reply faster with saved replies, internal notes, AI-drafted responses (opt-in), and a responsive three-pane inbox with optimistic-version conflict handling.\n- Reset passwords and accept invitations through system email sent via the same provider seam as ticket mail.\n- Publish a public help center from knowledge-base articles, with drafts kept private to your team.\n- Track volume and response speed in Reports, export any window to CSV, and automate triage with rule-based Automations.\n- Notify agents of assignments and customer replies in-app, and work comfortably in light or dark mode.\n- Export everything stored about a customer as JSON, or erase it with a durable, resumable workflow that cancels queued mail.\n- Recover automatically: a five-minute cron job retries stalled mail jobs and cleans up staging and orphaned data.\n- Control AI assistance per workspace: it stays off until an admin enables it in Settings, and only then are ticket conversations sent to OpenAI.\n- Set `TICKET_RETENTION_DAYS` (for example`365` ) to have the scheduled sweep permanently delete resolved and closed tickets older than that window, including attachments.\n\nThe 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.\n\nUse **Cmd/Ctrl+K** to jump between pages. The sidebar dock contains notifications, theme switching, and account actions.\n\nResolveHQ 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.\n\nResolveHQ can run on Cloudflare’s Free plan for small deployments, provided usage stays within the current limits for Workers, D1, R2, Queues, Cron Triggers, and Email Routing. CPU-intensive authentication or mail parsing may require Workers Paid; benchmark your deployment. 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](/mirza-rizvi/ResolveHQ/blob/dev/docs/cloudflare-free.md).\n\nThe easiest way to get started is with the **Deploy to Cloudflare** button above. You will need:\n\n- A Cloudflare account; Workers Free supports Queues. Activate R2 separately.\n- A domain on Cloudflare, so you can set up Email Routing.\n- Optionally, a Resend account with a verified sending domain, to send outgoing mail.\n\nAfter deployment, 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.\n\nSee the [deployment guide](/mirza-rizvi/ResolveHQ/blob/dev/docs/deployment.md) for what the deploy flow provisions, required configuration, first-run setup, and manual deployment.\n\n```\nnpm install\ncp .dev.vars.local.example .dev.vars\nnpm run db:migrate:local\nnpm run db:seed:local\nnpm run dev\n```\n\nThe Vite application runs on `http://localhost:5173` and proxies `/api` to Wrangler on `http://localhost:8787`.\n\n- **AI assistance** : set`OPENAI_API_KEY` (and optionally`OPENAI_MODEL` , default`gpt-4o-mini` ) as Worker secrets to make AI available. Each workspace still opts in through Settings; without a key the feature stays hidden and no AI calls are made.\n- **Retention** : set`TICKET_RETENTION_DAYS` as a Worker variable to automatically delete resolved and closed tickets (with attachments) after that many days. Unset means nothing is deleted automatically.\n\n- Multi-language interface and notifications outside the app (email digests).\n\nSee [LICENSE](/mirza-rizvi/ResolveHQ/blob/dev/LICENSE).", "url": "https://wpnews.pro/news/show-hn-resolvehq-a-helpdesk-built-on-cloudflare-workers-d1-r2-and-queues", "canonical_source": "https://github.com/mirza-rizvi/ResolveHQ", "published_at": "2026-09-11 21:48:00+00:00", "updated_at": "2026-09-11 22:22:07.595537+00:00", "lang": "en", "topics": ["ai-products", "ai-tools", "developer-tools", "ai-infrastructure"], "entities": ["ResolveHQ", "Cloudflare Workers", "Cloudflare D1", "Cloudflare R2", "Cloudflare Queues", "Resend", "OpenAI", "Hono"], "alternates": {"html": "https://wpnews.pro/news/show-hn-resolvehq-a-helpdesk-built-on-cloudflare-workers-d1-r2-and-queues", "markdown": "https://wpnews.pro/news/show-hn-resolvehq-a-helpdesk-built-on-cloudflare-workers-d1-r2-and-queues.md", "text": "https://wpnews.pro/news/show-hn-resolvehq-a-helpdesk-built-on-cloudflare-workers-d1-r2-and-queues.txt", "jsonld": "https://wpnews.pro/news/show-hn-resolvehq-a-helpdesk-built-on-cloudflare-workers-d1-r2-and-queues.jsonld"}}