# Design Philosophy Guidelines for brutalist, minimalist, and abstract design styles — and how to mix them. ## Table of Contents - [Digital Brutalism](#digital-brutalism) - [Minimalism](#minimalism) - [Abstract / Generative](#abstract--generative) - [Mixing Styles](#mixing-styles) - [Color Palettes](#color-palettes) --- ## Digital Brutalism **Principles**: Raw, honest, no polish. Exposed structure. Function as aesthetic. Intentional discomfort. ### Motion Patterns - **Hard cuts**: No easing, `ease: 'none'` or `duration: 0`. Instant state changes. - **Jarring transitions**: `steps()` easing, abrupt position jumps, deliberate jank. - **No smooth scroll**: Native scroll only. Disable Lenis for brutalist sections. - **Aggressive stagger**: Large stagger delays (0.3-0.5s), non-uniform timing. - **Oversized motion**: Elements moving 200-400% of viewport. No subtlety. ### Typography - Monospace only: `font-family: monospace` or specific like `'JetBrains Mono'`, `'Space Mono'` - Giant sizes: 15-30vw for hero text - Leading crushed: `line-height: 0.8` to `0.9` - Overlap: Negative margins, elements bleeding into each other - Mixed scales: 12px next to 200px in the same view - ALL CAPS or extreme case mixing ### Layout - Broken grids: Asymmetric, overlapping, bleeding off-screen - Visible borders: `border: 2px solid` everywhere - Raw backgrounds: Solid black, white, or single accent - No border-radius: Sharp corners only ### Animation Code Pattern ```tsx // Brutalist: instant, hard, no easing gsap.to(el, { x: 500, duration: 0, ease: 'none' }) // teleport gsap.to(el, { rotation: 90, duration: 0.1, ease: 'steps(3)' }) // stepped gsap.to(el, { scale: 3, duration: 0.05 }) // jarring snap ``` --- ## Minimalism **Principles**: Less is more. Every element serves a purpose. Motion communicates, never decorates. ### Motion Patterns - **Ease-out smooth**: `power2.out` or `[0.16, 1, 0.3, 1]`. Never linear, never bouncy. - **Subtle scale**: Max 1.02-1.05 scale changes. Barely perceptible. - **Opacity only**: Many transitions need nothing more than `opacity: 0 → 1`. - **Long durations**: 800ms-1500ms for primary, 300-500ms for secondary. - **Single property**: Animate one property at a time. Never x + y + scale + opacity simultaneously. ### Typography - Sans-serif: Clean, geometric. `'Inter'`, `'Helvetica Neue'`, `'Neue Haas Grotesk'` - Light weights: 200-400 for body, 500-600 for emphasis (never 900) - Generous tracking: `letter-spacing: 0.1-0.3em` for headings - Generous leading: `line-height: 1.6-1.8` - Restrained sizes: Max 3-4 sizes in the entire page ### Layout - Abundant whitespace: 40-60% of viewport should be empty - Strict grid: 12-column or 8-column, always aligned - No decorative elements: If it doesn't inform, remove it - Monochromatic or 2-color max ### Animation Code Pattern ```tsx // Minimal: smooth, purposeful, restrained // Subtle hover ``` --- ## Abstract / Generative **Principles**: Non-representational beauty. Mathematics as aesthetics. Organic through algorithmic means. ### Motion Patterns - **Noise-driven**: Perlin/Simplex noise for position, scale, rotation. Never predictable. - **Parametric motion**: Sine/cosine combinations for organic loops. - **Infinite loops**: `repeat: -1`. Art that never settles. - **Emergent behavior**: Simple rules → complex visuals (flocking, cellular automata). - **Slow evolution**: Changes happen over 10-60 seconds. Patience rewarded. ### Visual Language - Shapes: Circles, flowing curves, particle systems. Avoid rectangles. - Color: Gradients, hue rotation, noise-mapped palettes. - Texture: Grain, noise overlays, displacement maps. - Scale: Micro patterns that reveal macro structures. ### Animation Code Pattern ```tsx // Abstract: noise-driven, parametric, continuous const animate = () => { time += 0.005 elements.forEach((el, i) => { const nx = noise3D(i * 0.1, 0, time) * amplitude const ny = noise3D(0, i * 0.1, time) * amplitude gsap.set(el, { x: nx, y: ny, rotation: nx * 0.5 }) }) requestAnimationFrame(animate) } ``` --- ## Mixing Styles ### Neo-Brutalism (Brutalist + Minimal) The currently trending style. Takes brutalist rawness and pairs with minimal restraint. - **What to keep from Brutalism**: Bold typography, visible borders, monospace, high contrast - **What to keep from Minimal**: Purposeful whitespace, smooth-ish easing (`power1.out`), restraint in motion - **How it looks**: Large mono headings, clean grid with thick borders, black + white + one bright accent, subtle animations on bold elements - **Motion recipe**: Short durations (200-400ms), `power1.out` easing, opacity transitions, no bounce ```tsx // Neo-brutalist card

