Waiting Room
A patient app for a 40-doctor clinic in Pune
Waiting Room is a sample brief. We imagined a 40-doctor clinic in Pune whose patients felt lost between appointments, and asked ourselves what we'd build for them. The clinic is imaginary. The app isn't: we designed and engineered it, and the browser build below is the web version of its front end, ready to use right now.
A sample brief, a real product. We wrote this brief ourselves. The business is imaginary; the product is not: we designed and engineered it, and you can use it above. We publish results only for work a client has let us verify, so this page shows none.
The brief
We imagined a busy multispeciality clinic in Pune with good doctors and a patient experience that felt like paperwork. Appointments lived in phone calls, lab results arrived as jargon in a PDF, and follow-ups depended on someone remembering.
So we asked what a companion app for that clinic should do, and built it end to end. It explains what is happening in plain language, keeps a family's records in one place, and nudges people toward the next step without nagging.
The problem
A clinic like this serves people who are anxious, often unwell, and holding an old phone with one bar of signal in a crowded waiting area. Every screen has to be legible under stress and trustworthy at a glance. In India it also has to fit the health stack patients already have: ABHA numbers, records held at other hospitals, and consent rules under the Digital Personal Data Protection Act, 2023.
- Explain lab results without talking down
- Earn trust with restraint, not dark patterns
- Keep working on patchy clinic Wi-Fi
- Ask for consent clearly, and make it easy to take back
- Accessible from the first screen, not retrofitted
The approach
We started from the moments a patient actually has: booking, waiting, reading a result, paying, coming back. Each got one screen that answers the obvious question first. We planned the production apps as native SwiftUI and Jetpack Compose clients; the build you can open below is the web version of the same front end, running on sample data.
Records link to a patient's ABHA through ABDM, and every share is a consent the patient can see, revoke and check later. The privacy centre follows the DPDP Act: what we collect, why, how long we keep it, what you can ask for, and who to complain to.
What would change for a clinic like this: fewer calls to the front desk asking what a result means, and patients who walk in knowing what happens next.
- Flows built around a patient's visit, not the clinic's departments
- A quiet design system in Bricolage and system text
- Offline cache with an ordered action queue
- ABHA linking and consent artefacts through ABDM
- A DPDP-style privacy centre with a dated consent log
What shipped
- Offline mode with an ordered action queue that replays on reconnect
- Appointments: book, cancel, history
- Snooze, refills and reschedule
- Plain-language lab results
- Care messages
- Family profiles, each with its own ABHA
- Records: vitals, documents, allergies, vaccinations
- ABHA linking with OTP, and ABDM consent requests you can revoke
- Records from other facilities, fetched through ABHA
- DPDP Act privacy centre: consents, data rights, grievance officer
- Billing with cashless insurance
Under the surface
How it is built
The production plan: native SwiftUI and Jetpack Compose clients share a typed contract with a Node.js tRPC backend; PostgreSQL holds the clinical schedule, Redis handles reminder fan-out, and an offline-first cache keeps the app useful on one bar of clinic Wi-Fi. The browser demo is the web version of that front end, on sample data.
- End-to-end types: tRPC contract shared by client and server
- Offline queue with conflict-safe replay on reconnect
- Audit trail on every record view, in line with the DPDP Act, 2023
- ABHA linking and consent artefacts via the ABDM gateway
- Reminders over APNs, FCM and WhatsApp from one dispatch service
Considered and turned down
Flutter or React Native for a single codebase. We chose native for HealthKit and Health Connect depth, accessibility APIs and scroll feel.
Stack
The mechanism, working
The part of Waiting Room that was hardest to get right, as a small model you can operate.
Offline-first action queue
Every tap is a command. Offline, commands queue locally; on reconnect they replay in order, conflict-safe.
