← All case studies
AI-Assisted BackendIn Development

ResolveAI.

AI-Assisted Helpdesk & Incident Triage Platform

A helpdesk backend where the model produces triage signals and deterministic policy turns them into priority and routing. The AI suggests; the system decides — so every decision stays explainable and testable. In active development; nothing here is presented as deployed.

  • —Ticket state machine with an append-only audit trail
  • —Deterministic policy on top of LLM signals
  • —Hybrid retrieval — pgvector + full-text, fused with RRF

01

Problem & goal

Support teams triage tickets by hand: priority depends on who reads it first, SLAs get tracked inconsistently, and dozens of tickets from the same incident get handled one by one. ResolveAI turns unstructured tickets into structured work — without handing the decisions to a model.

02

How it works

  • —A ticket enters through the REST API and commits alongside its outbox event in one transaction — creation never waits on an LLM call.
  • —A worker claims events with SKIP LOCKED, strips PII, and asks the model for structured triage signals.
  • —Deterministic policy converts those signals into priority and routing, writing every transition into the state machine's audit trail.
  • —Related tickets are correlated into incident proposals, confirmed by a human, then updated once and fanned out.

Architecture

  1. POST /tickets
  2. Outbox
  3. Worker
  4. PII Redaction
  5. LLM
  6. Policy
06 /

Deterministic rules compute priority and routing.

VISUALS

Project screens

Ticket workflow

Project screenshot pending

03

Security model

  • —JWT access + refresh tokens with four roles — CUSTOMER, AGENT, TEAM_LEAD, ADMIN.
  • —Tenant isolation enforced across the backend, not just filtered in the UI.
  • —PII is redacted before any model call; every generated claim must carry a citation.

04

Built with

Java 21Spring Boot 3.xPostgreSQL 16pgvectorRedisMinIO / S3PrometheusGrafanaReactTailwind

Live progress

Updated as work lands

Built so far

  • ✓Modular monolith core: IAM, Ticketing, SLA and Platform modules
  • ✓Ticket state machine with an append-only audit trail
  • ✓JWT auth with refresh tokens, four roles, tenant isolation
  • ✓PostgreSQL schema with versioned migrations
  • ✓Outbox worker claiming events with SKIP LOCKED
  • ✓PII redaction pipeline before any model call

Next up

  • →Hybrid retrieval: pgvector + full-text, merged with Reciprocal Rank Fusion
  • →Citation-enforced draft generation and its evaluation harness
  • →Incident correlation and the human-confirmed proposal gate
  • →Prometheus + Grafana observability dashboards

05

Challenges & tradeoffs

AI in the request path

An LLM call inside ticket creation would make it slow and unpredictable — so signals are produced asynchronously behind an outbox worker, and the request path stays deterministic.

Trustworthy drafts

Generated text can invent facts. Every draft claim must be backed by a citation, and drafts with low citation coverage are suppressed rather than sent.

Restart safety

Workers crash mid-job. SKIP LOCKED plus the outbox means an event is processed exactly once, and nothing is lost on restart.

06

Decisions

PostgreSQL for SKIP LOCKED, partial unique indexes, JSONB, full-text search and pgvector in one engine.

PostgreSQL for SKIP LOCKED, partial unique indexes, JSONB, full-text search and pgvector in one engine.

An outbox so ticket persistence and event creation are atomic

An outbox so ticket persistence and event creation are atomic — even if the worker dies mid-flight.

Deterministic policy after the model keeps business decisions explainable, testable and reviewable.

Deterministic policy after the model keeps business decisions explainable, testable and reviewable.

Next