Queue Cure — Real-Time Clinic Queue Management System
Small and mid-sized clinics rely on manual token systems — paper slips, verbal calls, or
whiteboard numbers — that leave patients anxious, uninformed, and frustrated. There is no
real-time visibility: patients don't know how many people are ahead of them, how long the
wait is, or whether the doctor is even available. Receptionists handle this with repetitive
manual updates and repeated patient enquiries. This creates a chaotic, inefficient experience
on both sides of the desk — wasted time, poor communication, and zero measurable throughput.
Queue Cure was built to solve this with a fully sync
Process
I started by mapping the core pain points: the receptionist needs to register, manage, and
call patients — the waiting room needs to display live queue state without manual refresh.
I chose Socket.IO for real-time bidirectional sync over HTTP polling. I architected a
dual-dashboard model — one React route for the Receptionist Desk, another for the Patient
Display — both subscribing to the same server-emitted events.
I first built the Express server with in-memory state (queue array, stats object, doctor
status). Then built the receptionist form with token auto-generation and validation. One
early mistake: I tried managing state locally in each client, which caused desync on
reconnect. I fixed this by making the server the single source of truth — emitting
on every socket connection.
Results
Both dashboards sync in under 100ms via WebSocket events — no polling, no page refresh.
The patient display auto-calculates estimated wait time and renders Comfortable / Moderate /
Busy Hour status dynamically. The system supports full daily reset, live announcements,
doctor shift tracking, and token history logging.
ARIA live regions, keyboard navigation, and semantic HTML ensure screen reader compatibility.
If I had conducted formal user testing, key metrics to measure would be: reduction in
receptionist interruptions per hour, patient-reported wait clarity, and queue throughput speed.
Reflection
I'd add a persistent database (SQLite or PostgreSQL) instead of in-memory state, so queue
history survives server restarts. I'd also build a mobile-optimized view for patients to
check their token position from their phone, removing the dependency on a physical display
screen. Early on, I underestimated the complexity of reconnection handling — I'd design
the socket event contract more formally upfront. Finally, I'd run usability tests with
actual clinic receptionists to validate the dashboard layout before building, rather than
iterating purely on assumptions.