PRODUCT MANAGEMENT · SHIPPED 0 → 1 · 2026

TesseraHealth

A voice-first AI care coordination platform for elderly patients in India - researched, designed, and built solo, 0 to 1. The app is live and fully functional.

TIMELINE
2026
ROLE
PM · Solo, 0 to 1
STACK
React · Firebase · Azure OpenAI GPT-4o
METHOD
Interviews · Affinity Mapping · JTBD

HOW THIS STARTED

A PM class project I took all the way to shipped

Prof. Birju Shah's Product Management course at Kellogg. Most class projects end at the deck. I kept going - researched it, designed it, and built it myself until it was a real, working app.

149M

Indians 60+, cared for at home

21

Shift handoffs a week

0

Shared records between them

THE PROBLEM

Three people, three phones, zero shared record

Each one does their part. None of them read from the same page, because there is no page.

Om

Paper register + WhatsApp

Anika

Phone calls, another WhatsApp

Dr. Mehra

7 minutes, verbal recap

THE RESEARCH

Three interviews. Thirty minutes each.

A remote family caregiver in Delhi, a home care nurse in Mumbai, an outpatient physician in Jaipur.

"What she notices stays with her. It doesn't go anywhere useful."

Priya Nair, 38

Delhi · Family caregiver

"If I could just speak into my phone for one minute, that would be enough."

Ravi Shankar, 31

Mumbai · Home care nurse

"It would have to be one page. I have seven minutes. I cannot read a report."

Dr. Sunita Agarwal, 54

Jaipur · Physician

What changed

  • The ER scenario wasn't hypothetical - it already happened, twice.
  • The register is a ritual, not a tool anyone reads.
  • One page, bullets, seven minutes. Not a preference - a ceiling.

THE SYNTHESIS

Three conversations, five patterns

Every quote and observation, grouped by pattern instead of by person.

Affinity map - observations evaporate, handoffs are verbal and lossy
Affinity map - ER equals information crisis, accountability gap, format friction kills adoption

Observations evaporate

One record, visible to everyone - not one WhatsApp thread.

Handoffs are lossy

A persistent handoff doc, not a rushed verbal one.

ER = information crisis

The QR card is core, not a nice-to-have.

Accountability gap

Timestamped records that protect everyone.

Format friction

Voice for nurses. Dashboard for family. One page for doctors.

If I ran this again - the AI-assisted version

Same three interviews, same real quotes. Instead of a wall and sticky notes, a structured clustering prompt - run against the actual transcripts, not a hypothetical.

Prerequisites

This only works if these are true before the notes get clustered:

  1. 1.Every interview logged in the same format: Participant, Pain, Behavior. Mixed formats can't be parsed reliably - this is why the three notes below all follow the same shape.
  2. 2.Pain points captured as verbatim quotes or close paraphrases. A summary like 'caregiver was frustrated' gives the model nothing to cluster on.
  3. 3.At least 3 interviews. This project had exactly 3 - right at the floor where clustering stops being pattern-matching on noise and starts being real signal.

Sample AI prompt - theme clustering on the real interviews

System

Below are structured notes from patient-care interviews. Each note follows: Participant: [role, location] | Pain: [verbatim quote or close paraphrase] | Behavior: [what they actually do today]. Your job: (1) Identify the recurring themes across all interviews. (2) For each theme, list which participants raised it and a supporting quote. (3) Flag any insight that appears only once but seems high-impact. Output format: THEME [N]: [name] ([X/Y] participants) | Quote: [quote] ([participant]) | Implication: [1 sentence]. Do not include preamble or closing commentary.

User

Participant: Priya Nair, 38, Delhi, family caregiver | Pain: "What she notices stays with her. It doesn't go anywhere useful." | Behavior: Calls the nurse directly for updates, no shared record exists. Participant: Ravi Shankar, 31, Mumbai, home care nurse | Pain: "If I could just speak into my phone for one minute, that would be enough." | Behavior: Logs shift notes in a paper register and a separate WhatsApp thread. Participant: Dr. Sunita Agarwal, 54, Jaipur, physician | Pain: "It would have to be one page. I have seven minutes. I cannot read a report." | Behavior: Gets a rushed verbal recap from family at the start of each visit.

