Health tech · Product design

CODI is built to catch COPD getting worse, 1 to 3 days before the patient feels it.

My role
Solo product designer, research, strategy, UI, testing
Deliverables
iPhone app, coordinator web dashboard, design system
Background
Licensed Korean Medicine doctor
Timeline
5 weeks
Category
Health tech
Why CODI exists

How it started

A senior colleague of mine is a Korean Medicine specialist in respiratory disease. When I visited his office, he and his professor were researching how to manage patients' symptoms at home after they leave the hospital. They were thinking about an app.

I offered to build the digital side. He brought the specialist medical knowledge. I brought the product concept, the business model and the design. Over several meetings with him, CODI went from the first idea to a prototype a future team could build on.

Why the name CODI

The name comes from COPD + Diary: every morning, the patient keeps a short spoken diary of how they're breathing, and CODI reads the changes.

CODI working session at a table with a laptop, tablet and sticky notes

Working on CODI: one of our planning sessions.

Expected impact

Projected, based on published research and CODI's fee model. Not yet measured.
1 in 5
COPD patients readmitted within 30 days
~ 52 %
Lower odds of readmission with home-based management
$ 200–270
Medicare reimbursement CODI's fee model taps into, per patient
1 to 3 days
Early-warning window CODI is built to catch
Corcoran et al., Journal of Advanced Nursing, 2024 (PMID 38558439)
What CODI actually is

Two apps, one signal

CODI connects two people: a COPD patient, living with a lung disease that's managed for life, and the hospital coordinator who tracks their recovery. One app for the patient, one dashboard for the hospital's coordinator, connected from the moment they leave the hospital.

Patients speak into their phone for 30 seconds each morning. How they sound shows how they're breathing: shorter phrases, more pauses, a rougher voice. The app also pulls data from their phone and Apple Watch, all of it feeding into one CODI Score.

CODI patient check-in and coordinator dashboard screens

That score splits two ways:

Patient

Sees one simple status each morning, steady or care needed, and what to do next.

Nurse coordinator

Sees the score and the reasons for every patient on their list, and decides who to call first.

The business model

Why this works as a business

In one lineHospitals lose money when COPD patients come back. CODI keeps them home, and earns a small fee from money hospitals already get.
The problem

1 in 5 COPD patients return to the hospital within 30 days. Medicare penalizes hospitals for it, cutting up to 3% of their Medicare base payments.

The money

Medicare already pays hospitals $200–270 per patient for follow-up care in the 30 days after discharge (Transitional Care Management).

CODI's part

CODI makes that follow-up work, and the hospital pays CODI a small monthly fee per patient.

The professor was interested in the US market, so I built the business model on the US system.

This is CODI's business model:

Medicare, hospital, and patient money-flow diagram
CMS Hospital Readmissions Reduction Program (HRRP), cms.gov/medicare/quality/value-based-programs/hospital-readmissions
Two people, not just a patient and a coordinator

Who this is for

Next, I needed to know who I was designing for. So I built two personas: one for the patient app, one for the coordinator dashboard.

Walter, patient persona
Walter, patient, 73
"Am I okay today?"
COPD 3 weeks post-discharge iPhone 15 + Apple Watch
Wants
  • Recover safely
  • Stay independent
  • Know whether today's symptoms are normal
Sarah, coordinator persona
Sarah, nurse coordinator, 39
"Why are we only seeing them after things have already gotten bad?"
~10 patients 5 systems 14 years as a nurse
Wants
  • Know who needs attention first
  • Understand why, fast
  • Decide what to do next quickly

Walter needs one quiet question answered every morning. Sarah needs one loud question answered every day: who first.

Russell et al., NPJ Primary Care Respiratory Medicine, 2018 (PMID 29343739)
The logic that runs the app came before the first screen

Strategy & the hard problem first

"What could show someone their lung condition was getting worse, from home, without a hospital's equipment?"

To answer that, I made one number that shows how a patient is doing each day: the CODI Score, from 0 to 100. It combines six signals from the patient's phone and Apple Watch, and each signal has its own weight.

