VeraClin

Client
- VeraClin
Project type
- Clinical AI Arbitration
What I did
- React 18
- TypeScript
- Vite
- Tailwind CSS v4
- React Router
- i18next
- RTL / Arabic
Year
- 2026
VeraClin is a decision-support surface for wards where several specialised models watch the same patient at once — triage scoring, sepsis risk, chest imaging, readmission risk. It puts every active opinion side by side, says out loud when two of them disagree, and carries the clinician's own decision and its basis into a sealed, exportable record. It runs entirely in the browser on fictional patients: no real record, no backend, no PHI.
- 01
Two models reading the same patient can land two severity levels apart. Averaging them into a single score deletes the one fact that mattered clinically — that they disagreed.
- 02
A confidence percentage means nothing on its own. Someone asked to act on 88% cannot see which vitals fed it, how old the reading is, or what the model itself admits it is unreliable at.
- 03
When a source goes offline most dashboards quietly drop its card. A missing opinion then looks exactly like an opinion that was never concerning.
- 04
The rule deciding which alert surfaces first usually lives in a configuration file nobody clinically responsible has read, which makes the order of arrival a hidden editorial judgement.
- 05
Afterwards, reconstructing what happened is guesswork: who saw which alert, in what order, what they did about it, and on what grounds.
- 01
No fused score, at any point. Opinions stay side by side and a conflict gets a banner naming both models and the size of the gap between them.
- 02
The resolution rule — specialisation, signal freshness, or highest severity — sits on the screen it governs, is switchable there, and only ever orders the reading. Overruling it is expected, and asks for a justification.
- 03
Every opinion opens into its own traceability: source data with weights and timestamps, the model's declared limitations, its reliability history.
- 04
An unreachable source keeps its card and states its condition — severity unreachable, no confidence available, actions greyed out — instead of vanishing from the comparison.
- 05
A Final Decision panel closes the page: the call and the clinical basis for it, attributed and timestamped, exportable as text and printable.
- 06
Every action — following, modifying or dismissing an opinion, changing the rule, disconnecting a source — is appended to a log that cannot be rewritten.
- 07
Arabic is a first language of the interface, not a translation layer: full RTL through logical properties, with the anatomical map, the confidence bars and the audit rail all reading from the other side.
Reading a disagreement
A 67-year-old in the emergency bay: the sepsis model calls it critical, triage calls it moderate. Both cards stay up, the two-level gap is named, and the rule proposes which to read first without closing the question.
Checking a number before acting on it
88% is not an instruction. One click opens what the model actually used — heart rate at 34%, blood pressure at 28%, each with the time it was taken — alongside what the model says it is poor at.
Signing the call
The clinician writes the decision and what it rests on. It is stamped with their name and the time, exported or printed for the record, and the log keeps the trail intact.
Taking a source out of service
Disconnecting a model is a hospital-wide act, not a per-patient one: it affects every patient that source follows, and it is written to the log as an event with an author and a time.

The product states its position before asking for a password: disagreement between clinical AIs stays visible, never averaged. Underneath, in small type, what the prototype is — fictional data, simulated authentication — because a clinical demo that does not say so is doing something else.
BAYAN






