GoodRx Design System


Scroll down to content
Evolving the GoodRx Design System

 

About GoodRx
GoodRx is a digital healthcare platform that helps people access affordable care through prescription savings, memberships, telehealth, and trusted health information. As the business expanded into subscriptions, editorial, Rewards, healthcare-provider experiences, and white-label pharmacy products, the design system needed to support an increasingly diverse product ecosystem.

 

GoodRx product experiences shown side by side: Coupon, Telehealth, Subscriptions, Editorial, Rewards, GoodRx for HCPs, and RX SmartSaver, illustrating the range of products supported by the shared design system.

 

My Role
As Staff Product Designer for Platform & Design Systems, I led the evolution of GoodRx's Design System to support a company-wide rebrand and long-term platform scalability.

 

My work spanned system strategy, token architecture, foundations, accessibility, documentation, governance, and design-to-engineering alignment. I partnered with two designers and four engineers across Product, Brand, and Engineering, helping carry the work from system definition through cross-platform rollout.

 

The Challenge
GoodRx was undergoing a major visual rebrand at the same time its product ecosystem was becoming more complex.

 

The existing system had accumulated drift across tokens, components, and implementation—including gaps between Figma and production. At the same time, teams were continuing to ship and increasingly solving shared UX problems in different ways.

 

The challenge wasn’t simply to apply a new visual language. It was to modernize an active design system while the organization kept shipping—without creating another generation of fragmented patterns.

 

The Approach
Rather than treating the rebrand as a surface-level refresh, I used it as a forcing function to modernize the system itself.

 

I focused the work across four connected areas: architecture, foundations, reusable product patterns, and adoption—creating a system that could absorb visual change, support evolving product needs, improve design-to-code alignment, and scale more intentionally across the organization.

 

token architecture

Building a resilient design foundation

 

The rebrand exposed a structural problem: the system had become too tightly coupled to visual values and implementation details. I redesigned the token architecture around semantic intent, separating raw values from component implementation and creating a shared language between design and code. That architecture became the mechanism that allowed the new visual language to scale without rebuilding every experience individually.

 

Naming by intent, not appearance
Legacy token names reflected colors, products, and implementation details rather than purpose. I introduced semantic naming that improved clarity, encouraged reuse, and created a more scalable foundation for future evolution. Comparison of legacy appearance-based token names and new intent-based semantic token names

 

A shared language for design and code
I established a predictable semantic naming convention based on layer, role, variant, and state, using familiar conventions such as text, bg, and stroke. This made token purpose easier to understand in both design and code while creating a vocabulary that could scale with the system. Semantic token naming convention showing layer, role, variant, and state

 

A layered token architecture
The naming convention became the foundation of a layered architecture that separated raw values, semantic intent, and component implementation—creating a flexible system that could evolve without rebuilding components. Diagram showing primitive, semantic, and component layers within the token architecture

 

Built for change
Separating semantic intent from primitive values made large-scale visual updates significantly easier. Components continued referencing the same semantic tokens while only the underlying primitive values changed. The system could absorb a new theme without requiring teams to redesign or rebuild every component individually. Comparison showing hardcoded component values replaced by semantic token references

 

Looking ahead

This same structured architecture also creates useful context for AI-assisted workflows, where semantic tokens, documentation, and production mappings can help tools understand how the system is intended to be used.

 

 

modernizing the foundation

Translating a new brand into a scalable product system

 

A brand identity defines how a company looks. A product system has to define how that identity behaves across real interactions, states, platforms, and accessibility requirements. I translated the refreshed identity into shared foundations for color, typography, shape, elevation, accessibility, illustration, and iconography—giving teams reusable rules rather than requiring each product to interpret the brand independently.

 

Color

Turning a brand palette into a product language
I translated the refreshed palette into semantic roles for hierarchy, interaction, feedback, and promotion, giving teams a consistent way to apply color across product experiences. GoodRx brand palette translated into product color roles for hierarchy, interaction, feedback, and promotion

 

Supporting interaction
I defined reusable color states for primary, brand, and critical actions—including hover, pressed, focus, and disabled states—creating a shared interaction language across components. Primary, brand, and critical action colors shown across interaction states

 

Communicating system status
Feedback states paired color with iconography, typography, and supporting copy so meaning never relied on color alone. Feedback patterns showing critical, success, warning, and informational states

 

Typography

Bringing a new brand voice to product experiences
I translated the refreshed brand typography into a scalable product system, pairing expressive display type with highly readable content typography. GoodRx typography system pairing Moon headings with Bolton body text

 

Creating a more consistent visual hierarchy
I redesigned the typography scale to establish more predictable relationships between heading levels. Replacing irregular size jumps with a systematic progression improved visual rhythm, strengthened hierarchy, and created a foundation that could scale with future product needs. Before-and-after typography scale showing more predictable relationships between heading levels

 

