Nikith Vijay

LIVE ELTH · Solace Life Clinic, Bangalore · 0→1 case study

Turning a clinic into a business that can repeat

A metabolic clinic ran on paper and four disconnected tools. We replaced all of it with one system, so patients stay on programs instead of paying single visits.

  • ▲71%of appointments book themselves1,076 of 1,517, at a 2% no-show rate
  • ₹62.8Lcollected through the systemacross 2,786 invoices in eight months, one clinic
  • ₹8ka month, replacing ₹12kcheaper than the software it displaced, and the owner opens this one
app.elthclinic.com ELTH doctor console: the Elth Card for a patient: vitals trends, diagnoses, current medications, one-tap prescription ELTH patient portal on a phone: the Beyond Obesity care program, month 4 of 12, with this week's dose
TimelineJan – Sep 2026 · 8 months StatusLive, paying subscription Team MeGAMD Built with Figma Claude Code Google Antigravity
Problem

₹12k a month for clinic software so complex the owner never opened his seat. Bookings on paper, records scattered, the doctor walking in blind.

What I did

Two days at the desk, then billing first because day-end reconciliation was the owner's trust test. Booking came fifth. Parked the AI scribe when doctors said manual-first.

Result

Reception, doctors, billing and the programs run on it daily. 1,517 appointments, 990 consultations, 823 prescriptions on WhatsApp. What they stopped using is on this page too.

01 Why this existed

Software the clinic paid for and could not use

Solace Life Clinic had been our agency's client for three years, so I heard the complaint long before it became an opportunity. DocuPulse was not missing features. It had more than ELTH would have for most of the year. It was simply too complex to navigate, so the people who needed it every day worked around it instead.

What they were paying for ₹12,000 a month

Two seats: one for billing, one for the founder-doctor.

  • He never opened his. It was too complex to learn.
  • Reception used the billing seat and nothing else.
  • Everything else lived on paper, WhatsApp and a notebook.
What that actually cost A clinic running blind

Software nobody can navigate is not a tool, it is an expense with a login.

  • The owner had no view of his own day's collection.
  • The doctor walked into every consultation without the last visit.
  • Reception coordinated the calendar on paper across two shifts.

The licence lapsing was not the reason, it was only the moment. It meant nobody had to be talked out of a renewal first. three years of trust bought the meeting. discovery had to earn the rest.

02 The desk

Who actually sits there, and what it costs them

Two days next to reception, an afternoon with the doctor, an hour with pharmacy. I wrote the users down by how much friction each one would tolerate before going back to paper, because that, not job title, decides what ships.

Reception1 receptionist

Register, book, check in, bill, collect, close the day.

Lowest
Doctor4 doctors, 1 full-time

History, prescription, tests, follow-up. Must beat the paper pad.

Low
Nurse1 nurse

Vitals before the consult, injections, samples. On a phone, standing.

Medium
Pharmacy & diagnosticsshared desk

Dispense against the prescription, stock, lab orders and reports.

Medium
Health coaches3 coaches

Diabetes and weight programs. The reason the clinic wants software at all.

Higher
Ownerthe founder-doctor

Daily collection, who came, what was billed. Reads it on his phone at night.

Reads only

Tolerance for friction, lowest to highest. Reception sets the ceiling for the whole product.

what this table got wrong

There is no pharmacy user. All 1,493 dispenses were done from the receptionist's account. The pharmacy desk was always reception wearing another hat, and I designed eight separate roles for a clinic where one person works three of them.

The five pains, ranked by how often they hurt

Not by how loudly they were complained about. That ordering is the whole case.

  1. 01
    Day-end reconciliation

    30 to 45 minutes every evening matching the receipt book, the UPI app and the card machine. Discrepancies get "adjusted". The moment reception hates most and the owner trusts least.

  2. 02
    Returning patients re-registered

    Search is scrolling a register. Families share one phone number, so searching by phone returns the wrong person. Duplicates mean the doctor sees no history.

  3. 03
    No history at the second visit

    Prescriptions live on paper the patient took home. Vitals are on a sticky note that reaches the doctor about 60% of the time.

  4. 04
    Pharmacy dispenses from a photo

    Reception WhatsApps a picture of the prescription to the pharmacy desk. Stock is counted monthly and is always wrong.

  5. 05
    Bookings are phone calls

    20 to 30 calls a day, half of them "is the doctor in today". Real, but the fifth problem, not the first. It also needs the record to exist before it is useful.

