Claims list card view — desktop
Claim detail overlay — approved claim with services expanded

KAISER PERMANENTE • REDESIGNING THE MEDICAL CLAIMS EXPERIENCE FOR PATIENT UNDERSTANDING

KAISER PERMANENTE CASE STUDY
Staff Product Designer  •  Kaiser Permanente  •  2020–2021, rebuilt 2026

Kaiser members got bills they couldn't understand, and called support instead of paying them. I redesigned the claims experience — list, detail, denials, mobile — so members could see what they owed and why, without picking up the phone. In 2026 I rebuilt the same design as a fully functional prototype, directing Claude Code through Figma MCP.

Highlights:
  • A two-slot badge system (status + financial) tells a member what happened and what to do next, before they click into a claim
  • Rebuilt the entire 2020 design as a live, responsive prototype in 2026 — Claude Code reading real component data via Figma MCP, directed by a CLAUDE.md brief written before any code existed
  • Reframed cost as savings, not debt: a member sees Kaiser absorbed $155 of a $185 charge before they see the $30 they owe
  • Denied claims surface the actual denial reason in plain language, plus the 180-day appeal window — not a generic template
Redesigned claims card detail
A closer look at the redesigned claim card: two badge slots, amount owed, service date, and care received — all before clicking anything.
⸻ A NOTE ON THIS CASE STUDY
This case study documents two phases of work. The original redesign was completed in 2020–2021. In 2026, I returned to it — using an AI-assisted workflow to generate a fully functional, responsive HTML prototype via Claude Code and Figma MCP. The design thinking is from 2020. The execution reflects how I work today.

▶  VIEW LIVE RESPONSIVE PROTOTYPE     ▶  VIEW MOBILE-SIMULATION PROTOTYPE

PROJECT BRIEF

I joined Kaiser Permanente to redesign the medical claims experience for members, on web and mobile. Kaiser had the data to explain any charge — the problem was that none of it reached patients in a form they could use. Members getting billed after a visit had no reliable way to see what they owed, why, or what to do next, and medical billing is already one of the more anxiety-producing experiences in American life. The result was predictable: confusion, and a high volume of support calls from people who weren't disputing their bill, they just didn't understand it.

RESEARCH & DISCOVERY

Listening to members

Research involved listening sessions on member support calls and review of claims-related call volume data. What emerged was a clear and consistent pattern: the gap between members who understood their claims and those who didn't wasn't about education level or financial sophistication. It was about whether the interface had ever explained anything to them.

Members who understood insurance — who knew what a deductible was, what a plan phase meant, what copay versus coinsurance meant — navigated the existing experience adequately. Everyone else was lost. And the existing design made no attempt to bridge that gap. It surfaced transaction codes, remark descriptions, and clinical terminology without translation.

The real question members were asking

One member calling in had just lost a family member and couldn't understand why she owed anything on his final claim as the account holder. The system gave her numbers. It gave her nothing else.

That research anchored every design decision that followed. The question wasn't "how do we display claim data?" It was "how do we help someone understand what happened to them financially after a medical visit?"

The existing experience

The prior claims interface showed members a table of line items — procedure codes, charge amounts, and remark descriptions — with no plain-language interpretation. Codes like "[24] Pmt adjusted, charges covered under capitation agreement / managed care plan" appeared without explanation. Members saw numbers but not meaning. The experience assumed insurance literacy that most members didn't have and didn't need to have.

Existing claims table with procedure codes
The existing experience: a data table of procedure codes, remark descriptions, and amounts — built for administrators, not patients.
KEY DECISIONS & TRADEOFFS

1) A claims list built for scanning

The redesigned claims list surfaces the information members need before they click anything: service date, what care was received, status, and what they owe. Status badges — Pending, Approved, Denied, Needs Payment, Payment Resolved — are visually distinct and placed consistently so members can scan the list and understand the state of each claim at a glance.

Two badge slots do the work: primary status on the left, financial status on the right — a card with no secondary badge means nothing is owed. Together they answer both questions members actually have, what happened and what to do next, without a click.

