Healthcare · Multi-tenant SaaS · Built & verified end-to-end

One hospital system. Every hospital that pays for it.

What started as one hospital's internal system is now a subscription platform: every hospital gets its own isolated database, its own plan built from the modules it actually needs, and a Master Panel that runs the whole subscription business.

Core stack
Custom PHP MVC · MySQL
Modules
6, sold per plan
Billing
Razorpay
Tenant isolation
One DB per hospital

A rough sketch of the dashboard shape — not the real UI, just the idea: every module a click away, live ward status on the right.

Hospitals don't lose money to bad medicine. They lose it to bad paperwork — and I was rebuilding this system once per hospital.

The original system worked: one hospital, one database, patient records and billing finally off paper. The actual business problem showed up next — every new hospital meant standing up a whole new copy by hand. That doesn't scale into a business. It scales into a full-time job maintaining N slightly-different copies of the same app.

Six modules, one dashboard, none of them bolted on.

OPD (Reception)

Walk-in visits and consultations, from check-in to a printable receipt.

IPD

Admissions, ward/bed transfers, discharge, and a dedicated financial ledger per admission — not bolted onto OPD billing.

Pharmacy

Medicines by batch and expiry, purchases, sales, returns, stock adjustments, and low-stock/expiry alerts.

Lab

Test orders with parameterized and formula-based results — not a single free-text result field.

Misc Billing

The billable stuff that isn't OPD, IPD, pharmacy, or lab still gets a real invoice.

Core Admin

Users, roles with a granular permission matrix, and a full audit log of who did what, when.

The part that turns "software I built" into "software I sell."

Every hospital gets its own database, not a shared table with a tenant_id column — complete data isolation for patient and billing data, and a clean way to back up, restore, or delete one customer without touching another. Everything else follows from that decision.

Plan builder

Every module priced per day. Assemble a plan from whichever modules a hospital actually needs, with dependency checks so nobody enables billing without patients.

Billing, on autopilot

Monthly and yearly pricing calculated from the plan, invoices generated per cycle, Razorpay checkout, and a 7-day due + 3-day grace period before a non-paying tenant is auto-suspended — and auto-reactivated the moment they pay.

Referral program

Every tenant gets a referral code at signup. Refer a hospital that signs up, and both sides get account credit (₹500 / ₹200) automatically applied to the next invoice.

Master Panel

Create, suspend, or delete tenants; rotate a hospital's registration key; watch platform-wide audit logs; impersonate a tenant admin for support — without touching their password.

Build a plan the way a hospital actually would.

Toggle modules on and off — the plan builder enforces the same dependency rules live in the platform (Billing needs OPD, IPD needs OPD, Lab needs OPD).

6 of 6 modules selected

A full plan — everything a hospital could need, on day one.

Nothing shipped unverified

Every feature above was tested against a live database before being marked done — down to backdating a real token to trigger the anomaly detector and confirming it actually fires.

The server is always the authority

Device limits, offline grace periods, receipt numbers — none of it is trusted from the client alone. A cracked or tampered app without a real registration key gets nothing, because the data never lived on the device.

Built and supported by one person

Architecture, backend, the Flutter app, deployment, and support all sit with the person who wrote the code — no gap between "who built it" and "who answers when it breaks."

Want the real build story — including what's still on the roadmap, not just what's done?

Read the full case study