Web — 2026

RooTicket

Discord ticket-bot med web-dashboard - de features konkurrenterne tager betaling for, med betalte tiers til power users.

  • TypeScript
  • Next.js
  • discord.js
  • PostgreSQL
  • Mantine
  • Docker
  • OpenAI
  • Hugging Face

Nøglepunkter

  • 01 pnpm-monorepo: discord.js v14-bot og Next.js 16-dashboard deler én Prisma-pakke
  • 02 PostgreSQL 16 via Prisma - 20 modeller og 20 migrationer for guilds, subjects, tickets og audit
  • 03 Ticket-livscyklus med tilladelses-matrix pr. subject, claim, claim-exclusive permissions og auto-close
  • 04 Forms og modals med validering, leveret direkte i ticket-kanalen
  • 05 Vedhæftninger spejles til S3 pr. guild med signed proxy-URL, retention-sweeper og kvoter
  • 06 Dashboard på React 19 + Mantine 8 med transcripts, insights, audit-tabel og subject-editor

RooTicket er en Discord ticket-bot med tilhørende web-dashboard - de features konkurrenterne låser bag betaling, med betalte tiers til power users. Kodet som pnpm-monorepo med en discord.js v14-bot og et Next.js 16-dashboard (React 19 + Mantine 8), der deler én Prisma-pakke oven på PostgreSQL 16 og Redis 7.

Botten dækker den fulde ticket-livscyklus (open, claim, close, rename) med tilladelses-matrix pr. subject, claim-exclusive permissions, forms og modals med validering, audit log, close-scheduler på inaktivitet og en backfill der genopbygger oversprungne beskeder ved start. Vedhæftninger spejles til S3-kompatibel storage pr. guild med signed proxy-URL, retention-sweeper og kvoter, og en guild kan køre sin egen bot-token gennem en worker pool. Dashboardet dækker transcripts med Discord-flavoured markdown, insights med heatmap og svartid, audit-tabel, subject-editor med tilladelser, meldinger og logging samt whitelabel og Paddle-billing. UI’et findes på dansk, engelsk og norsk.

Drift og release er også bygget ind: GitHub Actions kører typecheck, lint, build og Vitest, og en grøn main auto-deployer til en VPS bag Caddy, hvor prod-secrets ligger SOPS/age-krypteret i repoet. Koden er proprietær og repoet er privat.