Anshu Pal

Design System

Tokenized foundation I have used to build this portfolio.

Tokens

Colors

Brand (Sage)

--primary

Sage-700

--primary-hover

Sage-800

--primary-subtle

Sage-050

--primary-foreground

White

Surfaces & Backgrounds

--background

#FCFCFC

--card

#FFFFFF

--paper

#F9F8F5 warm off-white

--muted

#F3F4F6

--umber-subtle

Warm surface

--slate-subtle

Cool surface

Text

--foreground

Primary text

--muted-foreground

Secondary text

--card-foreground

Card text

Supporting Accents

--umber

Warm accent

--slate

Cool accent

--ochre

Amber highlight

Borders

--border
--border-subtle

Semantic

--destructive
--warning
--highlight

Info emphasis

--special

Eggplant

--ring

Focus ring

Typography

.type-heroInstrument Serif 400 · 3.125rem · lh 1.12 · -0.015em · Serif display only
Homepage hero
.type-page-titleInstrument Serif 400 · 2.25rem · lh 1.2 · 0 · Page hero titles
Interior page title
.type-h1Inter 650 · 1.75rem · lh 1.15 · -0.015em
Page title heading
.type-h2Inter 600 · 1.375rem · lh 1.22 · -0.01em
Section heading
.type-h3Inter 600 · 1.0625rem · lh 1.28 · -0.005em
Sub-section or card title
.type-h4Inter 600 · 0.9375rem · lh 1.32 · 0
Minor heading
.type-body-lgInter 400 · 1.0625rem · lh 1.65 · 0
Intro paragraph text. Used for summaries and lead-in content that needs slightly more emphasis than body text.
.type-bodyInter 400 · 0.9375rem · lh 1.7 · 0
Main body text for reading. This is the default text style used throughout the site for paragraph content and general prose.
.type-smallInter 400 · 0.8125rem · lh 1.6 · 0
Helper text, metadata, and captions. Used for secondary information.
.type-captionInter 400 · 0.6875rem · lh 1.55 · 0.005em
Badge and pill labels
.type-overlineInter 600 · 0.6875rem · lh 1.45 · 0.08em · uppercase
Overline • Label • Category
.type-accentInter 500 · 0.9375rem · lh 1.6 · 0
A special callout line for emphasis, rendered in Inter 500.
.type-metricInstrument Serif 400 · 1.375rem · lh 1 · 0 · Stat/impact values
+42%
.type-monoJetBrains Mono 400 · 0.8125rem · lh 1.6 · 0
const code = "monospace";

Serif usage: Instrument Serif is used only for display-scale text. It has a single weight (400). Never combine with font-semibold or font-bold. Use type-hero for the homepage hero, type-page-title for page hero titles, type-metric for stat/impact values, and font-serif with inline sizes ≥24px for project titles and decorative numerals.

Links

Inline links use text-primary with underline on hover. Accent variant: text-accent

Classes: text-primary underline-offset-4 hover:underline

Layout Containers

Container Component

<Container> · max-w-[1024px] · px-4 sm:px-6 lg:px-8

Content area (1024px max)
Mobile: 16pxTablet: 24pxDesktop: 32px

.layout-container

max-w: 1024px · px: 64px desktop / 16px mobile

Content area

.layout-container-narrow

max-w: 800px · Used for case study reading areas

Narrow content (800px max)

.content-block

max-w: 680px · Optimal reading width for prose paragraphs

Prose content constrained to 680px for comfortable reading.

Spacing, Radius, Borders & Shadows

Spacing Scale

--space-1
4px (0.25rem)
--space-2
8px (0.5rem)
--space-3
12px (0.75rem)
--space-4
16px (1rem)
--space-5
24px (1.5rem)
--space-6
32px (2rem)
--space-7
48px (3rem)
--space-8
64px (4rem)
--space-9
96px (6rem)

Border Radius

--radius-sm4pxTags, badges, inputs
--radius-md4pxButtons
--radius-lg10pxCards, surfaces