CODI Score= 30% Voice AI+ 25% SpO2+ 20% Activity+ 15% HRV+ 5% Heart rate+ 5% Sleep

The table shows where each signal comes from.

Six-factor CODI Score weight table and zone scale
Why voice

Voice changes with breathing, and AI voice analysis (voice biomarkers) is a growing research area on PubMed. CODI compares each check-in with that patient's own usual voice, so it can catch changes a stranger would miss. That's why voice has the highest weight.

Why SpO2

SpO2 is how much oxygen your blood is carrying, read by a light sensor on the Apple Watch. My colleague, the respiratory specialist, said SpO2 is the first thing he checks in any respiratory patient, so it's the second-highest weight.

Why 72 hours

Flare-ups (exacerbations) usually show small symptoms about three days early. CODI sorts patients into three zones: green for steady, orange for care needed, red for get help now. The first day below 30, the patient gets a next step. Three days in a row, the coordinator gets an urgent alert.

Patient reporting symptoms in the CODI app
CODI Score zone scale chart
Two mornings, two outcomes

App walk through

Patient app flow

Every morning, the app opens with one prompt: "Tell us how your breathing is today." The patient taps the circle and talks for about 30 seconds. CODI scores that check-in, and the morning goes one of two ways: a steady day, or one that needs a coordinator's help.

Walter's problem was not knowing if today's symptoms were normal, or what to do about them. The app answers his three questions:

Am I okay today?

One simple status, steady or care needed, with no score to decode.

In the flowSteady day
What do I do?

He taps what he feels, and the app shows clear steps for that symptom, like using the reliever inhaler.

In the flowSomething's off
Is anyone watching?

His coordinator is alerted automatically and will call within the hour. He doesn't have to ask for help.

In the flowSomething's off
Patient app flow, steady and care-needed paths
Coordinator dashboard

Sarah's problem was finding out too late, and hunting through charts to see why. The dashboard answers her three questions on one screen, in order:

Who first?

The patient list is sorted by urgency, so the riskiest patient is always at the top.

On screen1
Why?

The urgent banner shows when and why they escalated. The CODI Score trend and each signal against the patient's own baseline show what changed.

On screen459
What now?

Call, message, or book an appointment in one tap.

On screen3
Coordinator dashboard, annotated
What the CODI Score meant for the interface

Design decisions

1. No numbers to the patient, full numbers to the coordinator

My colleague, the respiratory specialist, was clear: most COPD patients are elderly, and an exact score does them more harm than good, for two reasons:

  • Fear. An exact number just makes them anxious.
  • Hard to read. A raw score is hard to understand, especially for elderly patients.

The coordinator is different. A nurse or any clinical staff member wants the exact number and where it came from.

Patient app with no score shown, coordinator dashboard with full number
2. A clear next step, not just a score

From our meetings, and from my own experience treating patients, people want clear instructions the moment they notice something's off. So I followed the American Lung Association's COPD Action Plan, the standard plan in the US: below a score of 30, the app asks what symptoms are present, then shows the matching next step.

For example, "Hard to breathe" leads to: use the reliever inhaler (2 puffs), sit upright, wait 15 minutes.

Orange-zone action steps in the patient app, by symptom
3. A red zone for the coordinator, one word for the patient

The CODI Score has a red tier for genuinely urgent cases. The patient app still stops at orange, "care needed," for two reasons:

  • Fear. Showing red would only scare the patient.
  • Same action anyway. Coughing calls for the same inhaler routine in orange or red.

Coordinators see the red zone clearly, so they can call right away.

Patient app orange zone next to coordinator dashboard red zone
Red zone alert on the coordinator dashboard
4. No emergency button in the patient app

At first, I added an emergency button for sudden, severe attacks. I removed it for two reasons:

  • Built to prevent emergencies. CODI spots changes days early, so care can start before things get serious. When an emergency does happen, the safest help is 911, so CODI sends patients there right away.
  • Too slow. Someone struggling to breathe can't open an app and look for a button. Calling 911 directly is faster.

