Design System ← back
TaperSafe · v1.0

A calm app for an anxious moment.

Clinical-teal Material 3 on washed white. Every button is a pill. The 56-pt countdown is the loudest thing on every screen — and the only thing that moves.

Clinical Cyan palette React Native · Expo SDK 54 Material 3 inspired Light theme

Brand

A tilted pill capsule with soft notification rings, sitting on a cyan-teal gradient. The capsule itself — Pilpilon — is the standalone mascot used inside the product for medication tiles. The full icon adds the gradient backdrop and the ringing waves.

The icon, the gradient, and Pilpilon.

The app icon's background is exactly the primary → primary-dim gradient we use on every button. The pill is white-and-green-to-blue with a tiny medical cross. The three concentric ring-arcs are a reminder cue — the same shape your phone draws when an alarm fires. Source files: ios/.../AppIcon.appiconset for the icon, assets/pilpilon.png for the mascot.

App icon · sizes

20 · spotlight
29 · settings
40 · notification
60 · iphone
76 · ipad
128 · marketing
1024 · App Store

Pilpilon · the mascot

The pill capsule without the gradient backdrop. Used inside medication cards, empty states, and onboarding. Always sits on the primary-container mint circle when shown inline — never floating on raw white.

48 · row icon
80 · card hero
160 · empty state

Color

Clinical Cyan. A Material 3 inspired palette: bright cyan-teal primary, soft mint container, six-stop washed-white surfaces, warm amber for soft attention, red kept exclusively for overdue and destructive.

Primary & containers

primary#1a9fb5
primary-dim#1589a0
primary-container#b8f5ff
on-primary#ffffff

Surfaces — light scale

background#f0fafb
surface-lowest#ffffff
surface-low#e6f6f8
surface-container#daf0f3
surface-high#cce9ed
surface-highest#bde3e8

Text

on-surface#001f24
on-surface-variant#3f575b
text-muted#6f797a

Secondary, tertiary & semantic

secondary / success#2db87a
secondary-container#c2f5e0
tertiary#b8f04a
tertiary-container#e8ffc0
error#ba1a1a
error-container#ffdad6

Typography

System font (-apple-system / Roboto). The scale is deliberately wide — the countdown has to dominate.

Hero64 / 800
Welcome
Countdown56 / 800 · tabular
04:32:17
Title24 / 700
Next dose
Subtitle18 / 600
Take 1 tablet now
Body16 / 500
You're 12 days into a 30-day taper. Stay the course.
Caption14 / 500
Last taken at 9:00 AM
Small12 / 600
Updated 2 minutes ago
Tiny (badge)10 / 700 · caps
OVERDUE

Spacing

Standard 4-px base. Generous on the larger end — calm interfaces breathe.

xs4px
sm8px
md16px
lg24px
xl32px
xxl48px

Radius

Generous on purpose. Sharp corners feel clinical; round corners feel human. Every button is fully rounded.

sm12px · progress, badges
md16px · inputs
lg24px · cards
xl32px · hero cards
fullbuttons, chips

Elevation

One real shadow — soft, large, low-opacity. Used on cards and the countdown. Press is communicated by opacity, not by shadow change.

Card · (0, 8) blur 24, 6%
Sheet · (0, −4) blur 32, 10%

Buttons

Six variants, all pill-shape (radius 9999), default height 48, large height 64. Primary is a teal gradient with a soft colored shadow; everything else stays flat.

Variants

Sizes

Countdown

The hero of every patient screen. 56-pt tabular numerics, weight 800, letter-spacing −3. When a dose window closes without action, the digits flip to error red and an OVERDUE pill badge appears above.

04:32:17
until your next dose
OVERDUE
00:42:08
past your scheduled time

Card

White on the washed background. Radius 32, padding 24, soft shadow. The default container for every piece of grouped content.

Day 12 of 30

You're holding steady on 0.5mg. Three more days before your next reduction.

Icons

The system uses @expo/vector-icons Ionicons, outline variant. Outline reads as calmer than filled — important for an app a user opens when they're already anxious. Stroke width 1.6 (24px viewBox), rounded line caps. Color follows the parent: primary for active, on-surface-variant for idle, error for destructive.

In production

Three Ionicons currently ship in the tab bar: medical-outline, time-outline, settings-outline.

medical-
outline
time-
outline
settings-
outline

Recommended next

When the app needs more icons (chip glyphs, button leading icons, empty-state illustrations) — reach for these from the same Ionicons-outline family so the strokes stay consistent.

checkmark-
circle-outline
alert-
circle-outline
notifications-
outline
calendar-
outline
person-
outline
people-
outline
add-circle-
outline
create-
outline
trash-
outline
share-
social-outline
chevron-
back-outline
chevron-
forward-outline
close-
circle-outline
pulse-
outline

Color rules

  • Idle: on-surface-variant (#3f575b) — calm grey-blue.
  • Active / selected: primary (#1a9fb5) + stroke bumped from 1.6 → 1.9.
  • Inside a status chip: takes the chip's on-container color.
  • Destructive (trash, close): error (#ba1a1a) on a error-container wash.

Tab bar

Three tabs, three Ionicons. The active tab takes the primary color and a slightly heavier stroke; the inactive tabs stay at text-muted. The bar itself is a card — white surface, radius 32, soft card shadow.

Doses
Schedule
Settings

Chips

Fully-rounded status pills using Material 3 container colors — soft mint for "taken", lime for "pending", peach for "overdue".

Taken Pending Overdue Skipped

Number stepper

Used for dose amounts and pill counts. Two 52×52 teal pill buttons flank a 24-pt tabular-numeric value on surface-high.

0.5

Progress bar

12-px tall, radius 6, track surface-container, fill primary. Sits below the countdown on the patient home to show progress through the current taper step.

Medication card

Round mint icon + name + dose + status chip. Used on the patient home list and inside the doctor's plan editor.

Lorazepam
0.5 mg · twice daily
Sertraline
50 mg · once daily
Clonazepam
0.25 mg · evening
!

Home screen — assembled

Every primitive composed into the patient's daily view. Countdown on top, progress below, then the medication list, with a single primary "Take dose" CTA at the bottom.

9:41● ● ●
Next dose
02:14:08
Lorazepam 0.5 mg
Day 12 of 30 · 38% complete
Sertraline
50 mg · 9:00 AM

Doing it wrong

Things that will look out of place in TaperSafe.

Don't

Use orange or red as a default CTA color. Red is for overdue and destructive only — adding it anywhere else dilutes the signal.

Don't

Use square corners on buttons or chips. Pill (radius 9999) is non-negotiable — it softens the clinical edge.

Don't

Shrink the countdown to fit more content. The countdown is always the largest single element on the screen.

Don't

Stack multiple shadows or use inner shadows. One soft drop shadow per card. The system depends on it staying restrained.

Do

Let the teal gradient carry the brand. The primary button colour is the same gradient as the app icon — they're meant to read as one.

Do

Use container colors (primary-container, tertiary-container, error-container) for status chips. They encode meaning without shouting.