VITALSfree clinical simulation for medical students
Free for every learner, in every country, forever

Free because the people who need a result they can verify are the ones who pay for it — never the learner, in any country, ever.

A patient is dying on a clock.
You decide what happens next.

Ask them what happened. Examine them. Order the tests, give the drug you think they need — and the monitor beside the bed tells you, second by second, whether you were right.

Ing, nineteen, lying on an emergency-department trolley with the monitor beside her, watching for someone to come.

EP1 · The Last Bite · waiting

Ing · F 19

Ten minutes after the wrong salad, and her throat is closing.

You will probably lose her the first time. Almost everyone does — then you run it back. Nobody sees it but you.

Students from 18 of Thailand's 29 medical faculties already train on Embla, the production engine underneath this. That is Embla's record, not Vitals’.

And to be exact about “free”: a donation buys no seat, it buys a monthly ceiling on paid inference. When a month’s ceiling is reached the bay keeps running and only the patient’s voice stops until the month turns — the gauge is public.

One run, four facts

Anyone can play. Nobody can fake the replay. A deterministic physiology engine decides whether they live, and every run reduces to one hash you can anchor on Solana with one press — so anyone can replay the tape and get the same answer, without asking us.

Talk to them

They answer in their own words — that voice is a language model, and it is the only one here. It never touches the physiology or the score. They can be wrong, and they can be too breathless to answer.

Treat them

Orders, drugs, airway, fluids β€” a live bedside monitor moves the way the physiology moves.

They live or they don't

No script. A deterministic clinical automaton decides in real time, from what you did and when.

The run is provable

Every case reduces to one hash. Replay the tape and the outcome and the score come back identical β€” the patient's words do not. No trust required.

Season one

All five of season one, on the shelf today. Same engine, same clock — the patient is what changes.

Ing, 19, wheeled into the emergency department on a trolley by two nurses, staring at the ceiling.

The Last Bite

EP1 · Ing · F 19 · 12 min

Prasit, 58, a hospital driver, on the trolley in the emergency department with crushing chest pain.

Time Is Muscle

EP2 · Prasit · M 58 · 12 min

Khaopun, 5, sitting bolt upright and drooling in the paediatric bay, refusing to lie down.

Don't Make Him Cry

EP3 · Khaopun · M 5 · 14 min

Mali, 34, a nurse still in uniform, breathless in the emergency department.

The Masquerader

EP4 · Mali · F 34 · 12 min

Boonsong, 47, the fireworks foreman, bleeding in resus on a mass-casualty night.

The Night the Stars Fell

EP5 · Boonsong · M 47 · 18 min

Where we are

Stated plainly, so you can check us. The demo you can play today is the green tier. The star gate β€” OSCE stations that unlock the next chapter β€” is what we are wiring now.

Live on devnet β€” play it now
  • Playable in ~60 seconds, no signup
  • Deterministic replay: same tape β†’ same outcome and same score, with no language model and no keyword matcher anywhere in the scoring path. The patient's voice is a model, so a replay reproduces what happened and what it was worth β€” never the words the patient chose
  • Any run can be anchored with one press β€” and once it is, your level is recomputed on-chain from Merkle proofs, not issued by a key. Anchoring is opt-in, so the public count is a floor and never a total; /api/usage says so itself
  • An independent verification tool, public and reproducible β€” clone, build one binary, and a stranger re-derives your level straight from the chain without a key or an account. Every command and its real output is written down: VERIFICATION.md
Building now β€” the star gate
  • OSCE stations between episodes β€” real cases from the Embla case bank, scored by a deterministic 40-point rubric anyone can re-derive
  • Stars earned at the stations unlock the next story episode β€” you earned it, the chain checked it, the door opened
  • Commit before the encounter, so the chain already knows how many times you started β€” you cannot practise five times and anchor only the good run

Not a prototype

The traction below belongs to Embla — the production clinical-simulation engine Vitals is built on and reuses. It is here because it is why the signal exists at all, not because Vitals earned it.

