AI in medicine · 2026

Internal Medicine records

A bilingual records system for the Internal Medicine department, designed so a doctor says the note out loud and AI fills in the form for them to check and sign. Patient names never reach the AI.

Role
Developer
Years
2026
Built with
  • Next.js
  • TypeScript
  • Postgres
  • Drizzle
  • Better Auth
  • next-intl
Home page of the Internal Medicine records system at Kasr Al-Ainy: the title on the left and a 3D model of the heart on the right.

The records system's home page, with a 3D heart beside the title.

01

The problem

Doctors on an Internal Medicine ward write their notes at the bedside, often in the middle of the night. They're interrupted constantly, so typing each note into a form is time they don't have. And the head of department still needs the whole department on one screen.

02

What I built

So I designed the department a records system with AI at the centre of data entry. The doctor opens the patient's page and says the note out loud in Arabic or English, or both mixed together. Gemini turns the speech into the department's template, and every field it fills stays marked until the doctor checks it and signs. The interface works in both languages, and each kind of user, from the bedside doctor up to the super admin, has their own account. The voice step is the part I'm building now.

The records system's home page on a phone, scrolled down. A 3D heart sits above the heading A doctor always signs and a line saying nothing reaches the record before a doctor confirms it.

The language switch flips the whole page right to left.

Further down on a phone, the heart settles over the promise: a doctor always signs.

03

How it works

  1. You log in with your own account, and your role comes with it.
  2. One switch changes the interface between Arabic and English, and the layout flips right to left with it.
  3. The voice step starts inside a patient's page that is already open. The name and file number are typed there by hand, so the AI only ever hears the clinical part of the note.
  4. Gemini sends back the template's fields along with a transcript. A value that can't be right, like a blood pressure of 1500/90, is flagged for the doctor and never filled in on its own.
  5. I wrote the database schema in TypeScript with Drizzle. That way a field can't mean one thing on one screen and something else on the next.
  6. Vitest runs unit tests on the logic.

04

What it changed

0
Patient names or file numbers that reach the AI. The design leaves them no way in.
4
Four kinds of account, from bedside doctor up to super admin.
2
Every screen in both Arabic and English.