Two-tier system: 4px for small UI (tags, badges, inputs), 10px for cards and surfaces.

Shadows

--shadow-sm0 1px 3px oklch(0 0 0 / 6%)
--shadow-md0 4px 12px oklch(0 0 0 / 10%)

Components

Button

Variants

default: bg-primary · secondary: border-primary · outline: border-primary · ghost: hover:bg-muted · link: underline

Sizes

default: h-12 px-6 · sm: h-9 px-4 text-sm · icon: size-12 · icon-sm: size-9

States

Badge

Variants

All use type-caption (12px, 500 weight). px-2.5 py-1 rounded-sm.

DefaultSecondaryAccentHighlightSpecial

default: bg-primary-subtle text-primary

secondary: bg-tag-neutral text-muted-foreground

accent: bg-accent text-accent-foreground

highlight: bg-highlight-subtle text-highlight-text

special: type-overline bg-tag-neutral

Card

bg-card rounded-xl border-border-subtle. Subcomponents: CardHeader, CardTitle, CardDescription, CardContent, CardFooter.

Card Title
Card description with supporting text.

Card content area with px-6 padding.

Simple Card

Direct padding variant without subcomponents.

Callout

Used for info, notes, warnings, and signals. 3px left border, rounded-r-md, p-4.

Info

bg-primary-subtle border-l-primary. Informational context.

Note

bg-muted border-l-border. General annotations.

Warning

bg-highlight-subtle border-l-highlight. Important cautions.

Signal

bg-primary-subtle border-l-primary. Key insights or decisions.

Case Card

Work listing card with image, title, summary, and tags. Uses shadow-sm, hover:shadow-md.

Decision Card

Component Architecture

Context: The team needed to decide on a component structure.
Decision: Adopted atomic design principles with compound components.Chosen
Rationale: Balances flexibility with consistency for composable interfaces.

Timeline

Week 1-2

Discovery Phase

User research and stakeholder interviews

  • Conducted 12 user interviews
  • Analyzed competitor products

Week 3-6

Design Phase

Wireframes, prototypes, and iteration

Stat Grid

+42%

Conversion Rate

vs. baseline

-35%

Time on Task

seconds saved

4.8

User Satisfaction

out of 5.0

Divider

Content above the divider.


Content below the divider.

Section Component

Case Study

Why It Mattered

Lead text providing context for the section.

Section children content with consistent kicker, title, and lead patterns.

What Why How

What

Employee Movement data was one of the most requested capabilities.

Why

The existing data source was being replaced entirely.

How

Deep-dived into data structure, defined metrics, designed experiences.

Reflections

What Worked
  • +Early stakeholder alignment prevented scope creep
  • +Component-first approach enabled rapid iteration
What I'd Do Differently
  • ~Would have started with mobile designs earlier

Feedback CTA

Found this case study helpful? Have questions or feedback?

Leave feedback

Site Components

Header

Fixed header at h-[72px]. Contains: Logo (Inter 16px 600), Nav links (type-body), Command trigger (icon button), Resume button (sm).

Container: max-w-[1024px] px-4/6/8

• Logo: Inter 16px 600 weight

• Nav links: type-body text-muted-foreground hover:text-primary

• Mobile: Sheet drawer with SheetContent side="right" w-[280px]

Footer

Light editorial footer with border-t. 4-column grid: Editorial, Work, Connect, Meta.

• Email: text-xl md:text-2xl text-foreground hover:text-primary

• Column headers: type-overline

• Links: text-sm text-muted-foreground hover:text-primary

• Editorial: text-[15px] text-muted-foreground

• Bottom bar: border-t border-border

Command Menu

Search icon button triggering CommandDialog. Keyboard shortcut: ⌘K / Ctrl+K.

• Trigger: p-2 text-muted-foreground hover:text-primary hover:bg-muted rounded-md

• Dialog: CommandInput + CommandList with CommandGroup/CommandItem

• Pages indexed: Work, About, Contact, Changelog, Design System