
Mobile app
Plaud consultation companion · iOS & Android
Software Engineer, Medaquire Inc.
PatientQ Mobile
PatientQ Mobile is a clinician companion app that pairs with a Plaud hardware recorder, syncs consultation audio from the device, and turns visits into searchable, speaker-labeled transcripts for the clinic.
The clinician records on the Plaud. The phone finds it over Bluetooth, downloads the file, uploads it for transcription, and a status chip walks the visit from On device to Ready. Staff search the transcript, rename speakers, and assign it to a patient.
Problem
Clinics needed a consultation recording companion — not a booking or payments app. The visit is captured on a Plaud NotePro or NotePin, not the phone mic. The phone has to find the recorder, get the file, get it transcribed with speaker labels, and let staff review it, including when the network drops mid-sync.
Product
PatientQ Mobile pairs over Bluetooth, syncs audio over BLE or faster Wi-Fi, uploads it for AI transcription, and lets staff search transcripts, rename speakers, and assign the recording to a patient. The same recording later feeds SOAP notes / Smart Charting in the PatientQ CRM — the system the phone talks to, not work claimed as this app.
For clinicians and clinic staff. Accounts are provisioned by an admin (sign-in only, Auth0). Recordings are scoped to a clinic location.
Product map
Hardware
Plaud NotePro / NotePin
The visit is recorded on the device. The phone discovers sessions; it does not capture the consult on its mic.
Companion app
What I built
Pairing, sync pipeline, transcription UX, notifications, and native iOS/Android release.
CRM
System the phone talks to
Metadata, contacts, and transcription status over GraphQL. Later: SOAP notes / Smart Charting — not this app.
PatientQ backend. GraphQL API — Clinic identity, recording metadata, transcription jobs, and contacts. Audio does not go through these servers.
Recording flow
- On device
- Downloading
- Uploading
- Transcribing
- Ready / Failed
Deep dives
- 01
Hardware to cloud
BLE or Wi-Fi export, queued download, multipart S3 upload, STT submit, then poll until Ready. A second path — server webhook and push — still lands the transcript if the app is backgrounded.
- 02
Native Plaud bridge
A custom native SDK bridge, not Expo Go: scan, bind, handshake, file list, transfer progress, firmware, and storage. Physical NotePro and NotePin only.
- 03
Offline, and audio off our servers
A persisted AsyncStorage queue pauses when offline and retries with backoff. Audio never transits PatientQ servers — the phone uploads to Plaud S3 with presigned URLs. The app and backend keep metadata and the transcript. One recording per device session and location; delete does not invite a duplicate upload (re-transcribe to revive).
What shipped
Pairing & devices
- Auth0 sign-in (clinic accounts only; admin-provisioned)
- First-run onboarding: permissions → BLE scan → pair → success
- Pair Plaud NotePro / NotePin; pair more devices later
- Device dashboard: connection, battery, storage, firmware, tags
- Location switcher, dark/light theme, firmware updates, unpair
Sync
- Record on hardware; phone discovers sessions and syncs
- Auto sync and manual sync; Wi-Fi fast transfer for long visits
- Offline-aware queue: pause when offline, retry with backoff
- Status chips: On device → Downloading → Uploading → Transcribing → Ready / Failed
Transcripts
- Speakers, search, rename speakers, copy/share, in-app audio playback
- Assign recording to a patient (contact) from the phone
- Re-transcribe failed or timed-out jobs
Alerts
- Push and in-app alerts when a transcript is ready or failed
- Tap opens the recording (patientq://recording/:id)
Architecture
- 01
App
React Native, Expo SDK 55, TypeScript. React Navigation (tabs + stacks). Auth0 native.
- 02
Hardware
Native Plaud BLE / Wi-Fi SDK via a custom bridge. Physical device only.
- 03
Transfer
BLE + local-network Wi-Fi, then multipart upload to Plaud S3 (presigned URLs).
- 04
Release
EAS native iOS/Android (com.patientq). Expo push, local alerts, deep links.
Role
Built as a Software Engineer at Medaquire Inc. — the iOS/Android companion app, from architecture through App Store–ready native builds.
- Built PatientQ’s iOS/Android companion app (Expo/React Native) for Plaud hardware: BLE pairing, Wi-Fi fast transfer, and an offline-resilient sync queue.
- Implemented the end-to-end recording flow: device export → multipart cloud upload → AI transcription with diarization → in-app transcript player, search, and speaker labeling.
- Wrote a native Plaud SDK bridge (not Expo Go): scan, bind, handshake, file list, transfer progress, firmware, storage.
- Designed offline-first sync (AsyncStorage queue, exponential backoff, “Waiting for network”).
- Kept PHI off the PatientQ API path for audio: phone uploads directly to Plaud S3; app and backend store metadata and transcript. No secrets on device — the Plaud token is minted by the backend.
- Handled clinic identity: one recording per device session and location; blocked accidental re-upload after delete (re-transcribe to revive).
- Dual completion path: client polling + server webhook/push so transcripts still land if the app is backgrounded.
- Shipped production native builds with Auth0, GraphQL, push notifications, and deep links; Bluetooth, Location, and Local Network permissions, Wi-Fi entitlements, TestFlight/EAS.
- React Native
- Expo
- TypeScript
- BLE / IoT
- Auth0
- GraphQL
- Offline queues
- Push notifications
- Healthcare / HIPAA-aware mobile
I designed and built the PatientQ mobile app (Plaud integration) — not the CRM, Smart Charting, or backend as a whole. Those are the system this phone talks to.