CVS Benefits

The app shows your FSA balance and deadline, checks products for eligibility, and splits the cart between the FSA and another card. So does the register.

Timeline
3 weeks
Team
Independent
Role
Product Designer
Focus
Mobile Design
Interaction Design
Point of Sale
Brief Research Reframe Opportunity Components Design Secondary Reflections
Brief

An app feature to keep shoppers in the store longer

The brief asked for an app-first feature that keeps customers in the store longer, measured in dollars: basket size, return visits, conversion and fewer walk-outs. It came with a prototype, ExtraTime, and six earlier initiatives not to repeat. Read against the analytics package, it had three problems:

Time in the store was already up

Dwell rose 14% after the endcaps moved, and abandonment rose two points with it.

App-first leaves out the most loyal shoppers

Seniors, the most loyal shoppers, made 4% of in-app coupon redemptions.

Nudges to stay had backfired

The two-hour ExtraBucks timer drew the sharpest survey comments and a $47,500 settlement.

Research

What the region had tried, and what shoppers were losing

The brief came with Region 4's analytics package: thirty months of metrics from eight Pittsburgh stores, six earlier initiatives and their results, coupon redemptions by age, and a sample of survey comments. I read it for what had already been tried and how shoppers answered, then looked at national data on FSAs.

The older the shopper, the less the app gets used

Shoppers 65 and over redeemed 8% of their coupons in the app, against 81% for 18 to 29. In the same two months they redeemed 39,241 printed ones.

Share of coupon redemptions made in the app, Aug–Sep 2024. Coupon Redemptions tab.

The Historical Initiatives tab: six rows, INIT-01 to INIT-06, with each initiative's description, launch and end dates, stores, primary metric, topline result, status and owner
Historical Initiatives tab
The Coupon Redemptions tab for August and September 2024: redemptions and attributed incremental basket by month, channel and age band, with in-app redemptions for shoppers 65 and over in the low thousands against twenty thousand printed coupons
Coupon Redemptions tab, Aug–Sep 2024

Half of FSA holders lose some of theirs

An FSA is pre-tax money for medical costs, and it expires. In 2022, 52% of accountholders forfeited part of theirs to their employer, $441 on average. In 2023 it was still roughly half, $436 on average.

EBRI's analysis of 3.2 million FSAs, 2022 and 2023.

Takeaway

Whatever replaced the brief had to work for people who never open the app and not rush anyone. Meanwhile, half of FSA holders were losing money meant for what CVS sells.

Sources: CVS Region 4 analytics package provided with the brief, covering January 2024 to June 2026 across eight stores; survey comments are the package's stratified sample, about 2% of responses. EBRI analysis of 3.2 million FSAs, May 2024; PlanSponsor on the same report, with the 52% figure; EBRI on 2023, May 2025.

Reframe

From more time in the store to money already set aside

CVS sells what FSA money is for, so I changed the question: from keeping people in the store to helping them spend what they already have before it is gone.

From

"How might the app keep customers in the store longer?"

To

"How might the app help people spend their FSA here before it expires?"

Opportunity

The register already knows the answer

Chain pharmacies run IIAS, which tags each product eligible or not and charges the FSA the eligible total. It runs when the card is presented, so shoppers see the split only at payment.

I started by designing an eligibility checker, then realised the register already calculates the answer.

From

"Is this eligible?"

To

"$31.48 can go on your FSA"

Paying automatically does not stop money expiring

Workers whose claims were all approved at the register forfeited $114 more on average than those who submitted at least one by hand, and were 13 points more likely to forfeit. EBRI suggests inertia may play a part. Making payment easy is not enough; people need to see what is left before they pay.

EBRI, December 2024. The two averages as reported by Investopedia.

Sources: NMI on IIAS at checkout; Flex on IIAS item checks; EBRI on FSA substantiation, December 2024; Investopedia's report of the averages, December 2024.

Components

One kit for the app and the register

CVS's app is several products in one shell, with three different tab bars between them. I kept its patterns and made them consistent; the register got its own small set.

Kept

Navy pill buttons, the search field, the plan card's progress bar, the product card.

Changed

One tab bar. Red only for the heart and the amount that expires. One eligibility tag, from product card to register.

