Good Call Technologies
Legal Tech / Telecom

Outcomes
Twilio TwiML + Postgres-backed queue + Node.js queue manager handle precinct call escalation from operator pools to on-call attorneys to voicemail.
Operator dashboard subscribes via SSE for queue state and uses Twilio's JS SDK for hold, transfer, and conference. No native client required.
Overview
Good Call Technologies connects people in police custody with attorneys. I built the Twilio-based voice routing system that powers 24/7 attorney connections from precinct phones, handling call flow logic, queue management, and automatic routing to available operators.
Alongside the phone system, I developed the operator dashboard where staff manage scheduling, handle live calls (hold, transfer, conferencing), and monitor real-time notifications.
Challenge
People detained in precincts need immediate access to legal counsel, but connecting them to attorneys around the clock is a logistical challenge. The system needed to be reliable, handle call queuing during peak hours, and give operators full control over active calls.
Tech stack
Architecture
Key features
Voice Routing
Twilio-powered call flow system with queue management, enabling 24/7 attorney connections from precinct phones with automatic routing to available operators.
Operator Dashboard
Real-time dashboard with scheduling, admin settings, notifications, and full call controls: hold, transfer, and conferencing.
Call Management
Queue management system that handles peak-hour call volume, routes to available attorneys, and tracks call history for reporting.
Lessons & tradeoffs
This system connects people in police custody to an attorney, around the clock. There is no 'we'll fix it Monday' for someone sitting in a precinct. Every retry, fallback, and escalation rule had to be modeled explicitly, because the cost of a dropped call isn't a bad metric, it's a person without counsel.
The challenge
24/7 telephony for people in custody, where a dropped or misrouted call isn't a bad metric, it's someone without a lawyer at 3am.
What I decided
I modeled every retry, fallback, and escalation path explicitly in the queue manager instead of leaning on defaults.
What I took from it
Life-critical systems are unforgiving. If a failure mode isn't written down and handled, it will happen on the worst possible night.
The challenge
Hold, transfer, and conference are the same three buttons every dashboard has. On paper there's nothing to differentiate.
What I decided
I optimized the operator dashboard for response speed under peak load rather than piling on more controls.
What I took from it
Operator UX matters more than operator features. Under load, how fast the buttons respond is the whole product.
The challenge
Twilio makes the call itself easy and quietly leaves the hard parts (failover, audit logging, custody-specific routing) as your problem.
What I decided
I let Twilio own the media and kept failover, audit trails, and routing rules in my own queue manager.
What I took from it
Don't fight the platform for control of the call. Do own the metadata around it, because that's where compliance and reliability live.