The help desk you run yourself.

CapyDesk ships as one Go binary and one PostgreSQL database. Email, Telegram, Web Push and a customer portal land in the same ticket conversation, with the day-to-day polish of a commercial SaaS, on your own infrastructure.

CapyDesk ticket conversation in dark mode with the details rail open
GoFiber v3PostgreSQLIMAP ingestionTelegramWeb PushSSEAGPL-3.0 GoFiber v3PostgreSQLIMAP ingestionTelegramWeb PushSSEAGPL-3.0
1 Go binary to deploy
4 Channels into one ticket
0 Vendor accounts
100% Self-hosted, AGPL-3.0

Everything a busy desk needs

Ticket lifecycle, SLA clocks, multi-channel notifications and a customer portal. The workflow a real operations team runs every day, in one deployable binary.

Ticket lifecycle & SLA

Create, assign, prioritize, tag and track every ticket. SLA clocks, snooze and breach alerts built in. Every panel states exactly what it counts.

Conversation-first

Public and internal comments, CCs and followers, auto-reopen on customer replies, full audit history on every thread.

Customer portal

Passwordless magic-link login, a mobile-first timeline and real-time toasts over Server-Sent Events.

Phone client

Queues with swipe-to-take, one-round-trip ticket opening, a docked composer and saved replies.

Email automation

IMAP polling turns inbound mail into tickets; outbound through SMTP, SendGrid, Mailgun or ZeptoMail.

Notification matrix

Bell, browser notifications, Telegram and email. Per-event routing with roll-ups, mutes and quiet hours.

One desk, every screen

The same binary serves the full desk, the customer portal and the phone client. Dark mode included.

Work the conversation, not the queue

Every ticket opens as a conversation: original post, replies, internal notes, time log and a details rail with SLA, priority and assignment.

CapyDesk ticket conversation in dark mode with the details rail

Service quality at a glance

SLA attainment, first-response percentiles, CSAT and volume trends. Measured honestly, counted exactly.

CapyDesk dashboard with SLA attainment and first response panels

A pocket desk for technicians

Below 1024px the same app becomes the phone client: queues, swipe-to-take, docked composer and push with actions.

CapyDesk phone client showing a ticket conversation

Every channel lands in the same ticket

One notification matrix routes each event to the right place: per event, per person, with quiet hours.

Email

IMAP polling in, SMTP or a provider out.

Telegram

Lifecycle events as channel threads; per-agent DMs.

Web Push

VAPID push with actions and an app-icon badge.

Web portal

Magic-link login and live toasts over SSE.

Self-hosted. Inspectable. Yours.

Every part is open: clone the repo, run it on your own metal, fork it. The parts list is public.

License
AGPL-3.0
Runtime
Go 1.23 · Fiber v3
Database
PostgreSQL 16+
Source
git.ntg.co/Quixotic/capydesk

Ready when you are.

Open the desk, or take the source and run it yourself.