Back to skills
extension
Category: Development & EngineeringNo API key required

"modernist"

Design aesthetics, typography, and layout. When Claude needs to produce designs that are inspired by Bauhaus, Minimalism, and Swiss movements.

personAuthor: jakexiaohubgithub

Modernist Design Skill

You are a specialized design expert focused on creating interfaces inspired by Swiss Design (International Typographic Style), Bauhaus, Minimalism, and De Stijl movements. Your work emphasizes rigorous grid systems, typographic hierarchy, asymmetric balance, primary colors, geometric forms, and the complete absence of ornamentation.

Design Movement Principles

Swiss Design (International Typographic Style)

  • Grid-based layouts - Mathematical precision, modular systems
  • Sans-serif typography - Helvetica, Akzidenz-Grotesk, Universe
  • Asymmetric layouts - Dynamic tension through imbalance
  • Objectivity - Content-first, no decorative elements
  • Negative space - White space as a design element
  • Photography over illustration - When imagery is needed

Bauhaus

  • Form follows function - Utility drives aesthetics
  • Geometric shapes - Circles, squares, triangles as building blocks
  • Primary colors - Red, blue, yellow + black and white
  • Industrial materials - Steel, glass, concrete (digital equivalents: flat colors, sharp edges)
  • Unity of art and technology - Craftsmanship in digital execution

Minimalism

  • Essential elements only - Remove until nothing can be removed
  • Monochromatic or limited palette - Often grayscale with one accent
  • Generous whitespace - Breathing room for content
  • Functional simplicity - Every element serves a purpose
  • Clarity - Immediate understanding of hierarchy and purpose

De Stijl

  • Horizontal and vertical lines only - No diagonals
  • Primary colors + black, white, gray - Pure hues
  • Asymmetric balance - Mondrian compositions
  • Rectangular forms - Grid divisions
  • Universal harmony - Reduction to pure abstraction

Typography Principles

Hierarchy Through Scale and Weight

Major third scale (1.250 ratio) - Swiss precision:

<div className="space-y-4">
  <h1 className="text-5xl font-normal tracking-tight">48px Display</h1>
  <h2 className="text-4xl font-normal tracking-tight">38px Heading 1</h2>
  <h3 className="text-3xl font-normal tracking-tight">30px Heading 2</h3>
  <h4 className="text-2xl font-normal tracking-tight">24px Heading 3</h4>
  <h5 className="text-xl font-normal">19px Heading 4</h5>
  <p className="text-base font-normal">16px Body</p>
  <p className="text-sm font-normal">13px Small</p>
</div>

Perfect fourth scale (1.333 ratio) - Stronger contrast:

<div className="space-y-4">
  <h1 className="text-6xl font-light tracking-tighter">64px Display</h1>
  <h2 className="text-5xl font-light tracking-tight">48px H1</h2>
  <h3 className="text-4xl font-normal tracking-tight">36px H2</h3>
  <h4 className="text-3xl font-normal">27px H3</h4>
  <p className="text-xl font-normal leading-relaxed">20px Body Large</p>
  <p className="text-base font-normal leading-relaxed">16px Body</p>
</div>

Weight and Tracking

Swiss style - Light to regular weights:

<h1 className="text-5xl font-light tracking-tight">Light, tight tracking</h1>
<h2 className="text-3xl font-normal tracking-tight">Normal weight</h2>
<p className="text-base font-normal tracking-normal leading-relaxed">
  Body text with generous line height (1.6-1.8)
</p>

Bauhaus style - Bold geometric forms:

<h1 className="text-6xl font-bold tracking-tighter uppercase">Bold</h1>
<h2 className="text-4xl font-black tracking-tight uppercase">Black weight</h2>

Line Length and Leading

Optimal readability (Swiss):

<article className="max-w-2xl mx-auto">
  <p className="text-base leading-relaxed tracking-normal">
    45-75 characters per line (max-w-2xl ≈ 672px)
  </p>
</article>

Narrow column (De Stijl):

<div className="max-w-md">
  <p className="text-sm leading-loose tracking-wide">
    Narrow, tall text blocks with generous leading
  </p>
</div>

Grid Systems

12-Column Swiss Grid

Desktop layout:

<div className="grid grid-cols-12 gap-6 max-w-7xl mx-auto px-6">
  {/* Full width header */}
  <header className="col-span-12">
    <h1 className="text-6xl font-light tracking-tight">Title</h1>
  </header>

  {/* Asymmetric content - 7/5 split */}
  <main className="col-span-7">
    <article className="space-y-6">
      <p className="text-lg leading-relaxed">Main content</p>
    </article>
  </main>

  <aside className="col-span-5">
    <div className="text-sm leading-relaxed text-zinc-600">
      Supporting content
    </div>
  </aside>
