The classic medical interview in the office eats up a large part of the consultation: the doctor asks a series of questions, notes the answers, and decides on the next question based on the previous ones. A client from the medical field wanted to take the load off this process — let the patient conduct a preliminary, structured interview in a mobile app (by voice or tap), and show the doctor already-sorted conclusions together with suggested diagnostic directions.
A conversational medical assistant for patient interviews
An Android and iOS app conducting a structured medical interview — by voice or tap — with an ML module and a panel for doctors
The challenge
The solution
We built a mobile app available natively on Android (Kotlin) and iOS (Swift), offering two parallel interaction modes: voice — the patient answers by speaking, the app recognizes the speech, extracts the answer and passes it to the decision engine; tap — the patient selects an answer from predefined options, ideal for those who prefer privacy or are in a noisy environment. The backend (Node.js + PHP/Laravel) holds the business logic, the ML for answer analysis, and the API for both clients. Doctors get a separate web panel in Vue with a view of conducted interviews, diagnostic suggestions and the ability to accept or correct them.
Speech recognition and answer processing engine
The voice mode is based on native speech-recognition libraries (Speech Framework on iOS, SpeechRecognizer on Android), with an optional fallback to a cloud service for longer utterances. The recognized text passes through a normalization layer (removing hesitations, phonetic corrections typical of Polish medical terms) and is mapped to predefined answer categories — so that the decision engine operates on a uniform representation regardless of whether the patient tapped an option or spoke it.
ML engine — question selection and diagnostic suggestions
The heart of the app is the ML module, which:
- Selects the next question based on the answers so far — a decision tree trained on data prepared by the client's medical team, optimizing the reduction of diagnostic uncertainty in as few steps as possible.
- Classifies signals from the answers into symptom categories (digestive, respiratory, neurological, etc.) and weights them by duration, intensity and the patient's prior conditions.
- Suggests diagnostic directions — generates a list of the most likely conditions consistent with the collected interview, along with a match score. The result is not a diagnosis — it is input material for the doctor leading the consultation.
The outcome
The patient conducts a preliminary interview in the app at a pace comfortable for them, and the doctor gets a structured report instead of raw notes. The app is in both stores (App Store, Google Play), and the doctor module is used by the client's medical teams.
Co zbudowaliśmy
API and ML engine
Node.js handles real-time communication with the mobile app, ML analysis queuing and orchestration of the decision engine (the question tree). Laravel (PHP) is responsible for the admin panel, managing the medical knowledge base, doctor accounts and reporting. A shared relational database.
Doctor panel
An SPA in Vue.js for the medical team — a list of conducted interviews, a detailed patient view with a timeline of answers, ML suggestions and space for the doctor's decision. Communication with the backend via REST + WebSocket for notifications about new interviews.
Android client
A native Android app (Kotlin), a conversational interface with two modes (voice/tap) switchable mid-interview, integration with Android SpeechRecognizer, a local answer queue with synchronization to the backend (works on a weak connection).
iOS client
A native iOS app (Swift), a UX twin of the Android version, integration with Apple's Speech Framework, AVAudioEngine for listening with VAD (voice activity detection), accessibility support and a high-contrast mode.
Stack technologiczny
Efekty
Got an idea?
Quote, consultation or audit — pick the path that fits. We'll take it from there.
Project quote
Tell us about your idea — we deliver scope, timeline and cost in 5 days.
Fill the brief→ 02Technical consultation
30-minute call with our tech lead about stack, architecture and risks.
Book a call→ 03Product audit
We review code, architecture and performance. Report with a clear roadmap.
Start an audit- Response within 24h
- NDA on the first call
- First call with no strings attached