Featured · 03 · Internal tooling

IT Helpdesk & Automation

A centralized ticketing system that learns to route itself.

A PHP/MySQL web app that centralizes IT support operations for a higher-ed environment — with keyword-based auto-routing that cut resolution time by 30%.

Role
Solo · Full-stack
Context
Higher-ed IT
Stack
PHP / MySQL / Apache
Status
● Live
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:

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

Impact

30%
faster ticket resolution
200+
tickets handled
2
portals (user + admin)

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.