the rule I held myself to: nothing ships that adds a step to what they do today.

03 The objective

One record first. Everything else waits.

Five pains, one cause: nothing wrote to the same place. Booking, reminders and care programs are all worth building, and every one of them is worthless on top of a record the clinic cannot trust. So v1 had exactly one job, and the sequencing of the whole year falls out of it.

One patient record that every desk writes into and reads from.

Reception Doctor Nurse ONE PATIENT RECORD Pharmacy Coaches Owner

A booking that lands on a duplicate record is worse than a phone call. That is why booking shipped in February, not January.

04 What I chose between

Billing before booking, and five other calls

All six are in the December spec, written before any code and never edited since. The first one set the order of everything that followed: the obvious thing to build was not the thing the clinic needed first. Each card shows what I chose, what I turned down, and why.

Where to start
BillingOnline booking

Money reconciliation is the daily pain and the owner's trust test. Booking is the marketing wedge, and a booking that lands on a duplicate record is worse than a phone call. Billing shipped in week two, booking on 12 February.

AI in v1
NoneScribe and suggestions

"No scribe, no suggestions. The doctor's trust is spent once." Written as a non-goal in December, tested in June, and the doctors confirmed it.

Patient identity
Age at registrationDate of birth

Reception said patients do not know their DOB, so age for v1 with DOB optional. Revisit if duplicates get worse. They did, and DOB became the second identity attribute in August.

When the invoice is created
At bookingAt check-inAfter the consult

Check-in, so no-shows never create invoices. The cost of that choice shows up later: 94 invoices sit open because the visit was never completed in the system.

Who owns the medicine master
Pharmacy deskMe, at setup

Pharmacy desk, with cost price optional because they do not have it for half the stock. Optional cost price is how the stock list eventually went stale.

Second location
Branch as a fieldBranch as a feature

Solace has one branch but asked for the option. Multi-tenant from day one, every document carrying a clinic id, without building a feature nobody had asked to use yet.

05 What v1 had to do

Everything one ordinary day needs, and nothing else

v1 had to carry a patient from the front door to the receipt: register, book, check in, take vitals, see the doctor, dispense the medicine, raise the bill, take the money, close the day. Anything a patient would touch themselves waited for later.

CapabilityWhat shipsWhen
Patient registrationName, phone, age, address, emergency contact. Auto record number. Duplicate check on phone, with "same family, new person" as an explicit choice.v1
Patient searchOne box, name or phone, under a second, showing last visit date so reception picks the right family member.v1
AppointmentsDoctor shifts in 15-minute slots. Book, reschedule, cancel, check in. Blocked slots for leave.v1
ConsultationComplaint, diagnosis, prescription, tests, follow-up date. Prints on the clinic letterhead. Previous visit on the same screen.v1
VitalsWritten by the nurse before the consult, visible to the doctor on open.v1
BillingService catalog, invoice auto-created at check-in, partial payment, mode of payment, printed A5.v1
Day-end reportCollections by mode, invoices raised, outstanding, per doctor. The owner's trust test.v1
PharmacyMedicine master with stock. Dispense from a prescription. Stock decrements in the same transaction as the invoice.v1
Staff and rolesInvite by email, six roles, branch assignment. Each role sees only its desk.v1
Program membershipEnrol a patient, care plan notes, coach assigned. No billing, nothing patient-facing.shell
Online bookingPublic page, embedded on the clinic's own site, pay online.phase 2
WhatsApp to patientsConfirmations, prescription links, reminders. Waits on Meta template approval I do not control.phase 2
Patient portalPrograms, doses, exercise, records in the patient's pocket.not planned
AI scribeAuto-transcribe and draft the consultation note.not planned

The flow that could not break

A first-time walk-in, from the door to the receipt, written before any code existed.

  1. Reception searches the phone number. No match. Registers in under 60 seconds. Record number issued.

  2. Books the next open slot. Checks in. Consult invoice auto-created, marked due.

  3. Nurse opens the patient from the queue and records vitals on the tablet.

  4. Doctor opens the consult. Vitals are already there. Diagnosis, prescription, follow-up in four weeks. Prints.

  5. Pharmacy sees the prescription in its queue, dispenses, stock decrements, second invoice created.

  6. Reception collects both invoices in one payment by UPI. Receipt printed. Patient leaves.

