Inspiration

Small chiropractic clinics in India run their front desk on WhatsApp, by hand. The doctor is mid-adjustment while messages pile up. Cancelled slots stay empty, patients quietly drop out of their care plan, and every missed visit is lost income. Now and then a message describes numbness after a fall, which needs an emergency room, not a booking.

What it does

AgentGrow Bookings answers the clinic's WhatsApp. NVIDIA Nemotron 3 Super on Nebius Token Factory does all of the reasoning and tool calls:

  • Books, moves and cancels appointments in English, Hindi or Hinglish ("kal shaam 6 baje adjustment ho jayega?"). Availability is enforced by the database, never by the model.
  • Keeps patients safe. Red-flag symptoms are never booked: the doctor is alerted and the patient is sent to emergency (112). New patients start with a consultation. No medical advice.
  • Sets itself up from one photo of the fee board: a vision model on Token Factory reads it, Nemotron confirms the list in chat, and a Tavily search prefills address and hours.
  • Keeps the doctor in charge inside WhatsApp. Anything outside the rules (a package discount, a red flag) goes to the owner's phone; the owner's reply reaches the waiting patient, in the patient's language.
  • Wins back revenue and reports it in rupees: waitlist refill on cancellation, care-plan reminders for overdue patients, a ₹300 deposit after a no-show (Cashfree test mode), and a Monday report: "Recovered: ₹2,700".

How we built it

  • FastAPI + SQLite; one tool-calling agent loop with two roles (patient receptionist, owner assistant) and different tool sets.
  • The model proposes, the code decides: slots are computed in SQL, bookings run inside BEGIN IMMEDIATE with a unique index, so two patients can never get the same slot (an 8-thread race test checks this).
  • Messages the clinic starts (owner answers, waitlist offers, reminders) are also Nemotron turns from a system note, so they come out in each patient's language; patients cannot forge those notes.
  • We chose the model with an eval, not a guess. eval/run.py drives the real agent through 11 clinic scenarios with a frozen clock and judges the database state. Nemotron 3 Super: 22/22 at 3.1 s per turn and ~$0.002 per conversation; Nano 21/22 at 16.2 s; Lightning 20/22 at 1.4 s.
  • Deployed as a container on k3s behind a Cloudflare tunnel; WhatsApp Cloud API webhook with HMAC verification. 79 offline tests.

Challenges we ran into

  • The eval caught real bugs before users did: Lightning once said "cancelled" without cancelling, and a prompt change once made Super skip the doctor alert on a red flag (now fixed and re-verified).
  • Relative Hinglish dates ("parso", "kal subah") needed a 7-day calendar in the prompt.
  • Token Factory has no NVIDIA vision model yet, so fee-card reading uses Qwen3.8-27B (3/3 cards, including a tilted Hindi board); Nemotron does everything else.

Accomplishments that we're proud of

A complete product a clinic could use tomorrow: safe triage, revenue recovery measured in rupees, and zero-dashboard setup from one photo, at about ₹0.18 per conversation.

What we learned

Scripted evals that check database state, not wording, make model choice and prompt changes safe.

What's next

Voice notes (once a hosted NVIDIA speech model is on Token Factory), real clinic pilots, and a second business kind: lead conversion for AgentGrow.io.

Built With

Share this project:

Updates

Submission history