So onboarding tells patients clearly: in an emergency, skip CODI and call 911.

CODI onboarding message: skip CODI, call 911
Adapted from a real foundation, not built from zero

Design system

Every design system decision here starts from one thing: the user is elderly.

1. Foundation: adapted, not built from zero

I started from Montage, the open-source design system from Wanted, a Korean job-search platform, chosen because it adapts cleanly across both mobile and desktop, which mattered since CODI needed a phone app and a web dashboard from the same system.

2. Color and type: built for legibility

Bright, easy-to-read status colors, and Inter as the typeface.

Brand blue#596BFF
Steady#00BF40
Care needed#FF6D00
Urgent#FF1744
AaInterTypeface
3. Sizing: bigger than required

Everything in the patient app is sized up for elderly hands and eyes, past the accessibility minimums:

Next
57px
Next
44pt min
Buttons: 57px tall

Apple's minimum touch target is 44pt, so shaky hands still hit them easily.

Title 26px
Body 16px
Smallest 14px
Text: never below 14px

Body text is 15–16px, screen titles 26–28px.

Aa
12:1
WCAG AAA needs 7:1
Contrast: about 12:1

Main text is well above WCAG's AAA level (7:1).

● Steady ● Care needed ● Urgent
Never color alone

Every status has a word or icon too, for patients with weaker color vision.

4. Simplicity: one question at a glance

Every patient-facing screen stays as simple and direct as I could make it.

CODI design system token sheet
Tested with doctors and an AI patient

Usability testing

Coordinator dashboard. Testers came from my medical-school network: three Korean Medicine doctor friends and the respiratory specialist I worked with, four doctors in total. I ran it as moderated think-aloud testing, sitting beside each tester while they worked through the core task and narrated their reasoning out loud. Everyone completed it without guidance, and a follow-up SUS survey scored 87.2 out of 100 (n=4), well into the "excellent" range.

Moderated usability test session Coordinator dashboard test task

Key finding. The most important feedback came from the respiratory specialist, and it changed the dashboard.

1Finding

He pointed out that COPD is tied to heart disease. A COPD score alone doesn't show the whole patient.

2Why it matters

It matched my own experience treating patients: comorbidities like hypertension and diabetes always belong in the picture, not just the primary diagnosis.

3Change

I added a one-line AI summary of the patient's overall status, right under their name, before any chart.

The two cards below show the patient header on the coordinator dashboard, before and after testing. As-is shows only the name and ID; To-be adds the AI summary right under the name.

As-is
W
Walter, 73 Care needed
ID: WK-7731 · Portland Care Hub, Room 118C
Day 21 post-discharge

Name and ID only. The coordinator has to dig through charts to understand the patient.

To-be
W
Walter, 73 Care needed
AI SUMMARYSevere COPD with hypertension; recent exacerbation pattern.
ID: WK-7731 · Portland Care Hub, Room 118C
Day 21 post-discharge

The patient's overall status in one line, before anything else.

Patient app. I ran an AI agent through the app configured as Walter, a simulated COPD patient, with every step of its reasoning recorded. The clearest finding: the voice button and the "next" control sat on the same screen, and the agent couldn't tell which one to use first. I removed the redundant control.

The image below shows both fixes on the full screens: the mic-only check-in on the left, and the whole coordinator dashboard with the new AI summary on the right.

Patient app before/after, mic-only fix
The same system extends well past COPD

What this could become

CODI was built for COPD, but the same case applies elsewhere. Medicare's Hospital Readmissions Reduction Program penalizes hospitals for six conditions: heart attack, heart failure, pneumonia, COPD, hip/knee replacement, and CABG surgery. Beyond that list, it applies to any chronic condition that gets managed rather than cured.

CODI system extended to other chronic conditions

Working on this as both a doctor and a designer changed what I paid attention to. Treatment was never the whole story. The everyday friction around it mattered just as much. That's the perspective I want to keep bringing to healthcare products.

Hero How it started Expected impact Two apps, one signal Why this works as a business Who this is for Strategy & the hard problem first App walk through Design decisions Design system Usability testing What this could become More work