06 How it had to be built

Built for a clinic with no IT department

One Windows machine at the front desk, a few Android phones already in pockets, no procurement process, no second engineer, and me as the only person on call. Those facts decided the architecture far more than any preference of mine did. Six bets, all made before the first commit.

Multi-tenant from day one

Every record carries a clinic id, checked on every read and write. Solace is clinic one, not the schema. Cross-clinic access is impossible by construction rather than by policy.

Phone is identity, not email

Patients do not have or check email. They never log in to the clinic system at all. The cost of that choice is families sharing a number, which is exactly where the duplicates came from.

Money moves in one transaction

Invoice, payment and stock change together or not at all. For online money the payment gateway is the source of truth, and refunds use the payment record rather than catalog prices.

Every mutation is audited

Who did what, to which record. The owner asked for this before he asked for any feature, because it is the thing that lets him trust a number he did not watch being entered.

Web app, nothing to install

Desktop for reception and the doctor, phone for the nurse and coaches. It had to run on the clinic's existing Windows machine and whatever Android phones were already in their pockets.

Boring stack, because I am on call

Managed services, daily backups, scope held small. The rule I wrote for myself: anything I could not fix from my phone at 9pm does not go in.

the bet that was not technical

Setup is done by me, not by the clinic. Catalog, staff, letterhead and shifts were all loaded before day one, so nobody ever saw an empty screen. Self-serve onboarding is a problem for a version of this product that has more than one customer. A clinic that opens a system already full of its own prices and its own doctors is not evaluating software, it is just working.

What that looks like in the data

One patient, one thread, and every desk writing onto that thread instead of keeping its own copy. These are the collections a reader would care about.

CLINIC every record carries a clinic id Patientphone + name tier Appointmentslot, source, status Visitdiagnosis, follow-up PrescriptionPDF + share token Invoiceitems, status Dispenseagainst the Rx Stockdecrements Paymentby mode Enrollmentpatient on a program Program logdoses, weights, calls Patient portalOTP, share token Audit logwho changed what, on every mutation above
Simplified. The live model has around forty collections; these are the ones that carry the thesis.

07 Success, and reality

Four targets written in December, marked in September

The spec set four thresholds at eight weeks and one leading signal, with a rule attached: if two of the four failed, stop adding features and fix adoption. Two failed.

Written 28 Dec100% of invoices raised in ELTH. The receipt book retired, not "also used".
Met

From week three. 1,130 of 1,134 completed visits are invoiced, four are not, two of those from January. Every one of 2,542 paid invoices carries a payment mode.

Written 28 DecUnder a day for the receptionist to run the desk alone.
Missed

It took two weeks. Her account first acted on 7 January, then twelve days of a handful of actions while both systems ran. On Monday 19 January she did 140 actions, and has run the desk every working day since, 207 of them.

Written 28 DecZero rupee gap between the day-end report and cash plus UPI plus card.
Partly

The precondition holds: payment mode on 100% of paid invoices. But a timezone bug pushed evening collections onto the next day until 16 February, which became the first production fix. 8% of invoices still sit open, mostly duplicate check-in invoices rather than unpaid patients.

Written 28 DecUnder 5% of new registrations turning out to be an existing patient.
Missed

One in eight. 153 duplicate groups across about 1,240 registrations, and mostly from the online booking path, where a returning patient typed a new spelling of their own name. Fixed in two passes: a shared identity resolver in July, date of birth as a second attribute in August.

The leading signal, watched weeklyIs every desk writing into the record? "If the doctor is not writing, the record is not real."
Held, and wider than I defined it

The doctor was the one I worried about. Zero visits written before 7 April, then 200 of the 221 completed appointments in August. Reception has run the desk alone since 19 January, 207 working days. And the writers I never counted are the patients: 71% of appointments now book themselves, and program members log their own weeks in the portal. The record stopped belonging to one seat and started belonging to the clinic and the people it treats.

08 What shipped

Four screens, in the order they were needed

Billing came first, because the owner had to trust the numbers before he would trust anything else. The patient's own screens came last.

  1. Jan 2 – 15Backend, audit log, invoices on the clinic letterhead
  2. Feb 12Online booking, embedded on the clinic's site
  3. Mar 7WhatsApp automation
  4. Apr 8Prescriptions and the Elth Card
