Inspiration

What it does

How we built it

Challenges we ran into

Accomplishments that we're proud of

What we learned

What's next for No-Show-killer

Inspiration

Missed appointments cost small clinics and practices real money every week, and they throw off the whole day's schedule. Most no-show tools just send a generic text or email that's easy to ignore. We wanted something that actually works, an AI voice agent that calls the patient, has a real conversation to confirm the appointment, and asks about rescheduling right there if they can't make it.

What it does

No-Show Killer lets a front desk add appointments through a simple web form, then kicks off an AI powered confirmation call for each one using the CALL-E voice API. Patients get an actual short phone call confirming their appointment, and the outcome, whether that's confirmed, declined, no answer, whatever, comes back live to a dashboard along with a summary and full transcript of the call. There's also a nightly job that automatically confirms every pending appointment for the next day, so nothing gets missed.

How we built it

The backend is a Node and Express server that shells out to the CALL-E CLI to plan and place calls, then polls for status and saves everything to a JSON file. The frontend is plain JS with a WebSocket connection so the dashboard updates in real time, showing ringing, connected, talking, as it happens, without needing to refresh the page. A cron job handles the nightly batch of calls on its own.

Challenges we ran into

Getting auth working properly was trickier than expected, especially juggling environment variables in an ESM project, and we caught a hardcoded API key before it accidentally made it into version control, which was a good reminder to slow down around secrets.

We also ran into a flicker problem early on, since our first version just re-rendered the whole appointment list every time something updated, which made the page jump around while a call was in progress. We ended up rewriting it to only update the parts of the page that actually changed.

The biggest one was call speed. Early test calls were taking 30 to 40 seconds just to start ringing, which felt way too slow. Turned out the calling service defaulted to a Singapore based endpoint no matter where the patient actually was, so we started inferring the region from the patient's phone number and passing that through, and it made a huge difference.

Accomplishments that we're proud of

Getting a real, working voice agent that patients actually talk to, not a script they hang up on, feels like the core win here. We're also proud of cutting call start times down so dramatically once we tracked down the region issue, and of building a dashboard that updates live without feeling glitchy or unstable, which took a few iterations to get right.

What we learned

Small infrastructure choices, like which region an API call gets routed through, can matter just as much as the actual application logic when it comes to how fast and smooth something feels to use. We also learned that more live updates isn't automatically better, since it can make an interface feel shaky if you're not careful about how you handle it.

What's next for No-Show-killer

We'd like to expand phone number to region mapping so it covers more countries automatically instead of just the couple we hardcoded for now. Rescheduling is another big one, right now the bot can note that a patient wants a new time, but it doesn't actually rebook them, so closing that loop would make the tool a lot more useful on its own. We're also thinking about analytics for clinics, things like no-show rate trends over time, and giving staff the ability to edit or cancel appointments directly from the dashboard instead of only adding new ones.

Share this project:

Updates

Submission history