Design System · Component Library

BEYOND Skincare

A production-grade design system for a skincare brand — 20+ atomic components, design tokens, full dark/light theming, and WCAG 2.1 AA compliance. Built with React, TypeScript, and Tailwind.

  • Year: 2024
  • Duration: 12 weeks
  • Team: Solo · Design + Engineering
  • Role: Design System Lead · Designer & Developer
20+
Documented Components
AA
WCAG 2.1 Compliance
2
Themes (Light / Dark)
100%
Token-Driven UI

Overview

BEYOND is a skincare brand design system built to scale across marketing pages, product detail pages, and editorial content. Instead of shipping one website, I designed a system: atomic components, tokenised styling, documented usage rules, and a sample brand site that proves the system works end-to-end. It ships as a live React + TypeScript application with interactive documentation and is deployed via GitHub Actions to GitHub Pages.

The problem

Brand sites often start clean and decay fast. Colours drift, spacing stops being consistent, accessibility gets patched in later, and components get forked for one-off pages. The first BEYOND explorations suffered from the same thing — no token layer, no component reuse rules, and no way for a future teammate to ship on-brand UI without reinventing it.

The goal

Build a design system that enforces the brand visually and technically: one source of truth for tokens, one component library for UI, built-in dark/light theming, and a documentation site that doubles as a live sandbox.

Hypothesis

If the brand language is encoded as design tokens and composable components — atoms, molecules, organisms — a single designer-developer can ship a full website, a documentation site, and a theming layer in one codebase without the UI fragmenting over time.

Research

Participants: Instructor + classmate reviewers + self-directed research

Methods

  • Brand audit of skincare market leaders
  • Design system benchmarking (Material, Shopify Polaris, Atlassian)
  • Atomic design methodology review
  • WCAG 2.1 AA contrast and keyboard navigation audits
  • Developer ergonomics review of Tailwind-based systems

Key findings

  1. 01

    Successful systems separate brand tokens from component logic — the two should be independently versionable

  2. 02

    Dark mode breaks when colour is hardcoded; it works when every colour goes through a semantic token

  3. 03

    Atomic design scales better than flat component lists when the library grows past ~15 components

  4. 04

    Interactive docs beat static docs — developers copy working code, not screenshots

  5. 05

    WCAG 2.1 AA has to be designed in from the start; retrofitting contrast and focus states is 3× the work

What the research told me

1

Tokens before components

The system has to start with a tokens layer — colours, typography, spacing, shadows, radii. Components consume tokens. That split is what lets dark mode, rebrands, and theming work without touching component code.

2

Atomic design actually holds up

Splitting into atoms / molecules / organisms made the library easier to reason about as it grew to 20+ components. Each layer has a clear job.

3

Docs are product

Documentation pages are first-class screens in the app, not an afterthought. Each component page shows the component, its variants, and the code to use it.

4

Accessibility is a system property

Baked WCAG 2.1 AA contrast into tokens, keyboard focus into components, and skip-links into layout. Accessibility lives in the system, not in individual pages.

Design

Iteration

v1

Hardcoded colours, no token layer

User insight

"First pass used Tailwind defaults directly. The second I tried to add dark mode, colour references were scattered across 12 files. There was no single source of truth."

Design change

Extracted every colour, font, spacing, shadow, and radius value into a tokens directory. Configured Tailwind to extend from tokens. Components now only reference semantic names like bg-surface, text-primary, border-subtle.

v2

Flat component list

User insight

"With ~20 components in one folder, it got hard to tell which pieces could be composed from which. Button and IconButton lived next to Navbar and ProductCard."

Design change

Restructured into atoms / molecules / organisms following atomic design. Each layer only imports from layers beneath it. Made dependencies explicit and the library easier to scan.

v3

Static docs pages

User insight

"Documentation was screenshots plus code blocks. Developers had to mentally simulate the component instead of seeing it live."

Design change

Rebuilt docs as actual React pages that render live components alongside their source. Each category (Colors, Typography, Spacing, Components, Forms, Navigation) became its own interactive page. Shipped.

Design system

Colour palette

  • Primary / royal blue
  • Secondary / azure
  • Accent / sky
  • CTA / citron
  • Neutral ink
  • Neutral surface

Typography

Open Sans (UI + body) + JetBrains Mono (code) — 15-step type scale from label-sm (11px) through display-lg (clamp 40→64px)

Key components

  • Atoms: Button, IconButton, Input, Badge, Avatar, Tag
  • Molecules: FormField, SearchBar, ProductCard, Toast, Tabs
  • Organisms: Navbar, Footer, Hero, ProductGrid, Form layouts
  • Theming: dark / light mode via semantic tokens
  • Accessibility: WCAG 2.1 AA across all components

Outcome

Shipped a live, deployed design system with 20+ documented components, six interactive docs categories, full dark/light theming, and a sample BEYOND brand site built entirely from system primitives. The system is version-controlled, deployed automatically via GitHub Actions, and publicly browsable. It demonstrates the full loop from design tokens through to a production-ready branded experience.

What I learned

  1. 01

    A design system only holds together if tokens come first. Everything else — theming, accessibility, rebrands — becomes easier the moment you stop hardcoding values in components.

  2. 02

    Atomic design is not academic. Once a library passes ~15 components, splitting into atoms, molecules, and organisms starts paying back in clarity.

  3. 03

    Documentation is part of the product. Interactive docs that show live components plus their code lower the friction for anyone building on top of the system.

Next case study

Beauty by Amy

Booking Platform · Full-Stack Frontend