SupportOps AI is an API-first modular monolith for support and incident operations. It combines org-scoped auth, ticket workflows, SLA automation, analytics, audit logging, and AI suggestions that stay behind human approval.
- Org-only multi-tenancy with org-scoped RBAC
- Auth with refresh token rotation
- Ticket lifecycle with comments and priorities
- SLA sweeper with BullMQ retries and a dead-letter queue
- AI suggestions for
summarize,classify, anddraft-comment - Mandatory human approval before AI output is applied
- Backend audit logs
- Analytics summary endpoints
- Thin Next.js web UI for login, tickets, AI review, analytics, and audit logs
- OpenAPI, Docker Compose, structured logging, metrics, tests, and GitHub Actions CI
POST /v1/auth/loginPOST /v1/auth/refreshPOST /v1/auth/logoutGET /v1/meGET /v1/orgGET /v1/usersGET /v1/ticketsPOST /v1/ticketsGET /v1/tickets/:idPATCH /v1/tickets/:idPOST /v1/tickets/:id/commentsPOST /v1/tickets/:id/ai/summarizePOST /v1/tickets/:id/ai/classifyPOST /v1/tickets/:id/ai/draft-commentGET /v1/tickets/:id/ai-suggestionsPOST /v1/ai-suggestions/:id/approvePOST /v1/ai-suggestions/:id/rejectGET /v1/analytics/summaryGET /v1/audit-logsGET /health/liveGET /health/readyGET /metrics
- Copy
.env.exampleto.env - Run
pnpm install - Run
docker compose up -d --build api - Wait for
http://localhost:3001/health/readyto return{"status":"ready"}
- Copy
.env.exampleto.env - Run
pnpm install - Run
docker compose up -d postgres redis - Run
pnpm prisma:generate - Run
pnpm prisma:migrate:dev - Run
pnpm seed - Run
pnpm dev:api - In a second terminal run
pnpm dev:web
- Copy
.env.exampleto.env - Run
pnpm install - Run
docker compose up -d postgres redis - Run
pnpm prisma:generate - Run
pnpm prisma:migrate:dev - Run
pnpm seed - Run
pnpm dev:demo
owner@supportops.local/Passw0rd!admin@supportops.local/Passw0rd!agent@supportops.local/Passw0rd!viewer@supportops.local/Passw0rd!
- Default local setup uses
AI_ENABLED=false, so AI routes return deterministic fallback suggestions without calling OpenAI. - To use OpenAI for real suggestions, set
AI_ENABLED=trueand provideOPENAI_API_KEYin.env. - Approval is always required before a suggestion is applied to a ticket.
- Open
http://localhost:3000and log in asagent@supportops.local. - Open the seeded billing timeout ticket from the tickets list.
- Add a comment or move the ticket status to
triagedorin_progress. - Generate
summarize,classify, ordraft-commentsuggestions. - Approve one suggestion and reject another.
- Open analytics to show the summary cards and backend-driven breakdown tables.
- Log out, then sign in as
admin@supportops.localand open audit logs.
- Start on
/loginwith the seededagent@supportops.localaccount. - Open the billing timeout ticket from
/tickets. - On
/tickets/:id, show the live ticket state card, update the status, add one short comment, then generate AI suggestions. - Keep the ticket detail page on screen long enough to show that suggestion cards are separate from the applied ticket state, then approve one suggestion and reject one.
- Open
/analytics, then switch toadmin@supportops.localand finish on/audit-logs.
- Agent: agent@supportops.local
- Admin: admin@supportops.local
- Owner: owner@supportops.local
- Viewer: viewer@supportops.local
Password: "Passw0rd!"
pnpm --filter @supportops/web lintpnpm --filter @supportops/web typecheckpnpm --filter @supportops/web buildpnpm ci:localpnpm exec prisma validate --schema prisma/schema.prismadocker compose configpnpm smoke:authpnpm smoke:ticketspnpm smoke:aipnpm smoke:demo
- Web UI:
http://localhost:3000 - Swagger UI:
GET /docs - OpenAPI JSON:
GET /docs/json - Ready:
GET /health/ready - Live:
GET /health/live - Metrics:
GET /metrics