1 · Booking engine

Embedded on the clinic's own website

Patients book a doctor, a blood test or a health camp straight from the clinic's site. The phone number is the identity. Type it and the record fills itself in. Paying online earns a 10% discount, because a paid slot is a kept slot.

Booking engine embedded on the clinic website, phone number auto-fills the patient's details Booking payment step: 10% off for paying online, slot held for 15 minutes
71% of all appointments

1,076 of 1,517 booked through the embed, 12 to 15 a day, at a 2% no-show rate.

Phone number = identity

No accounts, no passwords. Returning patients are recognised instantly.

2 · Staff portals

Eight doors, one building

Every role gets its own portal. Reception cannot see accounts, pharmacy cannot see consultations. Permission-scoped by design, not by policy document. Multi-clinic tenancy is built in, so a second location is a config change, not a rewrite.

Eight roles, three of them one person

Ten staff accounts live: 4 doctors, 3 coaches, nurse, receptionist, lab partner. In practice reception works the pharmacy and diagnostics desks too, which the role design did not anticipate.

Audit log on everything

Every action is attributable. When money or medicine moves, there's a name on it.

3 · Doctor console

The Elth Card: the whole patient on one screen

Trends since the last visit, diagnoses, current medications and a one-tap "Write Prescription", so the doctor sees it before the patient sits down. Vitals are charted against the last six readings, with deltas, not just today's numbers.

app.elthclinic.com Vitals tab: BP, heart rate, weight, temperature and RBS with a six-reading heart-rate trend
Trends, not numbers

Six-reading history per vital; red/green deltas versus the previous visit.

Visit history in one scroll

Every past prescription, diagnosis and PDF, newest first. 990 consultations recorded since April.

3b · Doctor console · prescribing

Prescription templates mined from the clinic's own history

ELTH scans past prescriptions and surfaces medicine combinations that were prescribed together before, and one tap applies the whole set. Doctors can save their own templates too. The finished prescription previews as a clinic-branded, signed PDF and goes to the patient on WhatsApp the moment the visit ends.

app.elthclinic.com Prescription templates suggested from history, combinations mined from 926 past visits
app.elthclinic.com Prescription preview, a clinic-branded PDF that goes to the patient on WhatsApp
The prescription leaves as a branded, signed PDF on the patient's WhatsApp. No login, no app store.
Mined, not generated

Suggestions come from what this clinic actually prescribes, not a generic drug list and not a language model.

823 prescriptions on WhatsApp

Accessible anytime, on the channel patients already open fifty times a day.

4 · Patient portal (PWA)

The clinic in the patient's pocket

Half of a clinic's work happens after the patient walks out. The portal tracks care programs week by week, weekly GLP-1 doses, weight logs, doctor reviews, and coaches exercise with video, reps, and a "why it helps" for every movement. It's a PWA: no app store, opens from a WhatsApp link.

Patient portal home: Beyond Obesity program, month 4 of 12, this week's semaglutide dose Patient portal exercise coaching: guided video, reps, how to do it and why it helps
39 program members active

Diabetes and weight-loss programs with phases, dose schedules and review dates.

Coaching, not a PDF

Sixteen-step exercise routines with video, the plan patients actually follow.

09 What I got wrong

The features they ignored, and the rules that came from bugs

Sixty-plus features is a count, not a result. Here is what the clinic quietly stopped using, what I designed for a clinic that does not exist, and what broke once real money moved through it.

Built, and ignored

11bookings ever
Health-camp booking

Nine of the eleven were cancelled. A camp is a marketing event, not a product surface.

14in two months
Coach self-booking

Patients on a program do not book their coach. The coach books them.

254 → 0delivered
Community invites on WhatsApp

254 attempts, none sent. Meta's template shape kept changing under us.

29 vs 41 walk-ins
Online lab booking

Six months of data. A blood test is a walk-in decision, not a planned one.

0enforced
reCAPTCHA

Wired, never switched on in production. Rate limiting carried the load alone.

the pattern: anything asking patients to plan what they normally do on the spot, died.

the two bigger misses