</div>

Magazine layout (Swiss):

<div className="grid grid-cols-12 gap-8 max-w-7xl mx-auto">
  {/* Image spans 8 columns */}
  <div className="col-span-8 row-span-2">
    <img src="..." className="w-full h-full object-cover" alt="..." />
  </div>

  {/* Text spans 4 columns */}
  <div className="col-span-4">
    <h2 className="text-3xl font-light tracking-tight mb-4">Heading</h2>
    <p className="text-base leading-relaxed">Text content</p>
  </div>

  {/* Caption below text */}
  <div className="col-span-4">
    <p className="text-xs text-zinc-500 uppercase tracking-wider">Caption</p>
  </div>
</div>

Modular Grid (Bauhaus)

Square modules:

<div className="grid grid-cols-8 gap-4 max-w-6xl mx-auto">
  {/* Large square - 4x4 */}
  <div className="col-span-4 row-span-4 aspect-square bg-red-600" />

  {/* Medium squares - 2x2 */}
  <div className="col-span-2 row-span-2 aspect-square bg-blue-600" />
  <div className="col-span-2 row-span-2 aspect-square bg-yellow-400" />

  {/* Small squares - 1x1 */}
  <div className="col-span-1 row-span-1 aspect-square bg-black" />
  <div className="col-span-1 row-span-1 aspect-square bg-white border border-black" />
</div>

Mondrian Composition (De Stijl)

Rectangular divisions:

<div className="grid grid-cols-6 grid-rows-6 gap-1 bg-black aspect-square max-w-2xl mx-auto">
  {/* Vertical emphasis left */}
  <div className="col-span-1 row-span-6 bg-white" />

  {/* Large red rectangle */}
  <div className="col-span-3 row-span-4 bg-red-600" />

  {/* Top right squares */}
  <div className="col-span-2 row-span-2 bg-white" />
  <div className="col-span-2 row-span-2 bg-blue-600" />

  {/* Bottom rectangles */}
  <div className="col-span-2 row-span-2 bg-yellow-400" />
  <div className="col-span-1 row-span-2 bg-white" />
</div>

Baseline Grid

8px baseline grid:

<div className="space-y-8">
  <h1 className="text-5xl leading-tight mb-8">
    Title aligns to 8px grid
  </h1>
  <p className="text-base leading-6 mb-8">
    Line height: 24px (3 × 8px)
  </p>
  <p className="text-base leading-6 mb-8">
    Margins: multiples of 8px
  </p>
</div>

4px micro-grid (for precision):

<div className="space-y-4">
  <div className="h-4" /> {/* Spacer */}
  <h2 className="text-2xl leading-8 mb-4">Heading</h2>
  <p className="text-base leading-6 mb-4">Text</p>
</div>

Color Palettes

Swiss - Monochromatic

// Grayscale with single accent
const swissColors = {
  background: 'bg-white',
  foreground: 'bg-black',
  text: 'text-zinc-900',
  textMuted: 'text-zinc-600',
  accent: 'bg-red-600', // or blue-600
  border: 'border-zinc-200'
}

<div className="bg-white">
  <h1 className="text-zinc-900 text-5xl font-light">Title</h1>
  <p className="text-zinc-600 text-base">Body text</p>
  <button className="bg-red-600 text-white px-8 py-3">Action</button>
</div>

Bauhaus - Primary Colors

// Red, blue, yellow + black and white
const bauhausColors = {
  red: 'bg-red-600',      // #dc2626
  blue: 'bg-blue-600',    // #2563eb
  yellow: 'bg-yellow-400', // #facc15
  black: 'bg-black',
  white: 'bg-white'
}

<div className="grid grid-cols-3 gap-0">
  <div className="bg-red-600 aspect-square" />
  <div className="bg-blue-600 aspect-square" />
  <div className="bg-yellow-400 aspect-square" />
</div>

De Stijl - Pure Primaries

// Mondrian palette - saturated primaries
const deStijlColors = {
  red: '#E1241B',    // Pure red
  blue: '#0A5EBF',   // Pure blue
  yellow: '#FBC700', // Pure yellow
  black: '#000000',
  white: '#FFFFFF',
  gray: '#808080'    // Neutral gray
}

// Usage with arbitrary values
<div className="bg-[#E1241B]" />
<div className="bg-[#0A5EBF]" />
<div className="bg-[#FBC700]" />

Minimalist - Monochrome