Typography scale should have rhythm, not accidents
The previous scale relied on arbitrary size jumps that lacked a clear pattern. I established a systematic 12px and 4px progression, creating stronger visual hierarchy and a more scalable foundation. Typography scale showing a consistent 12px and 4px progression

 

Modernizing typography tokens for design and code
By standardizing sizing around a 16px base and converting tokens to rem values, I created a more accessible, responsive, and scalable foundation while improving design-to-engineering alignment. Typography tokens showing a 16px base and rem-based sizing

 

Radii

Establishing a clearer shape language
The rebrand introduced a more expressive visual language, creating an opportunity to standardize shape across the system. I established a radii framework based on component role, moving interactive controls from 8px to fully rounded treatments while using more structured corners for non-interactive elements. Button components changing from 8px corner radii to fully rounded shapes

 

Preserving hierarchy through shape
To avoid making every element feel equally actionable, informational and static components retained more structured corner treatments. Badges, for example, shifted from fully rounded to 4px corners, creating a clearer distinction between interactive, informational, and structural elements. Badge components changing from fully rounded shapes to 4px corners to distinguish informational elements from interactive controls

 

Elevation

Refining depth and hierarchy through elevation
I introduced a new elevation token system that defined consistent depth relationships across components and surfaces. Standardized elevation values improved implementation consistency, strengthened design-to-code alignment, and created a scalable foundation for future component development. Elevation token system showing standardized elevation values for component and surface depth

 

Creating meaningful depth and affordance
The existing interface relied heavily on elevation in default component states, creating visual noise while diminishing its ability to communicate hierarchy. Hover interactions were similarly understated, often relying on barely perceptible color shifts to indicate interactivity.

 

If everything has elevation, nothing has elevation. If hover is only a tiny color shift, users may not perceive it.

Before example showing elevated default card states with minimal hover differentiation

 

I established a standardized elevation system that removed shadows from default states and reserved them for hover, focus, and floating surfaces, creating clearer affordance and a more intentional sense of depth throughout the experience. After example showing shadows reserved for hover, focus, and floating surfaces

 

Standardizing floating surfaces
The floating elevation token was applied consistently across modals, dropdown menus, and tooltips, reinforcing hierarchy and reducing visual inconsistency across the system. Floating elevation applied consistently to a modal, account dropdown, and tooltip

 

Accessibility

Auditing accessibility across the system
As part of the rebrand, I conducted a system-wide accessibility audit across foundational colors, components, and interaction states, reviewing both color contrast and broader WCAG requirements. The audit surfaced opportunities to improve contrast, focus visibility, state differentiation, and interaction affordances through shared foundations rather than one-off fixes.

 

Modernizing inputs for accessibility and clarity
The legacy input component relied on low-contrast stroke colors that failed accessibility requirements in default and focus states. I updated the color system to achieve compliant contrast ratios, strengthen focus affordances, and create clearer interaction feedback. Before-and-after input states showing improved contrast and focus visibility

 

Designing beyond minimum compliance
Although disabled controls are exempt from WCAG non-text contrast requirements, I refined disabled text and stroke colors to improve readability beyond minimum compliance.

 

Extending accessibility to dark surfaces
Rather than optimizing inputs for a single background color, I defined state-specific color tokens that could adapt across light and dark surfaces. This approach ensured accessibility requirements, visual hierarchy, and interaction affordances remained consistent throughout the system. Input states adapted for a dark surface using state-specific accessible color tokens

 

Illustrations

Bringing personality to functional experiences
I incorporated the updated illustration system into product experiences, creating a consistent visual language that reinforced the GoodRx brand while making functional healthcare workflows feel warmer and more approachable. GoodRx illustrations used across functional healthcare product experiences

 

Expanding the visual language through spot illustrations
I extended the design system to support Brand's spot illustration library, providing reusable patterns and documentation that encouraged consistent adoption across the product. GoodRx spot illustration library organized for reusable product use

 

Utility Icons

Modernizing iconography for consistency and clarity
I integrated the updated utility icon library into the design system, collaborating closely with the icon designer as new icons were introduced. This established consistent implementation patterns and created a scalable foundation for future product needs. GoodRx utility icon library showing generic interface, outline, filled, and social icon styles

 

 

production rollout

A single theme, applied everywhere.

 

The rebrand was implemented as a shared theme rather than a series of one-off redesigns. Because product experiences were built from shared foundations and components, the new visual language could scale across the ecosystem while preserving existing layouts, content, and workflows.

 

Before-and-after product experience showing the refreshed GoodRx theme applied through shared semantic tokens and components

 

