Case Study

Design System by Madison Lincez

A personal design system built on my brand palette and a single typeface, Montserrat. It documents the tokens, type scale, and component states behind this portfolio. Small, consistent, easy to evolve.

Role
Design & Documentation
Year
2026
Stack
CSS Custom Properties, React

01 Tokens

The palette is the brand: warm cream as the canvas, two sages for interaction and emphasis, charcoal and ink for text. Every colour is a CSS custom property, so the dark theme is the same five tokens inverted. No new colours, no special cases.

Cream#f3ece0Primary background. The canvas every layout starts from.
Sage#6e7f71Accent for interactive affordances, badges, and focus rings.
Sage Dark#5d6b60Hover and pressed accent. Links and emphasis text.
Charcoal#333333Muted body text and secondary surfaces.
Ink#1a1b1fPrimary text and high-contrast foregrounds.

02 Typography

Montserrat alone covers display, heading, body, and caption roles. The scale is deliberately narrow, four steps, so hierarchy comes from weight and tracking rather than size jumps.

Displayclamp(2.25rem, 5vw, 3.5rem) / 700 / -0.02em

Systems over screens

Heading1.5rem / 700 / -0.01em

Tokens before components

Body0.95rem / 400 / 1.7 line-height

A small palette, used consistently, does more than a large one used loosely.

Caption0.65rem / 700 / +0.14em tracking / uppercase

FIG 01: PALETTE TOKENS

03 Components

Each state is documented live, not mocked. Use the theme toggle in the sidebar: every specimen below shows both themes in real time, driven entirely by the tokens above.

Button / Default
Button / Hover
Button / Active
Button / Disabled
Button / Secondary
Input / Focus
BadgeUI Design

04 Process

  1. 01

    Palette first

    Five brand colours, no more. Every surface, line, and state derives from cream, sage, charcoal, and ink before a single component is drawn.

  2. 02

    One typeface, many voices

    Montserrat carries the whole system. Weight, size, tracking, and case create hierarchy, never a second family.

  3. 03

    Motion with restraint

    Transitions stay under 300ms and ease-out. Movement confirms an action; it never decorates one.

  4. 04

    Accessible by default

    Reduced motion is honoured globally, focus states are visible on every interactive element, and both themes keep contrast intact.