The stock module was used for six months, then abandoned. Pharmacy billing never left ELTH, 113 invoices in August alone, but stock tracking drifted until it was fiction: 118 medicines with only 30 showing stock, 59 of them re-seeded at ₹0 in August. Half of August's pharmacy sales skipped the dispense flow entirely. I made cost price optional at setup because the desk did not have it, and that is the decision the whole module eventually died of.

I designed eight roles for a clinic where one person works three desks. Every one of the 1,493 dispenses came from the receptionist's account. There was never a pharmacy user. Role separation was modelled on how a clinic is drawn, not on who actually sits there at 9am.

What broke, and the rule it became

Six of the seven incidents are now written into the system's design document as invariants. The bug is the first draft of the rule.

  1. What broke

    A 30-second poll fetched every collection, unbounded. 1.9 million reads a day and a ₹2,560 July bill that scaled with usage, invisible to every user.

    The invariant

    Sync. Every write stamps updatedAt, every hard delete is recorded, and clients pull only what changed since their last sync. Reads fell to about 50k a day. I had paid this lesson once already at GetMyCreative, for a great deal more.

  2. What broke

    Payment verification ran inside the booking iframe. The redirect hid its storage, so the cleanup sweep cancelled bookings that were already paid. 14 orders, ₹26,405, over two weeks in August.

    The invariant

    Money. Cashfree is the source of truth for online payments. A booking is never cancelled for non-payment without asking the gateway first. Ledger corrected by hand; every patient had been seen, so no refunds were needed.

  3. What broke

    Expired payment holds stayed visible on the calendar and got checked in, creating appointments nobody had paid for.

    The invariant

    Slots. An expired hold is dead for conflict checks, swept every fifteen minutes, and staff see a badge on any slot still holding.

  4. What broke

    A timezone fix pushed the daily report and the reminder cron onto the wrong calendar day. Evening collections landed on tomorrow's report until 16 February.

    The invariant

    Time. Every calendar day is IST wall-clock, never a UTC conversion, and a missed cron run heals itself through a catch-up window.

  5. What broke

    A prefilled optional step re-saved July's HbA1c under an August date. 36 phantom lab rows in patient records.

    The invariant

    Snapshots. The latest value shown on a chart is read-only display. It is never the seed of a new entry form. Forms start blank.

  6. What broke

    Families share one phone number and type their own names differently, so 153 duplicate patient groups formed, mostly through online booking. 132 merges done by hand.

    The invariant

    Identity. A patient is resolved by phone plus a name tier, never phone alone. A different first name on the same number is always a new person, and date of birth is the second attribute.

the one I would fix first

The audit log records that an invoice changed, not what changed. Across 6,206 edits I cannot separate a routine line item added during a visit from a correction made after payment, which is exactly where a reconciliation gap would hide. I designed that log in week one and it is the thing I would rebuild before adding another feature.

10 Where it stands

By the numbers

One clinic, January 2 to September 6, 2026. Pulled from the system itself.

1,108patients registered
1,517appointments total
71%booked online (1,076)
91 → 218online bookings a month, Feb → Jul
2%no-show rate on online bookings
990consultations recorded since April
₹62.2Lbilled across 2,781 invoices
1,493pharmacy dispenses
4,206WhatsApp messages sent
823prescriptions delivered on WhatsApp
849doctor booking alerts
190test reminders
39care-program members active
10staff accounts across 8 roles
4 → 20distinct staff acting per month, Jan → Aug
₹44,863captured online across 28 prepaid bookings

Not measured: calls the front desk stopped taking, and how long a receptionist took to learn it. I'd instrument both from day one next time.

11 What I learned

The product loop, and where it goes next

  • Timing is a product decision. The same pitch a month before the license expired would have been a nice-to-have. On expiry day it was the only option on the table.
  • Pick the wedge for the user's pain, not the product's centre. Booking was nobody's idea of the core; it was the thing that made the front desk trust the system, and everything else followed.
  • Ship while they use it, and count what happens. Five features the clinic ignored cost days each. The numbers told me before anyone had to.
  • No AI beats AI the user routes around. The scribe is parked because the doctors said so. That's the feature working as intended.
  • The infra bill is a feature. Lesson already paid for once at GetMyCreative; paid a smaller instalment again in July.

What this taught me isn't a stack. It's the product loop: find the trigger, pick the wedge, ship while they use it, count what happens, cut what nobody uses, own what breaks. That loop works on software exactly the way it worked on an agency, and it's what I bring to an AI product team next.