This project was designed and built independently, using a realistic business scenario and sample data, not live client work. It's here to show how I think through a problem and build the solution end to end.
The Problem
Every ticket needed review, categorization, prioritization, department assignment, and a reply, all done by an agent. During busy periods, urgent tickets got missed while agents burned time on repetitive admin instead of solving the cases that actually needed a person.
The Solution
A Jotform captures each request and sends it to n8n via webhook. Gemini analyzes the ticket (category, priority, sentiment, department) and drafts a response. High-priority tickets ping the support team on Slack immediately, and every ticket lands in a Review Queue.
Instead of emailing the customer right away, n8n generates a pre-filled review form and posts the link to Slack. A reviewer can approve the draft or request changes without the customer ever seeing it. If changes are requested, the AI rewrites using that feedback until it's approved, then the final email goes out automatically.
The Result
Figures below are illustrative estimates based on a small SaaS company's operations, not measured client data. This is a portfolio build, not a live deployment.
Routine, well-documented questions resolve in seconds instead of the 15–30 minutes an agent would spend searching docs and drafting a reply. More complex or frustrated conversations get routed to Slack with AI-prepared context already attached, cutting investigation time before an agent even starts.
For a team handling 200 tickets a month at a conservative 40% AI auto-resolution rate, that's roughly 80 tickets automated monthly, about 26.7 hours of agent time back, at $0/month in software costs, plus faster handling on the escalated tickets that still need a person.
Architecture
Select a stage to watch this ticket move through the workflow.
Customer Ticket
Received- Subject
- Internet connection unavailable
- Priority
- Pending
“My internet has been down since this morning. I already restarted my router.”
How It Works
- 1
Customers submit a support request via Jotform (contact info, issue details, customer type).
- 2
n8n receives the submission through a webhook, parses the raw payload, and converts it into clean structured data.
- 3
The original ticket is stored in Google Sheets immediately, before any AI processing, so the raw request is preserved no matter what happens downstream.
- 4
Gemini analyzes the ticket and returns structured JSON: category, priority, sentiment, department, escalation status, summary, and a draft reply.
- 5
High, Critical, or escalation-flagged tickets trigger an immediate Slack notification.
- 6
Every ticket goes into a Review Queue in Google Sheets, storing all the AI-generated fields including the draft.
- 7
A support agent opens the review form from Slack and either approves the response or leaves natural-language feedback. If revisions are requested, Gemini rewrites based on that feedback and the cycle repeats until approved.
- 8
Once approved, n8n sends the final email automatically and updates both the Review Queue and the Support Tickets database.
Engineering Decisions
The choices that mattered most, and the reasoning behind them.
Human review as the error-handling mechanism
Rather than trying to make the AI perfect, every draft goes through a mandatory human check before a customer sees it. That review step catches tone issues, factual errors, and misclassification that a purely automated system would miss.
The raw ticket is saved before the AI touches it
AI processing happens after the ticket is already logged, so a failed or slow model call never means a lost submission. Whatever else breaks downstream, the original request survives.
Two workflows, not one
Intake and classification run separately from reviewer-decision processing, so scaling one, like adding reviewers, never touches the other's logic.
Structured output over free text
Gemini returns a fixed JSON schema (category, priority, sentiment, department, reasoning), not a paragraph. Downstream steps can rely on the shape of the response instead of parsing it.
Escalation by tier, not by ticket count
High, Critical, and escalation-flagged tickets alert the team on Slack the moment they're classified, so an urgent problem doesn't wait behind a queue of routine ones.
Reliability, Security & Scale
Error Handling
Every AI draft goes through a mandatory human check before a customer sees it, catching tone issues, factual errors, or misclassification up front. That review step is the error-handling mechanism. When a reviewer asks for changes, the AI regenerates using that feedback rather than someone fixing it manually outside the system. The original ticket is stored before any AI step runs, so it survives even if that step fails.
Logging & Monitoring
Every ticket is logged on submission, independent of how the AI later classifies it. The Review Queue tracks the full lifecycle of each response (draft, feedback, revision count, final reply), which doubles as a useful signal for AI response quality over time.
Security & Data Handling
Customer PII is captured only through the Jotform intake and stored in a private, access-controlled sheet. Credentials are managed through n8n's credential store, not embedded in the workflow. The human-approval gate doubles as a data safeguard too: nothing AI-drafted goes out without a person confirming it.
Scalability
The two-workflow split (intake/classification vs. reviewer-decision processing) lets each half scale independently: adding reviewers doesn't touch the classification logic. Over time, the "Content Gaps" log (documentation gaps surfaced during classification) can help identify which repetitive tickets are strong candidates for full auto-resolution once confidence in the AI's output is established.
Skills Demonstrated
The technical capabilities this build required, at a glance.
Why I Built It This Way
I didn't want to choose between speed and accuracy, so I didn't. The AI drafts every reply in seconds; a person still approves it before a customer sees it. That's slower than fully automated, and faster than fully manual, and for anything customer-facing, that trade is worth making.
Appendix
Supporting reference material for this build.
Sample AI Prompt Used
You are a senior SaaS customer support specialist. Analyze the customer
support ticket and return structured JSON.
Determine:
• Category
• Priority
• Sentiment
• Department
• Escalation Required
• Ticket Summary
• Professional Customer Reply
Categories:
- Billing
- Technical Issue
- Bug Report
- Refund Request
- Account Access
- Sales Inquiry
- Feature Request
- General Question
Return only valid JSON matching the required schema.Screenshots
Got a process like this?
If any of this sounds like a bottleneck you're living with, tell me about it. I'll be straight about whether automation is worth it.