Output

THEME 1: Observations evaporate (1/3 participants) | Quote: "What she notices stays with her. It doesn't go anywhere useful." (Priya Nair) | Implication: Carer observations need one shared record, not word-of-mouth. THEME 2: Format friction kills adoption (2/3 participants) | Quote: "If I could just speak into my phone for one minute, that would be enough." (Ravi Shankar) | Implication: Each role needs its own input format - voice for nurses, one page for physicians. THEME 3: Visit time is a hard ceiling (1/3 participants, high-impact) | Quote: "I have seven minutes. I cannot read a report." (Dr. Agarwal) | Implication: Raised once, but it's a design constraint, not a preference - weight it above its frequency.

Error handling (add to system prompt)

If notes don't follow the Participant / Pain / Behavior format, respond: "Note format is inconsistent. Please reformat your notes before re-running this prompt." Do not attempt to cluster inconsistently formatted inputs - a confident-looking theme from malformed notes is worse than no theme at all.

How I tested this prompt

TEST 1 - REAL TRANSCRIPT

"The exact 3 interview notes above"

Expected: Output lands on the same themes the manual affinity map found - proof the AI version reaches a real conclusion, not just a plausible one.

TEST 2 - BAD FORMAT

"Notes pasted as a loose paragraph, no template"

Expected: Prompt refuses and asks for reformatting instead of clustering nonsense from unstructured input.

TEST 3 - LOW-FREQUENCY OUTLIER

"Dr. Agarwal's seven-minute constraint, raised by only 1 of 3"

Expected: Flagged as high-impact despite low frequency - it's the exact detail that became a hard product ceiling, not noise to average away.

THE PERSONAS

Built after the interviews, not before

A

Anxious Anika

Remote family caregiver

"The nurse notices everything. It just stays with her."

Changed: The observation happens. It just evaporates.

O

Overworked Om

Home care nurse

"I don't want to type. I don't have time to type."

Changed: My real competition isn't the register. It's inertia.

M

Dr. Mehra

Outpatient physician

"One page. Seven minutes. That's the ceiling."

Changed: Nurse adoption has to come first.

THE COMPETITIVE LANDSCAPE

Everyone solves one piece. Nobody closes the loop.

FeaturePaper / WhatsAppEHR / ABDMConsumer AppsTesseraHealth
Daily carer logging––◐Voice-first
Cross-role visibility–––Real-time
Physician pre-visit brief–––AI-generated
ER emergency access–◐–QR, no login
Shift handoff record◐––Structured

WHAT SHIPPED IN V1

Four features. All load-bearing.

F1

Voice Shift Logging

60–90 seconds by voice. No typing mid-shift.

F2

Family Dashboard

Status + 7-day trend. No phone call needed.

F3

AI Pre-Visit Brief

One page. 30 days. Seven minutes to read.

F4

Emergency QR Card

No login. Meds and allergies in 3 seconds.

Every feature here is load-bearing.

Remove any one, and the loop breaks for at least one persona.

THE AI ENGINE

F3 isn't "use AI." Here's exactly what it does.

Azure OpenAI GPT-4o turns 30 days of voice shift logs into a one-page brief Dr. Mehra can read in her seven minutes. It summarizes and flags. It does not diagnose - that line is enforced in the prompt itself, not just the design principle.

Prerequisites

This only works if these are true before the brief gets generated:

  1. 1.At least a few logged shifts in the window. One entry can't show a trend - the brief has to say so instead of inventing one.
  2. 2.Medication names and dosages entered correctly. A typo'd drug name breaks interaction flagging silently, with no error to catch it.
  3. 3.Voice notes clear enough to transcribe. Heavy background noise or a two-second utterance degrades the summary the brief is built from.

