NxaCare
LIVEMulti-tenant SaaS productBuilt with NxaOne(opens in a new tab)
A clinic management platform that runs the whole operation — appointments, treatment plans, prescriptions, billing, and patient chat — across ten-plus modules, serving a staff admin panel and a separate patient app.
Small clinics run on paper diaries and phone calls. The hard part is not any single feature; it is that scheduling, payments, and billing all have to agree with each other while several people touch them at once — and that every clinic on the platform has to stay sealed off from every other one.
I built the appointment-booking system, architected the payment layer, and automated the operational workflows behind it.
- Node.js
- React
- PostgreSQL
- Redis
- BullMQ
- Socket.IO
- Stripe
- Razorpay
- Docker
booking requests
- product modules
- 10+
- product modules
- tenant-scoped models
- 19+
- tenant-scoped models
- front ends, one API
- 2
- front ends, one API
Live at nxacare.com and running real clinic operations. Usage figures are the clinics’ to share, not mine.
Decisions I made
An availability engine, not a calendar
Booking reconciles doctor schedules, slot capacity, and concurrent requests so two patients racing for the same slot cannot both win. Double-booking is prevented at the source rather than reconciled afterwards.
Two payment gateways, one interface
Stripe and Razorpay sit behind a factory pattern, so the rest of the app never learns which processor it is talking to. Webhooks are signature-verified, and a circuit breaker fails over between gateways when one starts misbehaving.
Work that happens without a request
Notifications, invoicing, and appointment lifecycle jobs run on BullMQ queues instead of blocking the request path — so a slow email provider never becomes a slow booking.
Tenants that cannot see each other
Multi-tenant isolation runs through 19+ data models, so a clinic’s patients, schedules, and invoices are scoped to that clinic rather than filtered in the UI after the fact.
One platform, two front ends
A staff admin panel and a patient-facing app sit on the same API, so a booking made by a receptionist and one made by a patient travel the same code path and obey the same rules.
Billing that actually gates the product
Subscription billing with tiered plans, usage quotas, and feature gating — the plan a tenant is on determines what the product will do for them, enforced server-side.
- Product ownership end to end
- Concurrency & data integrity
- Payments integration
- Multi-tenant architecture
- Async job processing