{"id":"01a0fd76-c0fc-7e56-a87f-7591eaa7c132","slug":"resolvehq","name":"ResolveHQ","oneLiner":"Email helpdesk for support teams of one to fifteen people who have outgrown group email","logoUrl":"https://getresolvehq.com/img/favicon.svg","primaryCategory":{"slug":"customer-support","name":"Customer Support & Shared Inbox"},"services":[{"slug":"workers","name":"Cloudflare Workers","shortName":"Workers"},{"slug":"static-assets","name":"Workers Static Assets","shortName":"Static Assets"},{"slug":"d1","name":"Cloudflare D1","shortName":"D1"},{"slug":"r2","name":"Cloudflare R2","shortName":"R2"},{"slug":"queues","name":"Cloudflare Queues","shortName":"Queues"},{"slug":"email-workers","name":"Email Workers","shortName":"Email Workers"},{"slug":"cron-triggers","name":"Cron Triggers","shortName":"Cron"}],"deploy":"one_click","hasOneClick":true,"licenseName":"ResolveHQ Source-Available License","licenseClass":"source_available","freeTierStatus":"usage_dependent","isTested":false,"lastTestedAt":null,"stars":202,"isArchived":false,"publishedAt":"2026-10-02T16:56:02.458Z","contentUpdatedAt":"2026-10-05T12:55:57.763Z","latestCommitAt":"2026-09-29T11:51:34Z","screenshot":{"url":"/media/apps/01a0fd76-c0fc-7e56-a87f-7591eaa7c132/01a0fd77-7f15-7e3a-8c13-1d4f58ee70a9.png","alt":"ResolveHQ three-pane inbox with ticket queues, an open ticket thread and an internal note"},"sourceHealth":"healthy","shortDescription":"ResolveHQ turns each support email into a ticket with assignment, priority, internal notes, saved replies and response targets. It runs as a single Worker in your Cloudflare account, with tickets in D1 and attachments in R2. Email Routing delivers incoming mail, and replies go out through Resend.","longDescription":"Tickets open in a three-pane inbox, threaded per RFC 5322. The team sets status and tags, snoozes a ticket until a chosen time and searches every ticket with full-text search. Owners invite teammates as Owner, Admin or Agent, and one deployment can hold several workspaces.\n\nResponse targets follow the team's working hours and holidays and feed Overdue and Due-soon queues. The app also includes a public help center built from knowledge-base articles, rule-based automations, reports with CSV export and rating links in resolution emails. Integrations include signed webhooks, Slack and Telegram notifications, scoped API keys for /api/v1 and an MCP server for Claude Code, Claude Desktop and Cursor. AI summaries, reply drafts, classification and translation stay off until a workspace admin enables them. They run on Workers AI once its binding is uncommented, or on OpenAI with an API key.\n\nHono serves the API and the built React app from the same Worker. Queues carry inbound, outbound and maintenance jobs, each with a dead-letter queue, and R2 also stores workspace exports. A cron trigger every five minutes retries stalled mail jobs and cleans up staging data. On Workers Paid, a send_email binding can replace Resend with Cloudflare Email Sending.\n\nBefore deploying, activate R2 in the Cloudflare dashboard. The Deploy to Cloudflare button provisions the database, bucket, queues, rate limits and cron and asks for a SESSION_PEPPER secret. Afterward, confirm the schema through /api/ready, add an Email Routing rule for the support address and set a Resend API key to send replies. A setup page checks the configuration and looks up MX, SPF, DKIM and DMARC records for the inbox domains.","useCases":["Answer customer email as a team from one shared inbox","Publish a help center built from knowledge-base articles","Track first-reply and resolution targets in business hours","Give an AI assistant read-only ticket search over MCP","Collect satisfaction ratings without a third-party survey tool"],"targetAudience":"Small support teams that answer customer email together and want a helpdesk in their own Cloudflare account.","knownLimitations":"The custom source-available license allows personal or internal business use and forbids resale, hosting for others and redistribution. Inbound mail needs a domain on Cloudflare with Email Routing. There is no multi-language interface or email digest yet, and the app cannot restore a workspace export; the deployment guide documents a wrangler runbook instead. The MCP server is read-only, so AI assistants cannot reply to or change tickets. The project started in September 2026 and has one maintainer.","editorialNote":null,"ownershipDisclosure":null,"homepageUrl":"https://getresolvehq.com","demoUrl":null,"docsUrl":"https://github.com/mirza-rizvi/ResolveHQ/blob/dev/docs/deployment.md","repository":{"provider":"github","owner":"mirza-rizvi","name":"resolvehq","url":"https://github.com/mirza-rizvi/resolvehq","defaultBranch":"dev","stars":202,"forks":13,"openIssues":8,"licenseSpdx":"NOASSERTION","isArchived":false,"latestRelease":"v0.3.4","latestReleaseAt":"2026-09-28T10:44:03Z","latestCommitAt":"2026-09-29T11:51:34Z","metadataFetchedAt":"2026-10-07T03:51:43.656Z"},"secondaryCategories":[],"servicesDetailed":[{"slug":"workers","name":"Cloudflare Workers","shortName":"Workers","detectionKind":"explicit","note":null},{"slug":"static-assets","name":"Workers Static Assets","shortName":"Static Assets","detectionKind":"explicit","note":null},{"slug":"d1","name":"Cloudflare D1","shortName":"D1","detectionKind":"explicit","note":null},{"slug":"r2","name":"Cloudflare R2","shortName":"R2","detectionKind":"explicit","note":null},{"slug":"queues","name":"Cloudflare Queues","shortName":"Queues","detectionKind":"explicit","note":null},{"slug":"email-workers","name":"Email Workers","shortName":"Email Workers","detectionKind":"inferred","note":null},{"slug":"cron-triggers","name":"Cron Triggers","shortName":"Cron","detectionKind":"explicit","note":null}],"connectors":[],"externalRequirements":[{"slug":"openai","name":"OpenAI API","requirementKind":"optional","purpose":"Runs AI summaries, reply drafts, classification and translation when the Workers AI binding is not enabled","selfHostedAlternative":null,"hasSelfHostedAlternative":true,"evidenceUrl":null},{"slug":"resend","name":"Resend","requirementKind":"optional","purpose":"Sends ticket replies and system email unless Cloudflare Email Sending is bound on Workers Paid","selfHostedAlternative":null,"hasSelfHostedAlternative":true,"evidenceUrl":"https://github.com/mirza-rizvi/resolvehq#readme"}],"deployMethods":[{"id":"01a0fd76-fc6c-7e2c-8a2e-0d12fc32c638","methodType":"one_click","url":"https://deploy.workers.cloudflare.com/?url=https://github.com/mirza-rizvi/ResolveHQ","command":null,"docsUrl":null,"branch":"dev","isOneClick":true,"isPrimary":true,"requiredPlan":null,"notes":null},{"id":"01a0fd76-fd0b-761b-b45e-1a71cd93cc5b","methodType":"cli","url":null,"command":"npm install\nnpx wrangler login\nnpx wrangler d1 create resolvehq --update-config=false\nopenssl rand -hex 32\nnpx wrangler secret put SESSION_PEPPER\nnpx wrangler secret put RESEND_API_KEY\nnpx wrangler secret put SYSTEM_MAIL_FROM\nnpm run deploy","docsUrl":null,"branch":"dev","isOneClick":false,"isPrimary":false,"requiredPlan":null,"notes":"Activate R2 and verify your sender domain in Resend first."}],"deployRequirements":[],"bindings":[{"bindingType":"d1_databases","bindingName":"DB","resourceName":"resolvehq"},{"bindingType":"queues.consumers","bindingName":null,"resourceName":"resolvehq-inbound-mail"},{"bindingType":"queues.producers","bindingName":"INBOUND_MAIL_DLQ","resourceName":"resolvehq-inbound-mail-dlq"},{"bindingType":"queues.producers","bindingName":"INBOUND_MAIL_QUEUE","resourceName":"resolvehq-inbound-mail"},{"bindingType":"queues.producers","bindingName":"MAINTENANCE_DLQ","resourceName":"resolvehq-maintenance-dlq"},{"bindingType":"queues.producers","bindingName":"MAINTENANCE_QUEUE","resourceName":"resolvehq-maintenance"},{"bindingType":"queues.producers","bindingName":"OUTBOUND_MAIL_DLQ","resourceName":"resolvehq-outbound-mail-dlq"},{"bindingType":"queues.producers","bindingName":"OUTBOUND_MAIL_QUEUE","resourceName":"resolvehq-outbound-mail"},{"bindingType":"r2_buckets","bindingName":"ATTACHMENTS","resourceName":"resolvehq-attachments"}],"envVars":[],"screenshots":[{"id":"01a0fd77-8009-7328-8264-5ffcad75a881","url":"/media/apps/01a0fd76-c0fc-7e56-a87f-7591eaa7c132/01a0fd77-7f15-7e3a-8c13-1d4f58ee70a9.png","width":1440,"height":900,"altText":"ResolveHQ three-pane inbox with ticket queues, an open ticket thread and an internal note","isPrimary":true,"sourceType":"repository"},{"id":"01a106ca-4c30-727a-8736-f1a70840cdc6","url":"/media/apps/01a0fd76-c0fc-7e56-a87f-7591eaa7c132/01a106ca-4adc-7e9a-aec6-ca0a2fbc488e.png","width":1440,"height":900,"altText":"ResolveHQ homepage header with Deploy to Cloudflare and View on GitHub buttons above a preview of the three-pane inbox","isPrimary":false,"sourceType":"upload"},{"id":"01a0fd77-8200-7093-976e-a170a4b84e2f","url":"/media/apps/01a0fd76-c0fc-7e56-a87f-7591eaa7c132/01a0fd77-8100-748b-8b01-94634f7c0a6d.png","width":1440,"height":900,"altText":"ResolveHQ overview with open, unassigned and urgent counts, recent tickets and a team activity trail","isPrimary":false,"sourceType":"repository"},{"id":"01a10252-4933-7990-aa2a-5b41c437fd18","url":"/media/apps/01a0fd76-c0fc-7e56-a87f-7591eaa7c132/01a10252-481a-77f7-b893-198a8ccc3e73.png","width":1440,"height":900,"altText":"ResolveHQ Automations page with two rules that tag invoice emails and route a customer domain to an agent","isPrimary":false,"sourceType":"repository"}],"licenseUrl":"https://github.com/mirza-rizvi/resolvehq/blob/f8387462e77f39ecd6ae9ecdf86984eaa1d8f7fe/LICENSE","freeTierNote":"Workers Free allows 10 ms CPU per HTTP request and 100,000 requests per day, Queues on Free include 10,000 operations per day, and D1 Free includes 100,000 rows written per day. The deployment guide reports one Free-plan signup at 29 ms of CPU and advises planning on Workers Paid before real ticket volume arrives. R2 needs a subscription checkout even for the free allowance.","freeTierSourceUrl":"https://developers.cloudflare.com/workers/platform/limits/","freeTierCheckedAt":null,"setupComplexity":"medium","setupComplexityNote":"After the button deploy with a SESSION_PEPPER secret, you add an Email Routing rule and a Resend API key with a verified sending domain, and you may need to run the D1 migrations once.","verification":{"status":"untested","testedAt":null,"versionRef":null,"deploymentMethod":null,"coreUseCase":null,"publicNote":null,"resources":[],"steps":[],"screenshots":[],"staleReason":null},"alternatives":[{"slug":"freshdesk","name":"Freshdesk"},{"slug":"front","name":"Front"},{"slug":"happyfox","name":"HappyFox"},{"slug":"help-scout","name":"Help Scout"},{"slug":"hiver","name":"Hiver"},{"slug":"hubspot-service-hub","name":"HubSpot Service Hub"},{"slug":"kayako","name":"Kayako"},{"slug":"liveagent","name":"LiveAgent"},{"slug":"missive","name":"Missive"},{"slug":"zendesk","name":"Zendesk"},{"slug":"zoho-desk","name":"Zoho Desk"}],"sources":[{"sourceType":"repository","url":"https://github.com/mirza-rizvi/ResolveHQ","lastSeenAt":"2026-10-07T12:16:30.789Z"},{"sourceType":"homepage","url":"https://getresolvehq.com","lastSeenAt":"2026-10-07T03:45:52.517Z"},{"sourceType":"docs","url":"https://github.com/mirza-rizvi/ResolveHQ/blob/dev/docs/deployment.md","lastSeenAt":"2026-10-07T03:45:52.517Z"}],"lastSourceRefreshAt":"2026-10-07T03:51:43.656Z","lastReviewedAt":"2026-10-02T16:56:02.458Z","seoTitle":"ResolveHQ: shared-inbox helpdesk on Cloudflare Workers","seoDescription":"Self-hosted helpdesk for small support teams with tickets, a help center, response targets and automations on Workers, D1, R2, Queues and Email Routing.","changeEvents":[{"id":"01a0fd8b-5748-72d1-bd8a-ce7d991ba29a","kind":"listed","summary":"ResolveHQ listed","createdAt":"2026-10-02T16:56:02.458Z","app":{"slug":"resolvehq","name":"ResolveHQ"}}]}