Rabby Ilyas

Atlas.AtlasPad · client work · Germany

Talk, and the chart writes itself.

A voice-first clinical documentation demo. The doctor talks; a realtime voice agent fills in the findings, orders procedures and drafts the letter. Then Atlas maps every patient in vector space, so you can see the person behind the record.

Synthetic patients only. A demo, not a medical device.

Atlas is speaking

“Good morning. Which patient are we seeing?”

(01 · Dictation)

One sentence, seven tool calls.

The agent has ten tools, from selecting a patient to drafting the letter. It updates the chart live, and asks before ordering anything.

Doctor, dictating

Ana Geisen, sixty-seven. Cough for five days, worse at night. Mild shortness of breath. Temperature thirty-eight point four. Rhonchi on the right. Let's get a chest X-ray, two planes.

  1. select_patientGeisen, Ana✓
  2. update_findingcough · moderate✓
  3. update_findingdyspnea · mild✓
  4. set_vitalstemp · 38.4 °C✓
  5. update_findingrhonchi · right✓
  6. order_procedurechest X-ray (2 planes)✓
  7. draft_letterArztbrief✓
AG

Geisen, Ana

female · 67 · synthetic record

Cough, 5 days

Findings

Coughmoderate
Dyspneamild
Fever38.4 °C
Rhonchiright

Orders

Chest X-ray (2 planes)Confirmed by voice

Documents

Arztbrief · draft→ Open draft letter

(02 · The pipeline)

Audio never touches our server.

The server checks the login, builds the roster and prompt, and mints a short-lived secret. The browser then talks to OpenAI directly over WebRTC, and tool calls come back on a data channel.

  1. Microphone

    getUserMedia

  2. WebRTC

    SDP straight to OpenAI

  3. gpt-realtime-2

    semantic VAD · voice marin

  4. oai-events

    data channel

  5. Tools run in the app

    function_call_output

  6. ↺ speech back to the doctor · next response

Voice follows the screen

Every click quietly tells the agent which patient, screen and Atlas focus are visible, so 'this one' always means the right one.

Late microphone permissions

Permission can resolve after the panel has closed. Sessions cancel cleanly instead of opening a ghost connection.

StrictMode vs. a queue

React runs state updaters twice in development, which emptied the tool-chip queue. It is drained outside the updater now.

Loops, capped

Several tool calls per response are fine; an 8-step limit keeps the analysis voice from talking itself in circles.

(03 · Roundtree)

A whole visit, at a glance.

Twelve body systems as petals; the longer and hotter the petal, the more severe the finding. Each snapshot is a moment in the visit, so you can watch the picture change.

  1. Snapshot 1

    09:12

    Triage

  2. Snapshot 2

    10:05

    Exam

  3. Snapshot 3

    11:20

    Current

METPSYNEUEYEENTPULCVGIGUMUSDERMHEMEAG

(04 · Atlas)

Every point, a person.

510 synthetic patients as 70-dimension vectors of ICD-10 concepts. Similar patients sit close together; saved t-SNE, UMAP and PaCMAP fits keep the map stable.

Patient vector · Ana G.

6 matched of 70 dimensions

Nearest neighbour 50% overlap

Must not miss J18 · unconfirmed

Through time 2026

(05 · Data analyser)

What would you like to understand?

Ask about a cohort in plain language, by text or by voice. A chat agent on gpt-5-mini answers with maps and comparisons, while heavy PCA runs in a Web Worker so the page never stutters.

348,415

respondents

BRFSS 2022

54,966

synthetic admissions

Kaggle

5,841

adults

NHANES 2021–23

10
voice tools
29
commits in five weeks
22
scripts that check the numbers
2
languages, German first

Built with Next.js 16, React 19, OpenAI Realtime over WebRTC, three.js, Supabase with row-level security, and Python for the saved projections. AtlasPad rebuilds the front end of an existing clinical documentation product for a client demo; every record in it is synthetic.

Open AtlasPad (sign-in required)

(Next case) · Client

Second Act Pro

A second act, with purpose.

Continue
Match · explainedStrong fit

Drivers: leadership scope, operating style