18 / 29Thai medical faculties with active learners on Embla β€” verified faculties, not signup entries
671scored runs on Embla, as of 25 Aug 2026 Β· against a catalog of 433 authored clinical cases, 384 of them validated, across 23 specialties. Separate denominators, printed separately: a run is not a case. Every run counted here reached grading — an abandoned or ungraded encounter is never recorded
1stPlace at NECTEC AI for Thai 2026 β€” awarded to Embla (announced by NECTEC)
1 : 1,487people per doctor in Thailand β€” and 1 : 1,650 next door in Indonesia. Each country’s own health ministry, 2024, counting doctors working in the health system rather than licence holders: MOPH and Kemenkes, Profil Kesehatan Indonesia 2024. Thailand’s population base is registration-based and omits several million non-registered residents; on a UN-comparable denominator Thailand is 1 : 1,639 β€” the number printed here is the one that flatters us

And Vitals’ own numbers are close to nothing. This bay opened in August 2026. Whatever it has actually seen β€” runs opened, runs finished, runs anchored β€” is published live and uncurated at /api/usage, including on the days it reads one and one. Anchoring is opt-in there too, so even that anchored count is a floor. We would rather you check the gap between the two blocks than find it.

A market for skill that can be verified.

Our mission: one per cent more doctors who actually reach patients, every year. Counted as newly licensed β€” a student who never passes their licensing examination never reaches a patient, and that loss is what we shrink: one per cent of a graduating class is roughly one in ten of the students who leave today, whatever their reason.

9.1% of medical students never finish — the worldwide attrition review that reports it gives a range of 2.7–20.1% — and the reason cited most often is academic difficulty; others finish but never pass the board. We find the learner who is going to fail before they fail and route them to the practice that closes their specific gap β€” then make the evidence of that practice something a residency in another country can trust without trusting us, or the school that produced it.

A number we used to lead with, kept here with the wording it needs: across 3,142 US counties, every 10 additional primary care physicians per 100,000 people was associated with 51.5 more days of life expectancy β€” roughly 1,400 person-years across that whole population (Basu et al., JAMA Internal Medicine 2019). It is a US primary-care association measured over populations, not an effect any one doctor produces, and it is not what we lead with.

Why a chain is load-bearing here

RUST · SOLANA · AGPL-3.0 — engine, program and client, open end to end

The program refuses its own user

Progression is recomputed on-chain from Merkle proofs. Claim a level you didn't earn and the program rejects it β€” no issuer key, no oracle. The published walkthrough ends on exactly that, against our own demo player: claim Competent : REJECTED β€” one proven attempt computes to Advanced beginner, so the claim is refused.

Proof that crosses borders

A residency programme in another country can verify a record without trusting us or the school that produced it.

Donations the donor can audit

The treasury is one address anyone can read, and what this server has spent is published live on the donate page. Coming next: program-enforced commissions β€” money given for a scenario could only be spent on that scenario, released against the delivered content hash. The program holds no money today; that instruction is not written yet.

Stated before anyone asks: 40 of 100 rubric points are re-derivable β€” re-run the pinned engine over the transcript and the same bytes come back. The other 60 are judged today by a language model at a pinned version (gemma-4-26b), and whoever signs the result states which model at which version produced it. That is attestation, not proof β€” and no number of signatures turns it into proof. The named-clinician layer under Next above is what replaces it, not what describes it today. We cannot prove who sat at the keyboard β€” identity binding belongs to the credential issuer. And we do not grant standing: only a medical board can make competence authoritative.

Team

Paripol Toopiroh

CEO & AI architect β€” engine and chain, Rust end to end

Voranitchayanun Panthatachaphisarn

Co-founder & COO β€” registered nurse; hospital operations

Pongsakorn Jaikaew

AI engineering β€” persona engine, ASR/TTS, automated evals

…with Napapatch Viputhboonyapat (QA). Bangkok, Thailand.

Clinical advisor β€” Dr Preechayuth Yokanit β€” anaesthesiologist. MD, Phramongkutklao College of Medicine, Mahidol University (2000); Diploma of the Thai Board of Anesthesiology, King Chulalongkorn Memorial Hospital (2004). Cases pass his review before release.

Reviewer β€” Pimnipa Chaosirikul β€” learner-experience reviewer; final-year medical student, Faculty of Medicine Siriraj Hospital, Mahidol University. Reviews realism and wording, not clinical correctness.