Members can toggle between card and table view — card for more context per claim, table for scanning a longer history. Both open the same claim detail overlay.

Claims list card view — desktop
Card view: status, amount owed, service date, and care received — all visible before clicking anything.
Figma component system — badges and card states
The badge component system: five states across two slots, built in Figma.

2) Building the component system in Figma

Every element visible in the claims list is a properly constructed Figma component — not a collection of static frames. Each badge variant is built with auto layout, named layers, and design tokens applied to every fill, stroke, and text style. The claim card is a parent component with nested badge instances, allowing any card in the design to be updated by swapping a badge variant from the properties panel rather than editing individual layers.

The card component exposes its nested properties — badge state, financial badge state, your share amount, service date, care received text — so that any instance can be configured from the right panel without double-clicking into the component structure. This is the difference between a design system that scales and a collection of frames that has to be manually maintained.

Naming follows a consistent slash-separated hierarchy throughout the file — badge/pending, badge/approved, card/default, card/hover, card/selected. That structure is what lets Claude Code, reading the file via Figma MCP, navigate it accurately and generate code that references the right component at the right state, instead of approximating from a screenshot.

Figma card component with nested instances and exposed properties
The claim card component in Figma: nested badge instances, exposed properties, and auto layout — configured from the right panel without entering the component.
Figma component system — overlay states
The claim detail overlay's component states in Figma — approved, denied, and pending, each built as a proper variant.

3) Table view — for members who prefer density

The original experience was table-only. Rather than abandoning the table entirely, I preserved it as an option for members who prefer scanning a dense list — power users, those tracking a specific claim, anyone who finds cards too spacious.

The redesigned table replaces procedure codes and remark descriptions with plain-language care descriptions, and applies the same badge system as the card view. Both primary and secondary badges appear inline within each row, so status is immediately scannable regardless of which view the member prefers.

Claims table view — desktop
Table view: the same badge system applied to a scannable row format, for members who prefer density.

4) Claim detail — context without navigation

Rather than navigating members away to a full detail page, I surfaced claim detail in an overlay — accessible directly from the list without losing context. At this level, the overlay shows the services included in the claim, each with the member's share clearly labeled, and the ability to expand any line item for a full cost breakdown.

The overlay leads with the most urgent information: claim number, status, service date, provider, and the member's total share — large and unambiguous. When a balance is due, the "View and pay your bill" button appears immediately adjacent to the amount. The action lives where the motivation is.

I deliberately reframed cost as savings rather than debt. A member who understands that their $30 copay comes after Kaiser absorbed $155 of a $185 charge has a fundamentally different relationship with that bill. The design makes that visible — every time, for every claim.

Claim detail overlay — approved claim with services expanded
Claim detail overlay: services expanded, full cost breakdown visible, deductible progress in context.

5) Denied claims, explained

Denied claims require a different tone. The member needs to understand not just what they owe, but why the claim was refused and what they can do about it. The overlay surfaces a plain-language denial reason for each affected service, the appeal window (180 days), and a direct link to the appeal process.

The "Why do you owe what you owe?" section adapts its language to the claim's status — for denied claims, it explains the denial reason specifically rather than defaulting to the generic deductible explanation. The design responds to context rather than showing the same template regardless of what happened.

Claim detail overlay — denied claim
Denied claim overlay: plain-language denial reason, appeal window, and the deductible context that explains the member's financial responsibility.

6) Mobile carries the same information

The mobile experience collapses the four-column card grid to a single column, with the same card component and the same badge system. No information is removed. The recent claims activity section collapses to a single carousel card. I didn't bring list view to mobile — card view is the default and the only option, which simplifies the experience for the context in which mobile users most commonly encounter it: checking on a specific claim after receiving a notification.

On the overlay, mobile keeps the same content hierarchy as desktop — claim number and status at top, amount and pay button right below, services expandable, deductible progress at the bottom. Only the layout changes; the information architecture doesn't.

Claims list — mobile view
Mobile card view: single column, same badge system, same information hierarchy as desktop.
HOW I BUILT IT IN 2026

