Active queue · auto-routed
#1042
VPN connection failed — Lab 3
→ Networks
2m ago
#1041
Printer driver missing — Wilson Hall
→ Hardware
11m ago
#1039
Password reset — faculty portal
✓ auto-resolved
1h ago
keyword → category → on-call routing · 30% faster resolution
The challenge
IT support was drowning in email. Tickets arrived via five different channels, routing happened by reading subject lines manually, and every common request (password reset, VPN setup, printer drivers) went through a human first — even when the answer was always the same.
The fix had to run on whatever shared hosting we already paid for. No containers, no cloud. PHP, MySQL, Apache.
My role
Solo full-stack build, deployed to cPanel. Key decisions:
- Two portals, one database — user portal for submission and status, admin portal for triage + assignment.
- Keyword-based auto-router — tagged categories with weighted keywords, scored each incoming ticket, and routed above a confidence threshold.
- Auto-resolution playbook — common requests (password reset, standard driver install) linked to a self-serve flow before a human saw the ticket.
- Audit log on everything — every status change written with user, timestamp, and rationale.
How routing works
Each category has a set of weighted keywords. On ticket submission, the system tokenizes the title + body, scores each category, and auto-assigns above a confidence threshold. Below the threshold, the ticket sits in a triage queue for a human to handle.
// routing/classify.php — simplified
function classify($ticket, $categories) {
$tokens = tokenize($ticket['title'] . ' ' . $ticket['body']);
$scores = [];
foreach ($categories as $cat) {
$s = 0;
foreach ($cat['keywords'] as $kw => $weight)
if (in_array($kw, $tokens)) $s += $weight;
$scores[$cat['id']] = $s;
}
arsort($scores);
$best = array_key_first($scores);
return $scores[$best] >= CONFIDENCE_THRESHOLD ? $best : 'triage';
}
→ Outcome
Support-ticket resolution time dropped 30%. Tier-1 load dropped meaningfully because password resets never hit a human.
Features
- Comprehensive web app centralizing IT support operations for the whole department.
- Automation system using keyword detection to route tasks to the right technician.
- Separate admin and user portals with role-scoped views and actions.
- Ticket lifecycle logging — open, triage, assigned, resolved — with full audit history.
- Self-serve auto-resolution for common requests (password reset, driver install).
Impact
30%
faster ticket resolution
Stack
PHP
MySQL
Apache
cPanel
JavaScript
HTML / CSS
What I learned
"Automation" usually isn't ML — it's a well-maintained keyword map and a confidence threshold you trust. The first version auto-routed 40% of tickets; by iterating on the keyword weights over a few weeks (based on what humans overrode) it climbed to 70% without changing a single line of code.