Sample AI prompt - pre-visit brief

System

You are a clinical documentation assistant generating a one-page pre-visit brief for a physician with seven minutes to read it. Given the patient's shift logs and voice notes from the past 30 days, output: a 2-3 sentence trend summary, up to 5 notable dated events, the current medication list, and any items flagged for physician attention. Describe only observed symptoms, vitals, and events. Never state or imply a diagnosis.

User

"Day 12: BP 148/92, reported morning dizziness. Day 19: BP 152/94, skipped evening walk, low appetite. Day 25: BP 139/88, ate well, more alert, no complaints."

Output

{ "trendSummary": "BP trended upward through day 19, then improved by day 25 alongside better appetite and activity.", "notableEvents": [ "Day 12 - Morning dizziness reported, BP 148/92", "Day 19 - BP 152/94, reduced activity and appetite", "Day 25 - BP 139/88, improved appetite and alertness" ], "flaggedForPhysician": ["BP peak of 152/94 on day 19 - confirm if medication adjustment needed"] }

Error handling (add to system prompt)

If fewer than 3 shift logs exist in the past 30 days, prepend: "Limited data - only N log(s) in the past 30 days" rather than presenting a confident trend from sparse input. If symptoms described could suggest a specific condition, list them under flaggedForPhysician as observed facts only - never name or imply the condition itself.

How I tested this prompt before shipping it

TEST 1 - CLEAR TREND

"10+ consistent logs showing gradually rising BP"

Expected: Trend summary states the rise plainly; the peak gets flagged for physician attention.

TEST 2 - SPARSE DATA

"Only 1 shift log in the past 30 days"

Expected: Brief opens with the limited-data disclaimer instead of inventing a trend from one point.

TEST 3 - ONE-OFF EVENT

"9 stable logs, 1 log mentioning severe chest pain"

Expected: The chest pain event stays flagged on its own, not averaged away by the stable majority.

TEST 4 - DIAGNOSIS-ADJACENT

"Logs mention chest pain and shortness of breath together"

Expected: Both symptoms listed as flagged facts for the physician - no condition named, per design principle 05.

THE PROCESS

The work underneath the screens

Interview guide

18 questions

Affinity map

5 themes

Personas

3, post-interview

User stories

20, with AC

Content model

8 data types

Wireframes

12 screens

MVC table

Full stack

Full PRD

44 pages

Content model - Patient Profile as the central entity connecting Medication List, Shift Log, Family Visit Note, Physician Visit Note, Emergency QR Card, Alert, and Pre-Visit Summary
Wireframe - emergency QR card
Wireframe - physician pre-visit brief

DESIGN PRINCIPLES

Six rules. Each one a decision.

★ 01

Beat the workaround

Under 2 minutes, or Om abandons it.

02

Design from the weakest link

A dashboard on no carer data is worthless.

03

Continuity over completeness

A partial log beats a perfect one, skipped.

04

No login between ER and meds

Clinical urgency overrides access control.

05

AI structures. It doesn't diagnose.

Every output is a flag, never a diagnosis.

06

Simple as WhatsApp, trusted as a chart

Easy to use. Easy to believe.

THE PRODUCT

What it looks like end to end

TesseraHealth landing screen
Voice shift logging with live transcription
Family caregiver dashboard with 7-day BP trend
Medication list with AI-flagged drug interaction

TRADEOFFS

Three bets, made on purpose

01

Voice over typed

The only input that survives a real shift.

02

Web over native

No app-store detour before shift one.

03

AI as structure, not decision

A flag or a summary. Never a diagnosis.

WHAT I LEARNED

Four things for the next build

01

PRD before wireframes

Every tradeoff got argued out in writing first.

02

Design from the weakest link

Om's adoption is the whole platform's ceiling.

03

The ER card became core

One interview turned a hypothetical into a certainty.

04

Backcast from 2030

It showed which 2026 decisions actually mattered.

Thanks for reading. If you've ever tried to coordinate a parent's care from another city, this one was for you.