Wooble
Back to Visshva's profile
Verified on Wooble

Queue Cure: Live clinic queue with real-time wait estimates

Replaced paper tokens with a 2-screen live queue — check-in in under 10 seconds, zero page refreshes.

Visshva Ramasubramanian

Overview

76% of India's 1.5 million clinics still run on paper token slips. Patients wait 2-3 hours with no idea when they'll be called. Receptionists track the queue from memory. Doctors have no visibility. I built Queue Cure to give clinics one shared queue state: reception controls it on one screen, patients follow it on a waiting room display or their phone. No shouting token numbers, no refreshing the page, no guessing wait times. I started by mapping the two users: receptionist (fast check-in, call next, recover from mistakes) and patient (see current token, position, estimated wait). For real-time sync I chose Socket.io with full queue snapshots on every change. Partial updates risk the two screens disagreeing; a snapshot keeps reception and waiting room identical. Wait time uses patientsAhead × effectiveAvgMinutes. The average comes from the last 20 completed consultations, falling back to a receptionist-set baseline until enough data exists. That way estimates reflect today's pace, not a hardcoded guess. Backend: Express + MongoDB Atlas on Render. Frontend: React + Vite on Vercel. I used atomic findOneAndUpdate so two "call next" clicks don't break the queue. Tested live sync by running reception and /waiting Live app: queue-cure-visshva.vercel.app - Patient check-in in 1 step (name + Enter, auto token) - 0 page refreshes: waiting room updates when reception adds or calls a patient - Wait time switched from receptionist baseline (12 min) to rolling average after 2 completed visits (0.8 min in demo) - 2 screens stay in sync via Socket.io queue:update events - Automated smoke tests: 20/20 API and socket checks passed Stack: React, Express, Socket.io, MongoDB Atlas. GitHub: github.com/visshva-r/Queue-Cure I would add QR self check-in so reception only handles edge cases, not every patient. Multi-clinic support is half-built in the schema but not exposed in the UI yet. On Render free tier the backend sleeps when idle, so the first load can take 30-60 seconds. I'd use a paid instance or a keep-alive ping for production clinics. I'd also add SMS or WhatsApp when a patient is 2 tokens away, and a simple doctor dashboard for daily stats. The core queue logic is solid; the gaps are mostly around scale and notifications.

Links & files

Artifacts

5