Title

``` ### Generative Minimal (Abstract + Minimal) Subtle algorithmic beauty with minimalist discipline. - **What to keep from Abstract**: Noise-driven motion, particle systems, parametric shapes - **What to keep from Minimal**: Restraint, monochrome, negative space, slow transitions - **How it looks**: Single-color generative backgrounds, subtle noise displacement, barely-there particles - **Motion recipe**: Very slow (15-60s cycles), low amplitude, opacity < 0.3 ### Controlled Chaos (Brutalist + Abstract) Algorithmic art with raw presentation. - **What to keep from Brutalism**: Hard edges, high contrast, aggressive scale, monospace labels - **What to keep from Abstract**: Generative geometry, noise, mathematical patterns - **How it looks**: Full-screen fractal with mono text overlaid, glitch effects on generative backgrounds, data visualization with brutalist typography - **Motion recipe**: Mix of instant and slow — background evolves slowly, UI snaps --- ## Color Palettes ### Brutalist | Name | Hex | Use | |------|-----|-----| | Pure Black | `#000000` | Background, text | | Pure White | `#FFFFFF` | Background, text | | Acid Green | `#BAFF39` | Accent | | Electric Blue | `#0000FF` | Accent alternative | | Warning Red | `#FF0000` | Accent alternative | ### Minimalist | Name | Hex | Use | |------|-----|-----| | Off White | `#FAFAF9` | Background | | Warm Gray | `#A8A29E` | Secondary text | | Charcoal | `#1C1917` | Primary text | | Stone | `#E7E5E4` | Borders, dividers | | Subtle Accent | `#D4D4D8` | Hover states | ### Abstract / Generative | Name | Hex | Use | |------|-----|-----| | Deep Space | `#0A0A0F` | Background | | Nebula Purple | `#7C3AED` | Primary | | Plasma Cyan | `#06B6D4` | Secondary | | Solar Gold | `#F59E0B` | Accent | | Void Gray | `#1E1E2E` | Surfaces | ### Neo-Brutalist | Name | Hex | Use | |------|-----|-----| | Black | `#000000` | Borders, text | | Cream | `#FEF3C7` | Background | | Lime | `#BAFF39` | Primary accent | | Peach | `#FECACA` | Secondary accent | | Lavender | `#DDD6FE` | Tertiary accent | ### Retro Fantastical (Wonka / Oz / PS2 / MTV) Saturated, whimsical, nostalgic. Inspired by 1971 Willy Wonka's candy psychedelia, Wizard of Oz technicolor, PS2-era warm gradients, and MTV Y2K maximalism. | Name | Hex | Use | |------|-----|-----| | Wonka Purple | `#7B2D8E` | Primary, headers, hero backgrounds | | Chocolate | `#5C3317` | Rich warm backgrounds, borders | | Emerald City | `#2D8E57` | Accents, CTAs, success states | | Ruby Slipper | `#C62828` | Highlights, hover states | | Yellow Brick | `#E8A317` | Gold accents, badges, links | | Candy Pink | `#E84393` | Secondary accent, MTV energy | | MTV Lime | `#A3E635` | Neon pop, interactive elements | | PS2 Sky | `#5B9BD5` | Soft backgrounds, cards | | Sepia Warm | `#D4A574` | Nostalgic overlays, text secondary | | Technicolor Cyan | `#00BCD4` | Splash color, borders | | Chrome Silver | `#C0C0C0` | Y2K metallic, disabled states | | Deep Velvet | `#1A0A2E` | Dark mode background | **Usage tips**: - Pair Deep Velvet + Wonka Purple + Yellow Brick for Wonka vibes - Emerald City + Ruby Slipper + Yellow Brick for Oz palette - PS2 Sky + Sepia Warm + Chocolate for nostalgic warmth - Candy Pink + MTV Lime + Chrome Silver for Y2K energy - Mix all freely for maximalist retro-fantastical compositions