A seamless theme transition
Shared components referenced semantic design tokens rather than hard-coded brand values, allowing existing experiences to inherit the refreshed visual language without changing their underlying structure. Previous and rebrand GoodRx themes compared on the mobile welcome screen. Previous and rebrand GoodRx themes compared across mobile search and prescription pricing screens.

 

Unchanged

Layout, Content, and Workflow

Updated

Components, Colors, Typography, Icons, and Elevation

 

Validating the theme in production
The new theme was deployed behind a feature flag and tested across shared components, legacy surfaces, and bespoke product UI.

 

I partnered with Engineering to triage issues based on whether they belonged in the design system, implementation, or an individual experience. Shared issues were resolved centrally before broader rollout.

 

This turned the rebrand into a controlled system migration: validate in production, fix systemic issues once, and scale consistently.

 

 

interaction strategy

Evolving the brand without sacrificing affordance

 

As part of the rebrand, GoodRx transitioned its primary UI color from blue to black. But blue had also become an important signal for interactivity across the product. Rather than applying the new brand rigidly, I established interaction standards that used color, shape, stroke, fill, iconography, and contrast together to maintain clear affordance and accessible states.

 

Buttons

Redefining primary and secondary actions
I updated button styles for the new black primary action while preserving a clear distinction between primary and secondary actions. Before-and-after primary and secondary button styles transitioning from blue to black

 

Knowing where the brand rule should bend
Not every interaction benefited from removing blue. In complex workflows, black links could become too visually similar to body copy—even when underlined. I retained blue where it provided an important affordance cue, balancing brand consistency with usability. Before-and-after workflow showing black primary actions while preserving blue links for discoverability

 

Form elements

Strengthening selection states
Selection controls were redesigned to communicate interaction states through more than color alone. Updated patterns used shape, stroke, fill, iconography, and contrast to make hover, focus, selected, and unselected states easier to distinguish. Selection controls showing unselected, hover, and selected states using shape, stroke, fill, iconography, and contrast Before-and-after selection treatment showing a clearer active choice without relying on blue alone

 

 

expanding the system

Supporting new healthcare experiences through reusable components

 

As GoodRx expanded into more complex healthcare workflows, the system needed to grow beyond foundational components. I worked with product teams to identify recurring interaction problems and translate them into reusable patterns that could serve multiple experiences.

 

Search

Designing a reusable search pattern for different user intents
As Search became more important across GoodRx, I created a reusable pattern that helped users find medications, treatments, and health content consistently across the product. Reusable GoodRx search pattern with medication and health topic search, popular searches, and a primary action

 

For first-time users, the experience could surface popular searches rather than an empty state. Returning users could see recent searches, making repeat tasks faster. Search component examples showing popular searches, recent searches, and context-aware results that combine medication suggestions with health editorial content.

 

In health-content contexts, Search could support more informational intent by surfacing health articles alongside medication-related results.

 

Search wasn’t just typeahead. The result model adapted based on user history, intent, and context—surfacing popular searches for new users, recent searches for returning users, and health content alongside medication-related results.

 

Step progress

Helping users navigate complex healthcare workflows
I established a reusable progress pattern for multi-step healthcare workflows, giving users consistent visibility into where they were and what came next.

 

Solid utility icons identified the current step while outlined icons represented upcoming steps, creating a clear visual distinction between present and future actions. The pattern could then scale across onboarding, treatment, and subscription journeys. Step progress component showing current and upcoming stages within a multi-step healthcare workflow

 

Status tracker

Creating transparency throughout medication delivery
I designed a reusable status tracking component that gave users visibility into each stage of the medication fulfillment process, supporting both home delivery and pharmacy pickup.

 

Consistent iconography and progressive status indicators distinguished completed and upcoming milestones, while contextual messaging and actions helped users understand what was happening and what to do next. Medication status tracker showing under review, preparing order, shipped, and delivered fulfillment stages

 

 

documentation as a product

Reducing ambiguity through better documentation

 

As GoodRx’s design system expanded, documentation evolved beyond basic component specifications into a more comprehensive resource for design and implementation decisions. I created a consistent documentation model that brought together component guidance, UX best practices, content standards, and implementation details in one place.

 

From reference pages to a comprehensive design resource

The original documentation captured the basics, but left many of the practical questions teams encountered unanswered. Rather than documenting what a component was, the new documentation focused on helping teams understand how and when to use it.

 

The new documentation answered questions teams actually had:
  • - How do I build it?
  • - When should I use it?
  • - When shouldn’t I use it?
  • - How do I write content for it?
  • - What mistakes should I avoid?
  • - Which component should I use instead?
Before-and-after GoodRx design system documentation showing a basic reference page evolving into structured component guidance, best practices, and content standards

 

Defining implementation expectations

