finds.dev← search

// the find

vintasoftware/medplum-chat-app

★ 24 · TypeScript · MIT · updated Feb 2025

FHIR-native live chat mobile app built with React Native and Medplum

A React Native/Expo reference app showing how to build a FHIR-native patient-provider chat using Medplum as the backend. It maps chat threads to FHIR Communication resources and uses Medplum's WebSocket subscriptions for real-time updates. Aimed at healthcare app developers who need a starting point for telehealth messaging without building FHIR plumbing from scratch.

- The FHIR data modeling is done correctly — threads as Communication resources with proper part-of relationships, message status tracked directly on the FHIR resource. Not a bolted-on abstraction.

- Headless hooks pattern in /hooks is genuinely reusable. Someone can lift useSingleThread or useThreads into a different UI without touching the chat logic.

- Push notification architecture via a Medplum Bot is well-documented with step-by-step instructions, which is usually where healthcare app tutorials fall apart.

- CI is set up, Husky pre-commit hooks configured, ESLint/Prettier present — the project hygiene is above average for a demo repo.

- Test coverage is thin: only 3 test files, mostly for hooks and one utility. The ChatContext — which holds the most complex real-time logic — has zero tests.

- The setup process is genuinely painful. You need two Medplum client apps, manual redirect URI matching by IP address, a bot deployed via copy-paste in the UI, and a Subscription created by hand. There's no seed script or IaC to automate any of this.

- Access policy configuration for production is punted to a one-liner in the README with no example policy JSON. Anyone shipping this to real patients will get stuck here.

- Video playback silently fails on web with no graceful degradation — the known issues section acknowledges it but the app apparently just breaks rather than showing a fallback.

View on GitHub →

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →