Loading project...

Loading project...
AI-powered support ticket management platform that eliminates manual triage
A concise look at the project, its purpose, and its value.
TickMate is a full-stack support ticket management platform that uses AI to automate ticket triage. It automatically summarizes incoming tickets, assigns priority levels, identifies required skills, and finds similar resolved tickets through vector similarity search.
Support teams and SaaS companies that want to reduce manual triage time and help agents resolve tickets faster with contextual, AI-powered insights.
Agents get pre-analyzed tickets with AI-generated summaries, priority suggestions, skill-based routing, and related ticket recommendations — reducing time spent on manual categorization and research.
Most support platforms require agents to manually read, categorize, and research every incoming ticket. TickMate was built to automate the grunt work so agents can focus on actually resolving issues.
Support teams waste significant time on repetitive triage work: reading every ticket from scratch, guessing priority, figuring out which team member has the right skills, and searching through past tickets for similar issues. This manual process creates bottlenecks, inconsistent prioritization, and longer resolution times.
The impact: Agents spend 30-40% of their time on triage instead of resolution. High-priority tickets get buried under volume. New agents lack context from past resolutions. Institutional knowledge stays locked in individual memories instead of being accessible across the team.
TickMate adds an AI intelligence layer on top of a standard support ticket system. Every ticket is automatically analyzed upon creation using OpenAI's GPT-4.1-mini via LangChain. The AI generates structured outputs: a concise summary, priority level, required skills, and contextual notes. Vector embeddings are stored in Qdrant for similarity search against past resolved tickets. All of this happens asynchronously through Inngest so the API remains fast.
What this project can do
Every ticket is automatically summarized by AI — agents get the gist without reading walls of text.
AI analyzes urgency and impact to suggest priority levels, ensuring critical issues surface immediately.
AI identifies required skills from ticket content and routes to team members with matching expertise.
Agent queries previous resolved tickets semantically — finds relevant solutions even with different wording.
Visual insights into ticket volume, resolution times, AI analysis accuracy, and team performance.
Three-tier access: Admin, Agent, and User roles with granular permissions for every operation.
Every ticket action is logged with timestamps and actor details for full accountability and compliance.
Agents and admins receive instant notifications for ticket assignments, updates, and escalations.
Visual walkthrough of the project
How the system is designed and how components interact
TickMate uses a modern full-stack architecture with a clear separation of concerns. The Next.js frontend communicates with an Express REST API. AI processing runs asynchronously via Inngest event-driven functions. PostgreSQL handles transactional data while Qdrant manages vector embeddings for semantic search.
Visual overview of system design, data flow, and key processes
Flow of an incoming ticket from submission through AI analysis, priority assignment, skill-based routing, and final agent resolution.
Sequence diagram showing how a ticket moves through the system from customer submission to agent notification.
The technologies used to build this project
The hard problems that needed solving
How the system is designed for speed and scale
All AI analysis runs asynchronously via Inngest event-driven functions. The API response time for ticket creation is unaffected by AI latency, maintaining sub-100ms response times for the critical path.
PostgreSQL with Drizzle ORM provides type-safe queries with proper indexing on frequently accessed columns (status, priority, assignedTo, createdAt). Pagination is cursor-based for ticket listings to avoid offset performance degradation.
Qdrant vector search uses HNSW (Hierarchical Navigable Small World) indexing for approximate nearest neighbor search, providing sub-50ms similarity queries even with thousands of ticket embeddings.
Clear separation between web server, API, background workers, and vector database allows independent scaling of each component based on load patterns.
How the system is protected
All authentication uses HttpOnly cookies that cannot be accessed by JavaScript, preventing XSS-based token theft.
Three-tier authorization (Admin, Agent, User) with granular permission checks on every protected route and operation.
All API inputs are validated using Drizzle ORM schema validation and additional Zod validation on critical endpoints.
All secrets (API keys, database URLs, JWT secrets) are managed through environment variables, never hardcoded or committed.
API endpoints are protected by in-memory rate limiting to prevent abuse and brute force attacks.
Every state-changing operation is logged with actor identity, timestamp, and action details for complete accountability.
What I learned building this project and what I'd do differently
The most impactful architectural decision was moving AI processing to background jobs. Early prototypes ran AI synchronously and the user experience was terrible. Inngest made this separation clean and reliable.
Using LangChain's structured output parser was a game-changer. Free-form AI responses are unpredictable and hard to process programmatically. Defining a strict output schema made the AI results reliably machine-readable.
For support ticket similarity search, Qdrant with HNSW indexing provides fast results. But vector search isn't a silver bullet. For exact matches on status or priority, traditional database queries are far more efficient.
Building the audit logging middleware from day one was a good call. Retrofitting audit trails into an existing system is much harder than designing it in from the start.
I'd add real-time ticket updates via WebSockets so multiple agents see changes instantly. I'd also implement a more sophisticated skill-based routing algorithm that considers agent workload and availability, not just skill match.
I build production-ready AI systems that solve real business problems. Let's discuss what you need.