Back to portfolio
Healthcare · TypeScript and Node.js

Clinvia

Platform for clinic networks in TypeScript and Node.js: scheduling, online booking, medical records, health plans from authorization to billing and a patient app

My role
UX/UI Designer · Full Stack Developer · Architecture analysis
ClinviaClinvia
01

Context

Clinvia is a platform for clinic networks: a multi-practitioner, multi-location schedule, online booking with automatic confirmation, a medical record with clinical notes and prescriptions, health plans from authorization request to billing, network reports and an app for patients to book, confirm and join teleconsultations.

I did the product, the UX/UI and the architecture analysis. The technical foundation is Medplum, an open source healthcare platform built on the FHIR standard, in TypeScript and Node.js, which already handles the clinical API, authentication, permissions and auditing. The clinic product is built on top of it.

Technical foundation
Medplum · medplum/medplum
License
Apache-2.0
My role
UX/UI Designer, Full Stack Developer, architecture analysis
Stack
TypeScript, Node.js, FHIR R4, PostgreSQL, Redis, React
02

Business problem

In a clinic network, the schedule lives in one system, the medical record in another and the health plan in a spreadsheet. The front desk confirms appointments by phone, the doctor hunts for the previous exam in a folder, an authorization is denied for lack of a document that was already in the record, and billing only finds out about the denial when the money doesn't come in.

Clinvia puts it all in one place: the same patient, the same appointment and the same health plan from booking to billing, with access to every piece of health data controlled and logged.

03

The technical foundation

From Medplum come the FHIR R4 server with REST and GraphQL APIs, OAuth 2.0 and OpenID authentication with two-factor verification, access policies by project and compartment, audit logging, real-time subscriptions, Bots, the scheduling library and the example apps for a patient portal, medical records and health plan eligibility.

04

The Clinvia product

The clinic rules and the entire interface: a schedule with temporary slot holds, message confirmations and reminders, a waiting room, visits with clinical notes, ICD-10 and prescriptions, health plan authorizations and billing in the Brazilian TISS standard with denials and appeals, network reports, privacy with an access trail, and the patient app with teleconsultation.

05

Architecture

All clinical data lives in Medplum's FHIR server: patients, schedules, visits, prescriptions, health plans and audit records are FHIR resources, with no parallel database. Clinvia is the product layer on top: the clinic app and the patient app, the scheduling rules and the integrations with health plans and messaging, which run as Bots and queued tasks.

Medplum Server and the Clinvia layer, slot holds and the concept map to FHIR
06

Architecture decisions and trade-offs

Six decisions recorded as ADRs: the context, what was decided, what each one costs and how it shows up for the people using the product.

Architecture decisions with context, cost and on-screen effect
07

Information architecture and flows

The product map, the six roles and the three flows that matter most: from online booking to the visit, the exam that needs authorization, and billing through to denials.

Product map, roles and main flows
08

The screens in Figma

Twelve desktop screens with a clickable prototype, for the front desk, the clinical staff, billing and network management.

  1. 01 / 10

    Today's overview

    Today's appointments, confirmations, the waiting room with each patient's wait time, occupancy per practitioner and the alert that matters right now: the authorization still pending for the 9:20 appointment.

  2. 02 / 10

    Daily schedule

    Five practitioners side by side, with each appointment's status in color and text: confirmed, no reply, waiting, in progress, seen, no-show or teleconsultation, plus a line for the current time.

  3. 03 / 10

    New appointment

    The practitioner's free slots, health plan eligibility checked with the insurer before booking, and confirmation sent to the patient by message. The slot is held for 5 minutes while the front desk confirms.

  4. 04 / 10

    Patients

    Search by name, CPF, phone or member card, health plan, last and next appointment, clinical alert (allergy, pacemaker) and the data consent status for each patient.

  5. 05 / 10

    Medical record

    A clinical summary with blood pressure over the months, active problems with ICD-10 codes, current medications, vital signs and a timeline of visits, exams and teleconsultations.

  6. 06 / 10

    Visit

    SOAP-format notes with a template per specialty, ICD-10 diagnoses, prescriptions checked against the recorded allergy, exam orders with coverage and what happens on signing: prescription in the app, authorization sent and follow-up suggested.

  7. 07 / 10

    Health plans and authorizations

    Authorizations sent to insurers with status and deadline, a denial with the stated reason and what's missing for the appeal, pulling the ECG and the clinical note straight from the record.

  8. 08 / 10

    Billing and denials

    Batches per insurer in the TISS standard, received and receivable amounts, and each denial with its reason and next step. Before closing a batch, every claim is validated and whatever fails goes back to the front desk.

  9. 09 / 10

    Reports

    Visits, occupancy, no-shows, average wait and online booking, no-shows by weekday with a reminder recommendation, occupancy by specialty and visits per health plan.

  10. 10 / 10

    Privacy and access

    Access profiles enforced on the server, the trail of who opened which record, blocked attempts and emergency access with justification, plus consents, data subject requests and data retention.

09

Interface states

Loading, empty with a next action, the insurer that didn't respond (without blocking the booking) and feedback for background tasks, such as reminders being sent and the slot someone else confirmed first.

Loading, empty, error and background tasks
10

Patient app

The next appointment with confirm and reschedule, the member card, prescriptions and exam orders that arrive after the visit, booking with coverage already checked, and the teleconsultation room.

Home, booking and teleconsultation
11

Handling health data with care

Health data is sensitive data under Brazil's LGPD, and the interface was designed for it:

Access by relationship
Doctors see the records of the patients they treat at their location; the front desk sees registration and schedule, not the record
Emergency access with justification
Outside that relationship, only through emergency access, which asks for a reason and notifies management
Access trail
Every record read becomes an audit entry that can't be edited or deleted
Visible consent
Consent status shows in the patient list and in the record, alongside data subject requests

Visual System

A custom design system in Figma, with color variables and components with variants: button, appointment status badge, menu item and filter. Clinical teal for action, petroleum-blue ink for reading and one color per schedule status, always paired with text.

Palette

Teal

#0B7A75

Main action and brand

Ink

#0B2027

Headings and text

Ice

#E2F3F1

Selection and active item

Amber

#B54708

In progress and warning

Red

#B42318

No-show, allergy and denial

Violet

#4F3CC9

Teleconsultation

Typography

Manrope

800

Headings and numbers

Inter

400 / 500 / 600 / 700

Interface, tables and forms

JetBrains Mono

400

Times, claims and batches

12

Next versions

What comes next on the product roadmap:

RNDS
Send and query records on Brazil's National Health Data Network, which also uses FHIR
Waitlist
Automatically offer a slot freed by a cancellation to whoever asked for one
Lab results
Receive results from partner labs straight into the record and the patient app
13

References and credits

Clinvia's technical foundation is Medplum, by Medplum and the open source community, published under the Apache-2.0 license.

Repository
medplum/medplum
Documentation
medplum.com/docs
FHIR R4 standard
hl7.org/fhir/R4
License
Apache-2.0
14

Takeaways

In healthcare, a good product is one that doesn't let data get lost along the way: the booked appointment is the same one that becomes the visit, the authorization and the billing batch. Using a standard like FHIR and a foundation that already handles permissions and auditing keeps the effort where it makes a difference: the clinic rules and an interface that owns what is still pending instead of hiding it.