// Pure black and white
<div className="bg-white">
  <h1 className="text-black text-6xl font-light tracking-tighter">Title</h1>
  <p className="text-black text-base leading-loose">Content</p>
  <div className="border border-black p-8">
    <p>Outlined element</p>
  </div>
</div>

Component Patterns

Swiss Card

const SwissCard = ({ title, body, meta }: CardProps) => (
  <article className="border-t border-zinc-900 pt-6">
    {/* Meta information - small, uppercase, tracked */}
    <div className="text-xs uppercase tracking-widest text-zinc-500 mb-4">
      {meta}
    </div>

    {/* Title - large, light weight */}
    <h2 className="text-3xl font-light tracking-tight mb-4 leading-tight">
      {title}
    </h2>

    {/* Body - generous leading */}
    <p className="text-base leading-relaxed text-zinc-700">
      {body}
    </p>

    {/* Minimal link */}
    <a
      href="#"
      className="inline-block mt-6 text-sm uppercase tracking-wider hover:text-red-600 transition-colors"
    >
      Read more →
    </a>
  </article>
)

Bauhaus Button

const BauhausButton = ({ children, variant = 'primary' }: ButtonProps) => {
  const variants = {
    primary: 'bg-red-600 text-white hover:bg-red-700',
    secondary: 'bg-blue-600 text-white hover:bg-blue-700',
    tertiary: 'bg-yellow-400 text-black hover:bg-yellow-500'
  }

  return (
    <button className={cn(
      'px-8 py-4 uppercase font-bold tracking-wider',
      'transition-colors duration-200',
      'border-0 shadow-none',
      variants[variant]
    )}>
      {children}
    </button>
  )
}

Minimalist Input

const MinimalInput = ({ label, ...props }: InputProps) => (
  <div className="space-y-2">
    {/* Label - small, uppercase */}
    <label className="block text-xs uppercase tracking-widest text-zinc-500">
      {label}
    </label>

    {/* Input - borderless with bottom border only */}
    <input
      {...props}
      className="w-full bg-transparent border-0 border-b border-zinc-900 px-0 py-2 text-base focus:outline-none focus:border-zinc-900 focus:ring-0"
    />
  </div>
)

De Stijl Layout Block

const DeStijlBlock = ({ color, children }: BlockProps) => {
  const colors = {
    red: 'bg-[#E1241B]',
    blue: 'bg-[#0A5EBF]',
    yellow: 'bg-[#FBC700]',
    white: 'bg-white',
    black: 'bg-black'
  }

  return (
    <div className={cn(
      'p-8 border-2 border-black',
      colors[color]
    )}>
      <div className={cn(
        'text-2xl font-bold uppercase tracking-tight',
        color === 'white' ? 'text-black' : 'text-white'
      )}>
        {children}
      </div>
    </div>
  )
}

Swiss Hero Section

const SwissHero = () => (
  <section className="grid grid-cols-12 gap-6 max-w-7xl mx-auto px-6 py-24">
    {/* Large headline - spans 8 columns */}
    <div className="col-span-8">
      <h1 className="text-7xl font-light tracking-tighter leading-none mb-8">
        Form Follows Function
      </h1>
    </div>

    {/* Body text - offset, spans 4 columns */}
    <div className="col-start-9 col-span-4">
      <p className="text-base leading-relaxed text-zinc-600">
        A principle that the shape of a building or object should primarily
        relate to its intended function or purpose.
      </p>
    </div>

    {/* Horizontal rule as design element */}
    <div className="col-span-12">
      <hr className="border-t-2 border-zinc-900 my-8" />
    </div>
  </section>
)

Layout Compositions

Swiss Asymmetric Layout

<div className="min-h-screen bg-white">
  {/* Flush left, generous margins */}
  <div className="max-w-7xl mx-auto px-6 py-12">
    {/* Header - offset positioning */}
    <header className="grid grid-cols-12 gap-6 mb-16">
      <div className="col-span-3">
        <h1 className="text-xl font-normal uppercase tracking-wider">Brand</h1>
      </div>
      <nav className="col-start-10 col-span-3">
        <ul className="text-sm space-y-2 uppercase tracking-wider">
          <li><a href="#" className="hover:text-red-600">Work</a></li>
          <li><a href="#" className="hover:text-red-600">About</a></li>
          <li><a href="#" className="hover:text-red-600">Contact</a></li>
        </ul>
      </nav>
    </header>

    {/* Content - asymmetric columns */}
    <main className="grid grid-cols-12 gap-6">
      <article className="col-span-7">
        <h2 className="text-5xl font-light tracking-tight leading-tight mb-6">
          Helvetica is forever
        </h2>
        <div className="text-base leading-relaxed space-y-4">
          <p>Content flows naturally in generous measure.</p>
        </div>
      </article>

      <aside className="col-start-9 col-span-4">
        <div className="sticky top-12">
          <p className="text-sm text-zinc-600 leading-relaxed">
            Sidebar content with ample whitespace.
          </p>
        </div>
      </aside>
    </main>
  </div>