Each component followed a standardized documentation structure that clearly defined how it should be built and behave across contexts.

 

Documentation consistently covered:
  • - Component anatomy, including required and optional elements
  • - Supported variations and configurations
  • - Responsive behavior across desktop and mobile
  • - Platform-specific guidance when web, iOS, and Android implementations differed
  • - Static and interactive behavior
  • - Sizing guidance and common patterns
GoodRx component documentation defining anatomy, variations, responsive behavior, platform guidance, interaction behavior, and sizing expectations

 

Supporting better design decisions

Documentation also captured guidance that had previously lived in critiques, conversations, or individual experience.

 

New guidance included:
  • - Do & Don’t examples
  • - UX best practices
  • - Related component comparisons
  • - Content standards
  • - Standardized error messaging

 

This transformed documentation from a reference library into an everyday decision-making tool.

GoodRx design system guidance showing best practices, component comparisons, content standards, and standardized error messaging

 

 

governance and adoption

Helping a Design System grow with the organization

 

A successful design system requires more than reusable components. I established governance, education, and support practices that helped teams adopt the system, contribute back to it, and maintain quality as the organization grew. Diagram showing continuous design system improvement through collaboration: GoodRx users provide feedback to the design and engineering community, the design system team identifies shared needs and evolves the system, and teams adopt and contribute back to the system.

 

Driving adoption through education
Adoption required more than publishing components. I created onboarding resources that helped teams understand how the system worked, where it fit into the product process, and how to design effectively within it. This reinforced the design system as a shared product, not a static library. GoodRx design system onboarding and education resources explaining system foundations, component usage, and how designers work within the design system

 

Supporting teams through proactive partnership
I supported teams through office hours, design critiques, Slack support, mentoring, and ongoing collaboration with product and engineering. These touchpoints helped teams navigate tradeoffs, surface gaps, and determine when existing system patterns were no longer enough.

 

Building systems fluency
As the system evolved, I created practical education to help designers use newer system capabilities confidently in day-to-day work. Tutorials covered topics like Figma variables, design tokens, and applying system primitives through real examples. Design system tutorials and learning resources covering Figma variables, design tokens, and applying system foundations through practical examples

 

Growing the system together
The system wasn’t intended to solve every product challenge. I created a decision framework that helped teams determine when to reuse an existing component, evolve the system, or build a custom solution using shared foundations.

 

This gave teams a clearer path forward while helping the system grow intentionally rather than through one-off additions.

Decision framework showing when teams should reuse an existing component, expand the design system, or create a custom solution using shared foundations

 

Establishing a quality bar
Before experiences moved into development, I ran an Engineering Handoff Review to catch quality and implementation issues earlier.

 

I reviewed designs for:
  • - Correct use of design system components
  • - Opportunities to simplify or reuse existing patterns
  • - Accessibility and inclusive design
  • - Platform consistency and interaction quality
  • - Engineering readiness and implementation details

 

Rather than acting as an approval gate, the review helped teams resolve issues earlier and maintain a consistent quality bar before development.

Engineering Handoff checklist covering design system usage, accessibility and UX, and engineering readiness before development

 

Governance wasn't about enforcing rules—it was about enabling teams to build better products together.
Through documentation, support, and continuous feedback, the system became easier to adopt, easier to evolve, and better equipped to grow with the organization.

 

 

outcomes and impact

Lasting impact beyond the rebrand

 

What began as a visual rebrand became a broader modernization of how GoodRx designed, built, and evolved shared product experiences. The work decoupled visual change from individual implementation, established clearer interaction and product standards, improved accessibility and design-to-code alignment, and created stronger mechanisms for teams to adopt and evolve the system over time.

 

built for what's next

Established a scalable system architecture through semantic tokens, predictable component patterns, and richer documentation, creating a foundation for continued product evolution and emerging AI-assisted workflows.
improved consistency

Expanded reusable coverage across core product experiences, with 25+ new or evolved components adopted across product surfaces in 2025.

 

Shared foundations and interaction patterns helped reduce fragmentation and support broader redesign efforts that contributed to a 35% increase in visitors.
accessibility at scale

Strengthened accessibility through system-wide color contrast and WCAG audits, improved interaction affordances, and more accessible component standards.

 

These improvements made inclusive patterns easier for product teams to adopt by default rather than solve independently.
stronger engineering alignment

Improved design-to-code parity through shared standards, tokenized foundations, and closer collaboration with engineering.

 

39 components were rebuilt to Tailwind standards, creating more predictable implementation patterns and stronger alignment between Figma and production.

 

company


GoodRx

categories


Design Systems
Design Tokens
Component Design
Theming
Accessibility
Documentation
Platform Design
Design Operations
Cross-functional Leadership
Product Design