Mediator Dashboard
Case coordination for an emergency medical assistance centre working across 40 countries.
40%
faster median intake-to-close
20%
less headcount for the same volume
~24k
lines of application code
The problem
Credible Medical Assistance runs a Kolkata alarm centre that coordinates emergency care for travellers in 40 countries, on behalf of insurers. A single case can involve a patient in one time zone, a hospital in a second, an insurer in a third, and a coordinator in a fourth.
Before this system, coordinators coordinated across those time zones by hand. Guarantees of payment had deadlines that lived in someone's memory. Currency differences were worked out per case. When an insurer disputed what had been agreed, there was no record of who changed what, or when.
How it works
Time zone is a data-model decision, not a formatting one
The country is picked at intake, and roughly 190 countries map to IANA zones. The resolved zone is stored on the case itself, not derived at render time. Times are stored at face value and interpreted at the edge, so one appointment renders as both patient-local and India time — and every coordinator reads the same truth rather than their own browser's guess.
A guarantee that cannot quietly expire
Approving a guarantee of payment sets a 30-day deadline. The board sorts by that deadline, with six levels of red deepening as it approaches and passes. The row clears itself when finance records the payment. Nobody maintains the list, so nobody can forget to.
Money is derived on the server
A case carries a claim amount, a case fee, a hospital fee and an internal amount — often in different currencies. The difference is computed server-side and posted to the ledgers; the client never calculates money, only displays it. Documents render the amount in words, as PDF or DOCX, in two branded layouts.
Auditability as a way to end disputes
Fifteen fields are tracked with old value, new value, who changed it and when, grouped into readable entries rather than a raw diff. Authorisation is enforced twice on purpose: the API refuses by role, and the interface hides what a role cannot use. Employee sessions carry a name, email and timestamp watermark.
Case references that cannot collide
Monthly counters are incremented atomically rather than derived from a count query, so two coordinators creating a case in the same second cannot be handed the same reference.
In the product

The GOP board: sorted by deadline, tinted deeper red as it approaches, and it clears itself when finance records the payment.

One appointment, two clocks. The zone is stored on the case, so the patient's local time and India time are the same fact rendered twice.

Live local time in every market the centre covers — the application's own timezone helpers, not the browser's guess.

Invoice before export: the amount written in words, exchange rate shown, every field editable in place, out as PDF or DOCX.

One day on one case. Fifteen tracked fields with old value, new value, who changed it and when.
Decisions worth defending
Layered by responsibility — routes hold requests, services hold rules, and every database call sits behind a storage class. A rule has one home.
Ant Design for the data-dense surfaces, because tables, filters and forms are most of the product and hand-rolling them would have been the whole budget.
Zustand rather than a heavier store: the state that is genuinely global here is small, and colocating the rest kept the surface readable.
Permission checks duplicated between API and UI. Redundant by design — the API is the boundary that matters, and the UI hiding what you cannot do is a usability property, not a security one.
Outcome
Over two quarters the client measured a 40% reduction in median intake-to-close time and handled the same case volume with 20% fewer coordinators. Their figures, not mine.
Built with
More work
Start a conversation