The app components: a product card, the FSA and HSA account cards, two order cards, the FSA/HSA and Not eligible tags, five button styles, a text field in default, focus, error and valid states, a sub-page header, the benefits search field, a pickup or ship segmented control, and the added-to-cart sheet
App patterns, in CVS's design language
The register components: the customer-screen header with and without a recognised shopper, an item row in eligible, not eligible and removed states, a success and a warning banner, and primary, outlined, text and danger button styles
Register components, for a 1366 by 768 customer screen
Design Breakdown

Six moments, from connecting to the receipt

Each phone is the working prototype, looping one step of the flow.

Open the full prototype

Scanning the WEX card

Connecting a benefits account

You log in on the provider's own page, and CVS receives the balances and plan dates. The camera then reads the card, so it can pay in the app.

Switching between the FSA and the HSA

The balance, and the part that expires

Below the balance: what expires on December 31 and what can carry over into 2027. The HSA tab notes that HSA money does not expire.

Scanning SPF lip balm, then a chocolate bar

Checking a product before buying it

SPF lip balm comes back eligible. Chocolate doesn't, because under IRS rules food isn't a medical expense.

Adding bandages, then removing the chocolate

The split, while you shop

Each time the cart changes, the bar showing the FSA and card amounts updates.

From the phone to the register

At checkout, the register scans the barcode in the app and charges the eligible items to the FSA card. The app's balance then updates.

Register screen asking the shopper to scan their ExtraCare card

The shopper's phone

The register's customer screen

Opening an FSA order and downloading its receipt

A receipt that holds up as proof

Orders filter to FSA and HSA purchases. Each receipt marks every item's eligibility, so WEX can verify a claim.

Sources: IRS on food, vitamins and general health; FSAFEDS on over-the-counter medicines; IRS Rev. Proc. 2025-32 on the $680 carryover into 2027.

Secondary Surface

Four ways checkout can end

Shoppers who do not use the app still pay at the register, so its customer screen shows the same split to everyone and takes one card at a time.

Paid in two steps

The FSA card pays for the eligible items first, then a second card pays for the rest.

Customer screen asking the shopper to scan their ExtraCare card while the item list is still empty

1Scan prompt

The screen asks for the ExtraCare card before anything is scanned.

Customer screen greeting Edward, with two of three items FSA/HSA eligible and $31.48 able to go on the FSA

2Recognized

Two of the three items are eligible, and $31.48 can go on the FSA.

Step 1 of 2: tap or insert the FSA card for $31.48 covering the two eligible items

3Pay with the FSA card

Step 1 of 2: tap or insert the FSA card for $31.48.

FSA paid $31.48 for 2 items. Step 2 of 2: pay the remaining $4.19 with another card

4FSA paid, pay the rest

The FSA paid $31.48 for two items. Step 2 of 2 is $4.19 on another card.

All set: WEX FSA paid $31.48 for eligible items and Visa paid $4.19 for everything else, total $35.67

5Done

WEX FSA paid $31.48 and Visa paid $4.19, a total of $35.67.

FSA balance too low

The FSA covers $20.00 of $31.48, and the remaining $11.48 moves to the second card.

Alert that the FSA covered $20.00 of $31.48, the rest of its balance, leaving $15.67 to pay: $11.48 eligible plus $4.19 other

1Balance too low

The FSA covered $20.00 of $31.48, all it had left; $15.67 remains.

All set: WEX FSA paid $20.00, all of its balance, and Visa paid the remaining $15.67

2Done, split across two cards

WEX FSA paid $20.00 and Visa paid the remaining $15.67.

Remove an item

After the FSA has paid, the shopper can remove the item that needed a second card.

Cancel the rest? The FSA already paid $31.48, with options to pay $4.19 now, remove the Hershey's bar, or cancel the whole order

1Cancel the rest?

The FSA has paid $31.48. The shopper can pay $4.19 now, remove the bar, or cancel.

The Hershey's bar is struck through as removed, and the order is complete at $31.48 paid by the FSA

2Item removed, done

The chocolate bar is removed and the order completes at $31.48 on the FSA.

Cancel the order

Cancelling after the FSA has paid refunds the FSA payment.

Order canceled, with the FSA payment of $31.48 reversed

1Order canceled

The order is cancelled and the $31.48 FSA payment is reversed.

Reflections

Check what a system already knows before designing on top of it

The design is still untested in three places.

With the people it's for

Only a WCAG self-audit so far. Seniors and first-time FSA users would show what it can't.

With CVS's numbers

The case rests on national FSA averages, not CVS's own rates.

On a real register

The pause between a card tap and a confirmed split can't be staged in Figma.

Back to Work ←