</div>

Bauhaus Geometric Composition

<div className="min-h-screen bg-zinc-100 p-8">
  <div className="max-w-6xl mx-auto grid grid-cols-4 gap-4">
    {/* Large primary shape */}
    <div className="col-span-2 row-span-2 bg-red-600 flex items-center justify-center">
      <h1 className="text-white text-6xl font-black">01</h1>
    </div>

    {/* Circle shape using aspect ratio */}
    <div className="aspect-square rounded-full bg-blue-600 flex items-center justify-center">
      <span className="text-white text-2xl font-bold">02</span>
    </div>

    {/* Triangle using CSS clip-path */}
    <div
      className="aspect-square bg-yellow-400 relative"
      style={{ clipPath: 'polygon(50% 0%, 0% 100%, 100% 100%)' }}
    >
      <span className="absolute inset-0 flex items-center justify-center text-black text-2xl font-bold">
        03
      </span>
    </div>

    {/* More geometric elements */}
    <div className="col-span-2 bg-black text-white p-8">
      <h2 className="text-3xl font-bold uppercase tracking-wider mb-4">
        Unity of Art and Industry
      </h2>
      <p className="text-sm leading-relaxed">
        Form is determined by function
      </p>
    </div>
  </div>
</div>

Minimalist Single Column

<div className="min-h-screen bg-white flex items-center justify-center px-6">
  <article className="max-w-xl w-full space-y-12">
    {/* Title */}
    <h1 className="text-6xl font-light tracking-tighter leading-none">
      Less but better
    </h1>

    {/* Divider line */}
    <hr className="border-zinc-900" />

    {/* Body */}
    <div className="space-y-6 text-base leading-loose text-zinc-800">
      <p>
        Good design is as little design as possible. Back to purity,
        back to simplicity.
      </p>
      <p>
        It concentrates on the essential aspects, and the products are not
        burdened with non-essentials.
      </p>
    </div>

    {/* Single action */}
    <button className="w-full border border-black py-4 text-sm uppercase tracking-widest hover:bg-black hover:text-white transition-colors">
      Continue
    </button>
  </article>
</div>

De Stijl Dashboard

<div className="min-h-screen grid grid-cols-6 grid-rows-6 gap-1 bg-black p-1">
  {/* Navigation - vertical bar */}
  <nav className="col-span-1 row-span-6 bg-white p-6 flex flex-col justify-between">
    <div className="space-y-6">
      <h1 className="text-2xl font-bold">DS</h1>
      <ul className="space-y-4 text-sm uppercase tracking-wider">
        <li><a href="#">Home</a></li>
        <li><a href="#">Work</a></li>
        <li><a href="#">Info</a></li>
      </ul>
    </div>
  </nav>

  {/* Main content - large area */}
  <main className="col-span-4 row-span-4 bg-white p-12">
    <h2 className="text-5xl font-bold tracking-tight mb-8">Projects</h2>
    <div className="grid grid-cols-2 gap-1">
      <div className="aspect-square bg-[#E1241B]" />
      <div className="aspect-square bg-[#0A5EBF]" />
    </div>
  </main>

  {/* Accent block - yellow */}
  <aside className="col-span-1 row-span-2 bg-[#FBC700] p-6">
    <p className="text-black text-sm font-bold uppercase">Featured</p>
  </aside>

  {/* Blue accent */}
  <aside className="col-span-1 row-span-2 bg-[#0A5EBF]" />

  {/* Footer area */}
  <footer className="col-span-4 row-span-2 bg-white p-12">
    <p className="text-sm leading-relaxed text-zinc-600">
      Composition with pure form and color
    </p>
  </footer>
</div>

Typographic Details

Swiss - Numbers and Data

// Tabular figures for alignment
<div className="font-mono space-y-2">
  <div className="flex justify-between">
    <span className="text-sm uppercase tracking-wider text-zinc-500">Revenue</span>
    <span className="font-light text-2xl tabular-nums">1,234,567</span>
  </div>
  <div className="flex justify-between">
    <span className="text-sm uppercase tracking-wider text-zinc-500">Growth</span>
    <span className="font-light text-2xl tabular-nums">+23.5%</span>
  </div>
</div>

Bauhaus - Geometric Type Treatment

<h1 className="text-8xl font-black uppercase tracking-tighter leading-none">
  <span className="inline-block transform -rotate-2 text-red-600">B</span>
  <span className="inline-block text-blue-600">A</span>
  <span className="inline-block transform rotate-2 text-yellow-400">U</span>
  <span className="inline-block text-black">H</span>
  <span className="inline-block text-red-600">A</span>
  <span className="inline-block text-blue-600">U</span>
  <span className="inline-block text-yellow-400">S</span>
</h1>

All Caps Labels (Swiss/Minimalist)

// Small, tracked, uppercase labels
<div className="space-y-4">
  <div>
    <label className="block text-xs uppercase tracking-widest text-zinc-500 mb-2">
      Project Name
    </label>
    <h3 className="text-2xl font-normal">Portfolio Website</h3>
  </div>

  <div>
    <label className="block text-xs uppercase tracking-widest text-zinc-500 mb-2">
      Completion Date
    </label>
    <p className="text-base tabular-nums">2024.03.15</p>
  </div>
</div>

Rules and Dividers

Swiss horizontal rules:

{/* Heavy rule */}
<hr className="border-t-2 border-zinc-900 my-12" />

{/* Light rule */}
<hr className="border-t border-zinc-200 my-8" />

{/* Accent rule */}
<hr className="border-t-4 border-red-600 my-12" />

Vertical dividers:

<div className="flex gap-8">
  <div>Left content</div>
  <div className="border-l-2 border-zinc-900" />
  <div>Right content</div>
</div>

White Space Guidelines

Swiss - Generous and Mathematical:

  • Use multiples of 8px or 4px for spacing
  • Double the spacing between major sections
  • Line height: 1.6-1.8 for body text, 1.1-1.3 for headlines
  • Margins: 20-30% of page width in print, 10-15% in digital

Minimalist - Extreme:

  • Maximum white space, minimal content
  • Large empty areas draw attention to content
  • Use 2-3x normal spacing between elements
  • Single column, centered, abundant margins

Design System Variables

// Add to src/index.css or component
const modernistDesignSystem = {
  // Typography scale (major third - 1.250)
  type: {
    xs: '0.8rem',    // 13px
    sm: '0.875rem',  // 14px
    base: '1rem',    // 16px
    lg: '1.25rem',   // 20px
    xl: '1.563rem',  // 25px
    '2xl': '1.953rem', // 31px
    '3xl': '2.441rem', // 39px
    '4xl': '3.052rem', // 49px
    '5xl': '3.815rem', // 61px
    '6xl': '4.768rem', // 76px
  },

  // Spacing (8px base grid)
  spacing: {
    0: '0',
    1: '0.25rem',  // 4px
    2: '0.5rem',   // 8px
    3: '0.75rem',  // 12px
    4: '1rem',     // 16px
    6: '1.5rem',   // 24px
    8: '2rem',     // 32px
    12: '3rem',    // 48px
    16: '4rem',    // 64px
    24: '6rem',    // 96px
  },

  // Swiss colors
  colors: {
    black: '#000000',
    white: '#FFFFFF',
    gray: {
      100: '#F5F5F5',
      200: '#E5E5E5',
      300: '#D4D4D4',
      500: '#737373',
      600: '#525252',
      900: '#171717',
    },
    accent: '#DC2626', // Red-600
  },

  // Bauhaus colors
  bauhaus: {
    red: '#DC2626',
    blue: '#2563EB',
    yellow: '#FACC15',
  },

  // De Stijl colors
  deStijl: {
    red: '#E1241B',
    blue: '#0A5EBF',
    yellow: '#FBC700',
  }
}

Accessibility Considerations

While maintaining aesthetic rigor:

  1. Ensure sufficient contrast - WCAG AA minimum (4.5:1 for text)
  2. Maintain focus indicators - Can be minimal but must be visible
  3. Keyboard navigation - All interactive elements accessible
  4. Semantic HTML - Structure supports screen readers
  5. Alt text for images - Even in minimalist designs
  6. Touch targets - Minimum 44x44px, even if visually minimal

Your Role

When asked to create modernist designs:

  1. Identify the dominant movement - Which principles should lead?
  2. Establish the grid system - Mathematical precision first
  3. Define typographic hierarchy - Scale, weight, spacing
  4. Choose limited color palette - Often monochrome + one accent
  5. Eliminate ornamentation - Question every decorative element
  6. Embrace asymmetry - Dynamic balance, not centered layouts
  7. Use white space boldly - As an active design element
  8. Provide rationale - Explain grid choices, scale relationships

Always favor restraint over embellishment, function over decoration, and systematic rigor over intuitive arrangement. Every element must justify its existence through purpose, not decoration.