The Problem
Maintenance tasks come in from Breezeway at all hours. Someone has to read the task, figure out what skill is needed, check who's available, and message the right tech. That's 5–10 minutes per task, dozens of times a day.
At 200+ properties, that's a dispatcher's entire day — just on routing.
How It Works
Trigger
n8n workflow polls Breezeway every 5 minutes for new unassigned tasks.
Classification
89 keyword-pattern rules map task descriptions to 10 skill categories (plumbing, electrical, HVAC, appliance, general, etc.). Example: "toilet," "leak," "faucet" → Plumbing.
Tech Matching
Supabase RPC classify_and_match_tech() ranks all technicians by skill level for that category, then checks Timeero's live clock-in data to see who's actually on shift.
Routing Logic
HIGH/URGENT tasks → only techs currently clocked in. No one on? → immediate escalation to dispatch managers via Slack @mention. NORMAL/LOW → full ranked list regardless of clock status.
Delivery
Auto-DMs the best-match tech on Slack with task details + Breezeway link.
Escalation
Separate workflow runs every 2 hours (7am–6pm MT, Mon–Sat). If a dispatched task hasn't been started within 2 hours (urgent) or 4 hours (normal), it escalates to the dispatch manager channel with @mentions.
Exclusions
15 recurring template task IDs are excluded — scheduled maintenance that doesn't need dispatch.
The Stack
Data Flow