From Figma to working prototype via Claude Code

Returning to this project in 2026, I rebuilt the entire design system from scratch in Figma — proper design tokens, a two-layer primitive and semantic token architecture, auto layout components with named layers and variants, and a component set covering every badge state and card configuration.

I then used Claude Code with Figma MCP to read the design file directly and generate a fully functional HTML prototype. The Figma MCP connection gives Claude Code access to the actual design data — component names, token values, layer structure, spacing — rather than just a screenshot. The code it generates references your real token names, not approximated hex values.

CLAUDE.md — briefing the AI before it builds

Before writing a single line of code, I created a CLAUDE.md file in the project directory — a plain-language briefing document that Claude Code reads at the start of every session. It defines the file structure:

  • HTML — markup
  • CSS — styles
  • data.js — content arrays
  • app.js — behavior

It also specifies the exact color tokens, typography specifications, component dimensions, badge logic rules, and which SVG assets are available in the assets folder.

This single file prevented most of the iteration cost that would otherwise come from Claude Code guessing at design intent. When Claude Code knows the rules before it starts, it builds to spec rather than building its best approximation and waiting for corrections.

What the AI workflow taught me

The highest-value moments in the build were not when Claude Code got things right automatically — they were when I identified what it got wrong and corrected it precisely. The badge SVG icons, the deductible progress bar segmentation, the overlay centering on mobile — these required specific, directed prompting that came from understanding both the design intent and the constraints of the implementation.

AI-assisted prototyping compresses the time between design decision and testable artifact. But the judgment about what the artifact should be, and whether it succeeded, remained entirely human.

Claude Code reading the CLAUDE.md briefing file
Claude Code summarizing the CLAUDE.md briefing — confirming it understands the project rules before building anything.
Claude Code reading the Figma design file via MCP
Claude Code reading the Figma file via MCP — extracting component structure, token values, and layout data directly from the design file.
Claude Code making targeted corrections based on designer direction
Directing Claude Code to make targeted corrections — identifying what the AI got wrong and prompting precise fixes. The judgment is always human.
VALIDATION & REFLECTION

Usability testing results

We tested with real Kaiser members across a range of insurance literacy — not just people who already knew what a deductible was. Comprehension improved over the existing experience for both groups, and the gap between them narrowed, which was the actual goal. A redesign that only worked for members who already understood insurance wasn't doing its job.

Reflection

This project reinforced something I carry into every healthcare and enterprise engagement: the interface is never neutral. A claims screen that shows accurate data but explains nothing still isn't neutral — it works for members who already understand insurance and fails everyone else, in predictable ways. Designing for comprehension, not just accuracy, is an ethical call as much as a design one.

The work also sharpened my instinct for emotional context in functional design. A billing interface is not just a transaction tool. It arrives in people's lives during moments of physical vulnerability and financial stress. The plain-language cost explanation, the deductible phase tracker, the appeal guidance on denied claims aren't decorative — they're the design doing its most important work.

Rebuilding this in 2026 added a different kind of reflection. The design thinking held up. The original decisions — badge-first scanning, overlay over navigation, plain language throughout — were sound. What changed was the execution and its reach. Previously, I would hand off this work as static screens linked together in a prototype — useful for communicating intent, but limited in what it could demonstrate. Today, I can build a working prototype with AI tools like Claude Code that functions as a real application: the overlays open, the data populates, the views toggle, the layout responds to the screen. That's more useful for engineering teams who need to understand interaction behavior before building, for product and business stakeholders who need to experience the product rather than imagine it, and for me as a designer to understand how my decisions actually function and how my audience will move through them. The gap between what I design and what I can put in someone's hands has closed considerably.

Claim detail — final state
The deductible progress component — a unified visualization of plan phase and progress that replaced two conflicting displays in the original design.
FEATURED CASE STUDIES
DROP ME A LINE.

LET'S BE IN TOUCH:






JOSEPH IS BASED IN SAN FRANCISCO, CALIFORNIA: