# Modernist

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

- Skill: `majiayu000/modernist` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds add majiayu000/modernist`
- Raw SKILL.md: https://api.skillmd.com/api/skills/majiayu000/modernist/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Design & Media
- License: Proprietary
- Author: majiayu000 (https://skillmd.com/u/majiayu000)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/majiayu000/modernist

---


# 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:**
```tsx
<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:**
```tsx
<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:**
```tsx
<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:**
```tsx
<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):**
```tsx
<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):**
```tsx
<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:**
```tsx
<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):**
```tsx
<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:**
```tsx
<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:**
```tsx
<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:**
```tsx
<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):**
```tsx
<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

```tsx
// 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

```tsx
// 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

```tsx
// 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

```tsx
// 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

```tsx
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

```tsx
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

```tsx
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

```tsx
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

```tsx
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

```tsx
<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

```tsx
<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

```tsx
<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

```tsx
<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

```tsx
// 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

```tsx
<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)

```tsx
// 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:**
```tsx
{/* 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:**
```tsx
<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

```tsx
// 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.

