CVS Health · Hackathon Winner
CVS Medication Reminder
An inclusive medication-management concept designed during a hackathon.
- My role
- Concept, research framing, interaction design, accessibility, prototype
- Context
- CVS Health Global Hackathon, recognized entry
- Scope
- 24 iOS screens, 22 reusable components, safety and accessibility rules
- Platform
- iPhone, inside the existing CVS Health app
Interface recreated for portfolio presentation to protect confidential product information. Demo data is fictional. These are not CVS production screens, and no proprietary CVS design values are reproduced.
Interactive prototype, tap around
Today
01
The problem
Taking medicine on time is a memory task wrapped in anxiety. The people who most need a reminder, older adults, people managing several prescriptions, caregivers, people with low vision or limited dexterity, are the ones most often failed by reminder apps built for confident, fast, one-handed young users. And a medication product carries a second burden: it must never quietly become medical advice.
Setup is the barrier
Most people never finish creating a reminder, because setup asks for information the pharmacy already knows.
Missing a dose feels like failure
Streaks, scores and red warnings punish exactly the moment a person needs a calm next step.
Reminders leak private information
A medication name on a lock screen is a disclosure, and few products let the person decide about it.
Safety is a design problem
A reminder app can imply a dose change simply through wording. The safe answer is often a hand-off, not an answer.
02
Hackathon context
This began as an entry in the CVS Health Global Hackathon, built under a short time box: one concept, defensible reasoning, and something clickable at the end. I framed the brief around inclusion rather than novelty, no separate “senior mode”, no AI layer, no gamification. The constraint that shaped everything was that the idea had to live inside the app CVS already ships, not beside it.
03
The original concept, and what I changed
The first version was a twenty-one-screen flow on a red CVS shell. It covered the whole journey, which is why it was worth rebuilding rather than restarting, the structure was right, the execution carried risk.
Heavy red chrome → one primary action
Red now marks the single most important action on a screen instead of every bar and button.
Dense setup → discrete steps
Days, frequency, times and privacy became reviewable steps, each with one decision.
Color-only status → words plus shape
Due now, Taken, Taken late, Skipped, Missed and Not recorded are always labeled.
Unlabelled data → sourced data
Every value says whether it came from a CVS prescription or was entered by the person.
Assumed notifications → an explained request
Value and privacy are explained before the system prompt, and denial preserves the reminder.
No recovery → complete recovery
Missed doses, ambiguous directions, offline use, failed saves and expired caregiver access all have paths.
04
Research and accessibility framing
Rather than design for an average user and retrofit accessibility, I wrote the constraint list first and treated it as the specification.
Who this is for
Older adults, people on recurring medication, parents, caregivers, people with low vision, VoiceOver and Switch Control users, limited dexterity, memory load, limited health literacy, non-English readers, one-handed use and unreliable connectivity.
No separate senior mode
One experience that scales. Dynamic Type, Bold Text, Increased Contrast and Reduce Motion are the accommodations, not a parallel interface.
Plain, calm language
“Record dose”, “Remind me later”, “Skip this dose”. No “Submit”, no “Success!”, no “Noncompliant”.
Safety rules written before screens
Never change directions, never recommend or calculate a dose, never infer clinical meaning, always hand off uncertainty to a pharmacist.
05
Simplified architecture
Reminders belong where prescriptions already are. Nothing was added to the tab bar.
Home
- Next medication
- Prescription updates
- Health actions
- CVS services
Pharmacy
- Today’s medications
- Prescriptions
- Medication reminders
- Refills
- Prescription history
- Pharmacist support
In-Store
- Store finder
- Services
- Store details
Account
- Profile
- Family access
- Notifications
- Privacy
Primary
Pharmacy → Medication reminders → Choose medication → Confirm medication
→ Set schedule → Choose days → Reminder times → Notifications
→ Review reminder → Save → Medication due → Record dose → Today / history
Recovery
Medication due ─┬─ Remind me later (this occurrence only)
├─ Skip this dose (+ optional reason, side-effects hand-off)
└─ Missed reminder → Record what happened / Contact pharmacy
Setup ──────────┬─ Ambiguous directions → manual entry or pharmacy
├─ Notifications denied → reminder preserved
└─ Manual medication entry (nothing inferred)
Anywhere ───────┬─ Offline / loading
├─ Profile switch (authorized caregiver only)
└─ Edit · Pause · Delete (confirmed, prescription untouched)06
Today
The first question is always “what do I take now?”. Today answers it in one screen: due now, later today, and what has already been recorded, each item labeled in words, never by color alone.
Today
02 · Today’s medications
Pharmacy
01 · Pharmacy overview
Pharmacy
01b · Nothing set up yet
One primary action, no tutorial takeover.
07
Reminder setup
Setup starts from a prescription CVS already holds, so strength and directions arrive read-only and labeled. Each step asks one thing, and nothing is saved before the review screen. When the directions are ambiguous, “as directed”, “as needed”, the flow stops rather than guessing, and offers the pharmacy.
Choose medication
Step in reminder setup
04 · Select a prescription
Confirm medication
Step in reminder setup
05 · Confirm medication
Imported values are read-only and sourced.
Choose days
Step in reminder setup
08 · Days and frequency
Choose days
Step in reminder setup
08b · Ambiguous directions
Hand off, never convert.
Review reminder
Step in reminder setup
11 · Review before saving
08
Notification design
The permission request comes with a reason and a privacy choice, in context, before the system prompt. The person decides whether the medication name appears on the lock screen. If permission is denied, the reminder is still created and the app says exactly what will and will not happen.
Notifications
Step in reminder setup
10 · Notification setup
Notifications
Step in reminder setup
10b · Permission denied
Reminder preserved either way.
09
Recording a dose
The due screen carries three plain choices, record it, postpone this one occurrence, or skip it. Recording announces the confirmed time out loud for VoiceOver, stays undoable, and writes to the reminder history rather than to the prescription record.
Medication due
Step in reminder setup
13 · Medication due
Reminder created
Step in reminder setup
12 · Reminder created
10
Missed-reminder recovery
This is the screen most reminder apps get wrong. It never suggests doubling a dose, never scolds, and never guesses. It offers what is true: record what actually happened, or talk to a pharmacist.
Missed reminder
Step in reminder setup
17 · Missed reminder
Pharmacist support
Recovery · Pharmacist support
Medication reminders
Recovery · Offline and loading
11
Family and caregivers
Caregiving is the common case, not the edge case. Switching to another person’s reminders requires their authorization, shows a persistent banner naming whose reminders are on screen, and lists every consent granted, with no ability to alter their prescriptions.
Profiles
21 · Family and caregiver access
Reminder settings
22 · Reminder settings
12
History
History is a record, not a scoreboard. It shows taken, taken late, skipped and missed in supportive language, keeps corrections traceable, and stays separate from the prescription record so nothing here can be mistaken for a clinical document.
Medication history
20 · Reminder history
Metformin HCl
18 · Medication detail
Edit reminder
Step in reminder setup
19 · Edit or pause
13
Accessibility annotations
WCAG 2.2 AA was the floor, not the goal. The type scale, target sizes and status language were fixed before any screen was drawn.
Status is never color alone
Every status carries a word and a glyph in addition to its tint.
Source labeling
“From your CVS prescription” and “Entered by you” appear wherever medication values are shown.
Dynamic Type
All type derives from one multiplier; layouts wrap instead of clipping, at 100%, 130% and 170%.
Targets and focus
Minimum 44 × 44 pt on every control, with a visible focus ring for external keyboards and Switch Control.
Announcements
“Dose recorded as taken at 8:04 AM” is announced politely; nothing critical disappears on a timer.
Errors
Manual entry shows a summary plus field-level messages, and everything typed is preserved after a failure.
Reduce Motion
Push transitions and sheets fall back to a short cross-fade.
VoiceOver order
Nav bar → profile banner → heading → rows in visual order → primary action → tab bar, with combined row labels.
Today
Dynamic Type 130%
Medication due
Step in reminder setup
Dynamic Type 170%
Content wraps; no clipping, no truncated actions.
Today
Dark Mode
14
Component system
Twenty-two reusable components, each specified with default, pressed, focused, selected, disabled, loading, error, large-text, Dark Mode and VoiceOver behavior. Color is native iOS semantics plus CVS red reserved for the primary action; type is the system stack on a single scale; spacing is 4-pt with 16-pt margins and 12-pt grouped corners.
- Navigation bar (brand + inline)
- Bottom tab bar, four destinations
- Large and inline titles
- Prescription row
- Medication summary
- Due status label (text + shape + color)
- Day selector and reminder timeline
- Time picker row
- Schedule summary
- Profile indicator banner
- Primary / secondary / tertiary / destructive buttons
- Form field with permanent label, hint and error
- Search field
- Toggle and selection row
- Notification and lock-screen preview
- Confirmation and action sheets
- Success, warning, error, loading, empty and offline states
- History row and calendar status
- Pharmacist support card
- Undo toast
15
Prototype walkthrough
Every visible control works, on deterministic fictional data. Create a reminder from a prescription, record a dose, postpone or skip it, recover a missed reminder, edit or pause a schedule, switch to an authorized family profile, and review history.
Pharmacy
Try: “Manage reminders” → “Add reminder” → choose Metformin → step through schedule, times, notifications and review.
Then: Today → the due Levothyroxine dose → “Record dose”, “Remind me later” or “Skip this dose”.
Recovery: tap the missed 8:00 AM Metformin row; select the Amoxicillin prescription to see the ambiguous-directions hand-off; tap “Not now” on notifications.
16
Every screen
Pharmacy
01 · Pharmacy overview
Reminders live inside Pharmacy, next to prescriptions.
Pharmacy
01b · Empty state
No tutorial takeover, one primary action.
Today
02 · Today’s medications
Due now, later today, completed, missed or skipped.
Medication reminders
03 · Reminder entry
CVS prescription is the primary setup path.
Choose medication
Step in reminder setup
04 · Select a prescription
Search, active rows, expired kept separate.
Confirm medication
Step in reminder setup
05 · Confirm medication
Imported values are read-only and labeled.
Add medication
Step in reminder setup
06 · Manual entry
Permanent labels, field-level errors, nothing inferred.
Set schedule
Step in reminder setup
07 · Schedule type
Choose days
Step in reminder setup
08 · Days and frequency
Choose days
Step in reminder setup
08b · Ambiguous directions
No automatic conversion, hand off to the pharmacy.
Reminder times
Step in reminder setup
09 · Reminder times
Readable preview and a non-blocking conflict notice.
Notifications
Step in reminder setup
10 · Notification setup
Value and privacy explained before the system prompt.
Notifications
Step in reminder setup
10b · Permission denied
Reminder is preserved either way.
Review reminder
Step in reminder setup
11 · Review reminder
Nothing saves before review.
Reminder created
Step in reminder setup
12 · Reminder created
Medication due
Step in reminder setup
13 · Medication due
Missed reminder
Step in reminder setup
17 · Missed reminder
Safe content, never advises a double dose.
Metformin HCl
18 · Medication detail
Edit reminder
Step in reminder setup
19 · Edit or pause
Medication history
20 · History
Supportive language, no streaks or scoring.
Family
21 · Family
Add loved ones, request access, nudge a missed dose.
Profiles
21b · Caregiver consent
Reminder settings
22 · Reminder settings
Medication reminders
Recovery · Offline and loading
Pharmacist support
Recovery · Pharmacist support
17
Outcomes and lessons
This concept was recognized at the CVS Health Global Hackathon. It is a concept, not a shipped feature, so there are no adoption or adherence numbers to report, and inventing them would undermine the thing the work is actually about.
Inclusion is architecture, not polish
Writing the constraint list before the screens changed the information architecture, not just the type sizes.
The safe answer is often a hand-off
The strongest safety decision in the whole flow was refusing to interpret ambiguous directions.
Recovery deserves the same care as the happy path
The missed-dose screen took longer to write than the entire setup flow.
Restraint reads as trust
Removing the red from everywhere except the primary action made the product feel calmer and more credible.
Limitations
- Visual alignment to the current CVS app is inferred from publicly observable conventions, not verified against internal references.
- Native pickers, haptics, notification delivery and Switch Control are represented, not executed, this runs in a browser.
- VoiceOver order is documented and structurally implemented; device screen-reader passes are outstanding.
- Localization and right-to-left layouts are accounted for structurally; translated content is not included.