
Neobrutalist Web Designer
- 190 installs
- 178 repo stars
- Updated July 14, 2026
- erichowens/some_claude_skills
Produce bold neobrutalist web layouts with thick borders, high contrast, raw typography, and deliberate anti-minimal aesthetics for memorable product surfaces.
About
Specializes in neobrutalist web aesthetics—thick strokes, flat saturated colors, asymmetric grids, and playful brutal honesty—to differentiate SaaS and marketing sites with a memorable visual identity engineers can implement.
- Bold border-driven layouts
- High-contrast color systems
- Raw typography stacks
- Distinctive brand differentiation
Neobrutalist Web Designer by the numbers
- 190 all-time installs (skills.sh)
- Ranked #945 of 1,880 Design & UI/UX skills by installs in the Skillselion catalog
- Data as of Aug 4, 2026 (Skillselion catalog sync)
npx skills add https://github.com/erichowens/some_claude_skills --skill neobrutalist-web-designerAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 190 |
|---|---|
| repo stars | ★ 178 |
| Last updated | July 14, 2026 |
| Repository | erichowens/some_claude_skills ↗ |
What it does
Produce bold neobrutalist web layouts with thick borders, high contrast, raw typography, and deliberate anti-minimal aesthetics for memorable product surfaces.
Files
Neobrutalist Web Designer
Creates modern 2026 web applications with authentic neobrutalist aesthetic. Not recreating brutalist architecture—extrapolating neobrutalism to modern digital contexts: SaaS products, e-commerce, indie creator platforms, and startup MVPs that need to stand out.
When to Use
Use for:
- SaaS dashboards that need bold differentiation (Gumroad, Figma style)
- E-commerce with memorable, raw aesthetic (Tony's Chocolonely style)
- Indie creator platforms and portfolios
- Startup landing pages and MVPs
- Educational platforms seeking approachable boldness
- Music, art, and social media apps
- Any UI that needs to "shout" rather than whisper
Do NOT use for:
- Glassmorphism/blur effects → use vaporwave-glassomorphic-ui-designer
- Windows 3.1 retro → use windows-3-1-web-designer
- Windows 95 retro → use windows-95-web-designer
- Soft shadows/neumorphism → use native-app-designer
- Subtle corporate design → use web-design-expert
- Gradient-heavy aesthetics → NOT neobrutalism
Neobrutalism vs Similar Styles
| Feature | Neobrutalism | Glassmorphism | Neumorphism | Win31/95 |
|---|---|---|---|---|
| Shadows | Hard (no blur) | Soft glow | Subtle inset | Beveled |
| Borders | Thick black strokes | Subtle/none | None | Beveled |
| Colors | Bold primaries | Frosted/pastel | Muted | System gray |
| Background | Solid flat | Blur/transparent | Soft gradient | Solid |
| Philosophy | Raw, exposed | Ethereal, hidden | Realistic | Functional |
---
Core Design System
The Three Pillars of Neobrutalism
1. Hard Shadows - Offset, no blur, usually black 2. Bold Borders - Thick (2-4px) black strokes 3. High Contrast - Primary colors against neutral backgrounds
Color Palette
| Color | Hex | CSS Variable | Usage |
|---|---|---|---|
| Black | #000000 | --neo-black | Borders, shadows, text |
| White | #FFFFFF | --neo-white | Backgrounds, contrast |
| Cream/Beige | #F5F0E6 | --neo-cream | Soft background alternative |
| Red | #FF5252 | --neo-red | Danger, emphasis |
| Yellow | #FFEB3B | --neo-yellow | Highlights, warnings |
| Blue | #2196F3 | --neo-blue | Links, primary actions |
| Pink | #FF4081 | --neo-pink | Accent, playful |
| Green | #4CAF50 | --neo-green | Success states |
| Orange | #FF9800 | --neo-orange | CTAs, attention |
| Purple | #9C27B0 | --neo-purple | Creative, premium |
Color Rules:
- ✅ Bold primaries with high saturation
- ✅ Black and white for maximum contrast
- ✅ Beige/cream for warmth without softness
- ❌ NO gradients (use flat colors only)
- ❌ NO transparency/opacity (stay opaque)
The Signature Hard Shadow
THE defining neobrutalist element - offset shadow with zero blur:
.neo-shadow {
/* THE neobrutalist shadow formula */
box-shadow: 4px 4px 0 #000000;
}
.neo-shadow--deep {
box-shadow: 8px 8px 0 #000000;
}
.neo-shadow--subtle {
box-shadow: 2px 2px 0 #000000;
}
/* Hover: shadow grows */
.neo-shadow:hover {
box-shadow: 6px 6px 0 #000000;
transform: translate(-2px, -2px);
}
/* Active: shadow shrinks (pressed) */
.neo-shadow:active {
box-shadow: 2px 2px 0 #000000;
transform: translate(2px, 2px);
}Bold Border System
.neo-border {
border: 3px solid #000000;
}
.neo-border--thick {
border: 4px solid #000000;
}
.neo-border--thin {
border: 2px solid #000000;
}
/* Colored borders for emphasis */
.neo-border--accent {
border: 3px solid var(--neo-pink);
}Typography
| Use | Font Suggestion | Fallback | Style |
|---|---|---|---|
| Headlines | Archivo Black | Impact, sans-serif | Bold, condensed |
| Body | Space Grotesk | Arial, sans-serif | Clean, geometric |
| Accent | Lexend Mega | Trebuchet, sans-serif | Wide, bold |
| Mono | JetBrains Mono | Courier New | Code, retro |
| Display | Bebas Neue | Impact | All-caps impact |
Typography Rules:
:root {
--font-neo-display: 'Archivo Black', 'Impact', sans-serif;
--font-neo-body: 'Space Grotesk', 'Arial', sans-serif;
--font-neo-accent: 'Lexend Mega', sans-serif;
--font-neo-mono: 'JetBrains Mono', 'Courier New', monospace;
}
/* Headlines are BOLD and often oversized */
h1 {
font-family: var(--font-neo-display);
font-size: clamp(3rem, 8vw, 6rem);
line-height: 0.9;
letter-spacing: -0.02em;
text-transform: uppercase;
}
/* Body maintains readability */
body {
font-family: var(--font-neo-body);
font-size: 1.125rem;
line-height: 1.6;
}---
Modern Extrapolations
SaaS Dashboard: The Gumroad Paradigm
Neobrutalism for SaaS emphasizes function over flourish:
┌────────────────────────────────────────────────────────┐
│ ██████████████████████████████████████████████████████ │
│ █ DASHBOARD [?] [⚙] [👤] █│
│ ██████████████████████████████████████████████████████ │
├────────────────────────────────────────────────────────┤
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ ████████████ │ │ ████████████ │ │ ████████████ │ │
│ │ REVENUE │ │ CUSTOMERS │ │ PRODUCTS │ │
│ │ ════════════ │ │ ════════════ │ │ ════════════ │ │
│ │ $12,450 │ │ 1,234 │ │ 12 │ │
│ │ ↑ 23% │ │ ↑ 15% │ │ → 0% │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ │
│ ┌────────────────────────────────────────────────────┐│
│ │ RECENT SALES [View All]││
│ │ ════════════════════════════════════════════════════││
│ │ ▓ Product A $49.00 Jan 31, 10:23 ││
│ │ ▓ Product B $29.00 Jan 31, 09:45 ││
│ │ ▓ Product A $49.00 Jan 31, 08:12 ││
│ └────────────────────────────────────────────────────┘│
└────────────────────────────────────────────────────────┘Key patterns:
- Cards with hard shadows
- Bold section headers
- High-contrast data display
- Black borders on everything
- Flat, solid background colors
E-Commerce: The Raw Shopping Experience
.neo-product-card {
background: var(--neo-white);
border: 3px solid var(--neo-black);
box-shadow: 6px 6px 0 var(--neo-black);
padding: 0;
overflow: hidden;
}
.neo-product-card:hover {
box-shadow: 8px 8px 0 var(--neo-black);
transform: translate(-2px, -2px);
}
.neo-product-card__image {
border-bottom: 3px solid var(--neo-black);
width: 100%;
aspect-ratio: 1;
object-fit: cover;
}
.neo-product-card__content {
padding: 1rem;
}
.neo-product-card__price {
font-family: var(--font-neo-display);
font-size: 1.5rem;
background: var(--neo-yellow);
display: inline-block;
padding: 0.25rem 0.5rem;
border: 2px solid var(--neo-black);
}
.neo-add-to-cart {
width: 100%;
background: var(--neo-black);
color: var(--neo-white);
border: 3px solid var(--neo-black);
padding: 0.75rem;
font-family: var(--font-neo-display);
text-transform: uppercase;
cursor: pointer;
}
.neo-add-to-cart:hover {
background: var(--neo-pink);
color: var(--neo-black);
}Landing Page: Bold First Impressions
╔══════════════════════════════════════════════════════════════╗
║ ║
║ ████████ WE BUILD ║
║ ████████ BOLD ║
║ ████████ PRODUCTS ║
║ ║
║ ┌─────────────────────────────────────────────────────────┐║
║ │ │║
║ │ No more boring SaaS. We create tools that │║
║ │ stand out, work hard, and make you money. │║
║ │ │║
║ └─────────────────────────────────────────────────────────┘║
║ ║
║ ╔═══════════════════════════════════════╗ ║
║ ║ → START FREE TRIAL ║ ║
║ ╚═══════════════════════════════════════╝ ║
║ ║
╚══════════════════════════════════════════════════════════════╝Responsive: Bold at Every Size
| Breakpoint | Adjustments |
|---|---|
| Mobile (<640px) | Shadow: 3px 3px, Border: 2px, Font scale down |
| Tablet (640-1024px) | Shadow: 4px 4px, Border: 3px, Standard fonts |
| Desktop (>1024px) | Shadow: 6px 6px, Border: 4px, Oversized headlines |
/* Mobile-first approach */
:root {
--neo-shadow-size: 3px;
--neo-border-width: 2px;
}
@media (min-width: 640px) {
:root {
--neo-shadow-size: 4px;
--neo-border-width: 3px;
}
}
@media (min-width: 1024px) {
:root {
--neo-shadow-size: 6px;
--neo-border-width: 4px;
}
}
.neo-card {
border: var(--neo-border-width) solid var(--neo-black);
box-shadow: var(--neo-shadow-size) var(--neo-shadow-size) 0 var(--neo-black);
}---
Component Patterns
Buttons
.neo-button {
background: var(--neo-white);
color: var(--neo-black);
border: 3px solid var(--neo-black);
box-shadow: 4px 4px 0 var(--neo-black);
padding: 0.75rem 1.5rem;
font-family: var(--font-neo-display);
font-size: 1rem;
text-transform: uppercase;
cursor: pointer;
transition: all 0.1s ease;
}
.neo-button:hover {
box-shadow: 6px 6px 0 var(--neo-black);
transform: translate(-2px, -2px);
}
.neo-button:active {
box-shadow: 2px 2px 0 var(--neo-black);
transform: translate(2px, 2px);
}
/* Primary variant */
.neo-button--primary {
background: var(--neo-yellow);
}
/* Danger variant */
.neo-button--danger {
background: var(--neo-red);
color: var(--neo-white);
}
/* Ghost variant */
.neo-button--ghost {
background: transparent;
box-shadow: none;
}
.neo-button--ghost:hover {
background: var(--neo-black);
color: var(--neo-white);
box-shadow: none;
transform: none;
}Cards
.neo-card {
background: var(--neo-white);
border: 3px solid var(--neo-black);
box-shadow: 6px 6px 0 var(--neo-black);
padding: 1.5rem;
}
.neo-card__header {
border-bottom: 2px solid var(--neo-black);
padding-bottom: 1rem;
margin-bottom: 1rem;
}
.neo-card__title {
font-family: var(--font-neo-display);
font-size: 1.25rem;
text-transform: uppercase;
}
/* Feature card with accent color */
.neo-card--featured {
background: var(--neo-yellow);
}
/* Highlighted state */
.neo-card--highlight {
border-color: var(--neo-pink);
box-shadow: 6px 6px 0 var(--neo-pink);
}Form Elements
.neo-input {
background: var(--neo-white);
border: 3px solid var(--neo-black);
padding: 0.75rem 1rem;
font-family: var(--font-neo-body);
font-size: 1rem;
width: 100%;
}
.neo-input:focus {
outline: none;
box-shadow: 4px 4px 0 var(--neo-black);
}
.neo-input::placeholder {
color: #888;
}
/* Labels are bold and uppercase */
.neo-label {
font-family: var(--font-neo-display);
text-transform: uppercase;
font-size: 0.875rem;
margin-bottom: 0.5rem;
display: block;
}
/* Checkbox/Radio */
.neo-checkbox {
appearance: none;
width: 24px;
height: 24px;
border: 3px solid var(--neo-black);
background: var(--neo-white);
cursor: pointer;
}
.neo-checkbox:checked {
background: var(--neo-black);
}
.neo-checkbox:checked::after {
content: '✓';
color: var(--neo-white);
font-size: 16px;
display: flex;
align-items: center;
justify-content: center;
}Navigation
.neo-nav {
background: var(--neo-black);
border-bottom: 4px solid var(--neo-black);
padding: 1rem 2rem;
display: flex;
justify-content: space-between;
align-items: center;
}
.neo-nav__logo {
font-family: var(--font-neo-display);
font-size: 1.5rem;
color: var(--neo-white);
text-transform: uppercase;
}
.neo-nav__links {
display: flex;
gap: 1.5rem;
}
.neo-nav__link {
color: var(--neo-white);
text-decoration: none;
font-family: var(--font-neo-body);
font-weight: 600;
padding: 0.5rem 0;
border-bottom: 3px solid transparent;
}
.neo-nav__link:hover {
border-bottom-color: var(--neo-yellow);
}
.neo-nav__link--active {
border-bottom-color: var(--neo-pink);
}---
Anti-Patterns
Anti-Pattern: Soft Shadows
Novice thinking: box-shadow: 0 4px 6px rgba(0,0,0,0.1) Reality: Neobrutalism uses HARD shadows with zero blur Instead: box-shadow: 4px 4px 0 #000000
Anti-Pattern: Gradients
Novice thinking: background: linear-gradient(to right, #ff5252, #ffeb3b) Reality: Neobrutalism is FLAT. No gradients, no blending. Instead: Pick ONE solid color. Embrace the flatness.
Anti-Pattern: Rounded Corners Everywhere
Novice thinking: border-radius: 16px on everything Reality: Neobrutalism prefers sharp corners or minimal rounding (4px max) Instead: border-radius: 0 or border-radius: 4px for subtle softening
Anti-Pattern: Thin Borders
Novice thinking: border: 1px solid #ddd Reality: Neobrutalist borders are BOLD (3-4px) and BLACK Instead: border: 3px solid #000000
Anti-Pattern: Low Contrast Colors
Novice thinking: Subtle pastels on white background Reality: Neobrutalism demands HIGH contrast Instead: Bold primaries (#FF5252, #FFEB3B) on white/black
Anti-Pattern: Transparency/Opacity
Novice thinking: background: rgba(255,255,255,0.8) Reality: Neobrutalism is OPAQUE. No see-through elements. Instead: background: #FFFFFF (solid, no alpha)
Anti-Pattern: Hover Blur Effects
Novice thinking: filter: blur(2px) on hover Reality: Hover states in neobrutalism are physical (translate + shadow change) Instead: transform: translate(-2px, -2px) + increased shadow
---
Quick Decision Tree
Is it a container element?
├── Card/Panel? → 3px black border + hard shadow
├── Section? → Full-width, solid background color
├── Modal? → Heavy shadow (8px+), thick border
└── Nav? → Black background or thick bottom border
Is it interactive?
├── Button? → Hard shadow that responds to hover/active
├── Link? → Underline or bottom border, color change on hover
├── Input? → Thick border, shadow on focus
└── Checkbox? → Thick border, solid fill when checked
Is it typography?
├── Headline? → Oversized, bold display font, uppercase optional
├── Body? → Clean geometric sans, good line height
├── Label? → Bold, uppercase, smaller size
└── Code? → Monospace, possibly with background
Is it a status indicator?
├── Success? → Green background or border
├── Error? → Red background or border
├── Warning? → Yellow background or border
└── Info? → Blue background or border---
CSS Variables Template
:root {
/* Core palette */
--neo-black: #000000;
--neo-white: #FFFFFF;
--neo-cream: #F5F0E6;
/* Primary colors */
--neo-red: #FF5252;
--neo-yellow: #FFEB3B;
--neo-blue: #2196F3;
--neo-pink: #FF4081;
--neo-green: #4CAF50;
--neo-orange: #FF9800;
--neo-purple: #9C27B0;
/* Typography */
--font-neo-display: 'Archivo Black', 'Impact', sans-serif;
--font-neo-body: 'Space Grotesk', 'Arial', sans-serif;
--font-neo-mono: 'JetBrains Mono', 'Courier New', monospace;
/* Spacing */
--neo-spacing-xs: 0.25rem;
--neo-spacing-sm: 0.5rem;
--neo-spacing-md: 1rem;
--neo-spacing-lg: 1.5rem;
--neo-spacing-xl: 2rem;
/* Shadows & Borders */
--neo-shadow-size: 4px;
--neo-border-width: 3px;
--neo-shadow: var(--neo-shadow-size) var(--neo-shadow-size) 0 var(--neo-black);
}---
The Quick Test
If your component has:
- ❌ Any blur in shadows → NOT neobrutalism
- ❌ Any gradients → NOT neobrutalism
- ❌ Transparency/opacity → NOT neobrutalism
- ❌ Thin (1px) borders → NOT neobrutalism
- ❌ Soft/muted colors → NOT neobrutalism
- ❌ Heavy border-radius (16px+) → NOT neobrutalism
It should have:
- ✅ Hard shadows (Xpx Ypx 0 #000)
- ✅ Bold borders (3-4px solid black)
- ✅ High contrast color combinations
- ✅ Flat, solid colors
- ✅ Bold typography
- ✅ Sharp or minimal corners
- ✅ Physical hover/active feedback
---
Accessibility Considerations
Despite its boldness, neobrutalism can be highly accessible:
1. High contrast - Black borders on white/colored backgrounds pass WCAG 2. Clear focus states - Shadow/border changes are obvious 3. Readable typography - Large, bold text is easy to scan 4. No motion dependency - Transforms are enhancers, not requirements
/* Ensure focus is visible */
.neo-button:focus-visible {
outline: 3px solid var(--neo-blue);
outline-offset: 2px;
}
/* Reduce motion if preferred */
@media (prefers-reduced-motion: reduce) {
.neo-button {
transition: none;
}
.neo-button:hover {
transform: none;
box-shadow: var(--neo-shadow); /* Keep shadow, skip animation */
}
}---
References
/references/component-library.md- Full CSS for all neobrutalist components/references/color-combinations.md- Tested color pairings with contrast ratios/references/typography-pairings.md- Font combinations for different contexts/references/real-world-examples.md- Analysis of Gumroad, Figma, and other implementations
---
Pairs With
- web-design-expert - For brand direction alongside bold style
- color-contrast-auditor - Ensure accessibility with bold colors
- design-system-creator - For generating full design token systems
- typography-expert - For advanced type pairing
---
Sources
Design research based on:
Changelog
All notable changes to the neobrutalist-web-designer skill will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[1.0.0] - 2026-01-31
Added
- Initial Release - Complete neobrutalist web design skill
Core Design System
- Three pillars methodology: Hard shadows, Bold borders, High contrast
- Signature shadow formula:
box-shadow: 4px 4px 0 #000000(zero blur) - 5-color primary palette with high saturation values
- Typography system with Archivo Black, Space Grotesk, Lexend Mega recommendations
- CSS variables template for rapid implementation
Component Library (references/component-library.md)
- Buttons: 5 variants (primary, secondary, ghost, dark, link) + 3 sizes
- Cards: Basic, interactive with hover states, featured, colored border
- Form elements: Inputs, textareas, selects, checkboxes, radio buttons
- Navigation: Header, sidebar patterns
- Alerts: Info, success, warning, error states
- Modals: Overlay with header, body, footer
- Tables: Bordered with striped rows
- Badges/tags with multiple color options
- Utility classes for shadows, borders, backgrounds
Real-World Analysis (references/real-world-examples.md)
- Tier 1 (Pure Neobrutalism): Gumroad, Figma brand refresh
- Tier 2 (Neobrutalist Influence): Tony's Chocolonely, Linear
- Tier 3 (Brutalism comparison): Craigslist, Drudge Report
- Pattern extraction from production sites
- Industry-specific adaptation guidance
- Common production mistakes to avoid
Anti-Patterns (7 documented)
1. Soft/blur shadows (the cardinal sin) 2. Gradient backgrounds 3. Rounded corners 4. Thin borders 5. Transparency/opacity 6. Neumorphism confusion 7. Inconsistent shadow directions
Modern Extrapolations
- SaaS dashboard patterns
- E-commerce product cards
- Marketing landing pages
- Creative portfolio layouts
- Form-heavy applications
Decision Support
- Quick decision tree for component styling
- "Is it Neobrutalism?" checklist
- Pairing guidance with other skills (color-contrast-auditor, web-design-expert)
Technical
- Proper NOT clause distinguishing from glassmorphism, neumorphism, minimalist skills
- Clear activation keywords: neobrutalism, neubrutalism, neo-brutalism, bold borders, hard shadows
- Cross-references to related design skills
- WCAG accessibility considerations (high contrast naturally compliant)
Research Sources
- 2025-2026 web design trend analysis
- Production site code extraction (Gumroad, Figma)
- Brutalism vs Neobrutalism distinction documentation
Neobrutalist Component Library
Complete CSS implementations for all core neobrutalist components.
Base Setup
CSS Variables
:root {
/* Core palette */
--neo-black: #000000;
--neo-white: #FFFFFF;
--neo-cream: #F5F0E6;
--neo-gray: #E5E5E5;
--neo-dark-gray: #333333;
/* Primary colors */
--neo-red: #FF5252;
--neo-red-dark: #D32F2F;
--neo-yellow: #FFEB3B;
--neo-yellow-dark: #FBC02D;
--neo-blue: #2196F3;
--neo-blue-dark: #1976D2;
--neo-pink: #FF4081;
--neo-pink-dark: #C2185B;
--neo-green: #4CAF50;
--neo-green-dark: #388E3C;
--neo-orange: #FF9800;
--neo-orange-dark: #F57C00;
--neo-purple: #9C27B0;
--neo-purple-dark: #7B1FA2;
--neo-cyan: #00BCD4;
--neo-cyan-dark: #0097A7;
/* Typography */
--font-neo-display: 'Archivo Black', 'Impact', sans-serif;
--font-neo-body: 'Space Grotesk', 'Inter', 'Arial', sans-serif;
--font-neo-accent: 'Lexend Mega', 'Trebuchet MS', sans-serif;
--font-neo-mono: 'JetBrains Mono', 'Fira Code', 'Courier New', monospace;
/* Spacing scale (8px base) */
--neo-space-1: 0.25rem; /* 4px */
--neo-space-2: 0.5rem; /* 8px */
--neo-space-3: 0.75rem; /* 12px */
--neo-space-4: 1rem; /* 16px */
--neo-space-5: 1.25rem; /* 20px */
--neo-space-6: 1.5rem; /* 24px */
--neo-space-8: 2rem; /* 32px */
--neo-space-10: 2.5rem; /* 40px */
--neo-space-12: 3rem; /* 48px */
--neo-space-16: 4rem; /* 64px */
/* Responsive shadow sizes */
--neo-shadow-sm: 2px 2px 0 var(--neo-black);
--neo-shadow-md: 4px 4px 0 var(--neo-black);
--neo-shadow-lg: 6px 6px 0 var(--neo-black);
--neo-shadow-xl: 8px 8px 0 var(--neo-black);
/* Border widths */
--neo-border-thin: 2px;
--neo-border-md: 3px;
--neo-border-thick: 4px;
/* Transitions */
--neo-transition-fast: 0.1s ease;
--neo-transition-normal: 0.2s ease;
}Reset & Base Styles
*, *::before, *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
html {
font-size: 16px;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
body {
font-family: var(--font-neo-body);
font-size: 1.125rem;
line-height: 1.6;
color: var(--neo-black);
background: var(--neo-white);
}
/* All images are block by default */
img {
display: block;
max-width: 100%;
height: auto;
}
/* Remove default focus, we'll add our own */
*:focus {
outline: none;
}
/* Visible focus for keyboard navigation */
*:focus-visible {
outline: 3px solid var(--neo-blue);
outline-offset: 2px;
}---
Typography
Headings
h1, h2, h3, h4, h5, h6 {
font-family: var(--font-neo-display);
line-height: 1.1;
letter-spacing: -0.02em;
margin-bottom: var(--neo-space-4);
}
h1 {
font-size: clamp(2.5rem, 8vw, 5rem);
text-transform: uppercase;
}
h2 {
font-size: clamp(2rem, 5vw, 3.5rem);
}
h3 {
font-size: clamp(1.5rem, 3vw, 2.5rem);
}
h4 {
font-size: 1.5rem;
}
h5 {
font-size: 1.25rem;
}
h6 {
font-size: 1rem;
text-transform: uppercase;
letter-spacing: 0.1em;
}Body Text
p {
margin-bottom: var(--neo-space-4);
}
.neo-lead {
font-size: 1.375rem;
line-height: 1.5;
font-weight: 500;
}
.neo-small {
font-size: 0.875rem;
}
.neo-tiny {
font-size: 0.75rem;
text-transform: uppercase;
letter-spacing: 0.05em;
}Links
a {
color: var(--neo-blue);
text-decoration: underline;
text-underline-offset: 3px;
text-decoration-thickness: 2px;
transition: color var(--neo-transition-fast);
}
a:hover {
color: var(--neo-pink);
}
.neo-link--bold {
font-weight: 700;
text-decoration-thickness: 3px;
}
.neo-link--no-underline {
text-decoration: none;
border-bottom: 3px solid var(--neo-blue);
padding-bottom: 2px;
}
.neo-link--no-underline:hover {
border-bottom-color: var(--neo-pink);
}---
Buttons
Base Button
.neo-btn {
display: inline-flex;
align-items: center;
justify-content: center;
gap: var(--neo-space-2);
padding: var(--neo-space-3) var(--neo-space-6);
font-family: var(--font-neo-display);
font-size: 1rem;
text-transform: uppercase;
letter-spacing: 0.02em;
text-decoration: none;
border: var(--neo-border-md) solid var(--neo-black);
background: var(--neo-white);
color: var(--neo-black);
box-shadow: var(--neo-shadow-md);
cursor: pointer;
transition: all var(--neo-transition-fast);
-webkit-user-select: none;
user-select: none;
}
.neo-btn:hover {
box-shadow: var(--neo-shadow-lg);
transform: translate(-2px, -2px);
}
.neo-btn:active {
box-shadow: var(--neo-shadow-sm);
transform: translate(2px, 2px);
}
.neo-btn:disabled {
opacity: 0.5;
cursor: not-allowed;
transform: none;
box-shadow: var(--neo-shadow-md);
}Button Variants
/* Primary - Yellow */
.neo-btn--primary {
background: var(--neo-yellow);
}
.neo-btn--primary:hover {
background: var(--neo-yellow-dark);
}
/* Secondary - Pink */
.neo-btn--secondary {
background: var(--neo-pink);
color: var(--neo-white);
}
.neo-btn--secondary:hover {
background: var(--neo-pink-dark);
}
/* Success - Green */
.neo-btn--success {
background: var(--neo-green);
color: var(--neo-white);
}
/* Danger - Red */
.neo-btn--danger {
background: var(--neo-red);
color: var(--neo-white);
}
/* Dark - Black */
.neo-btn--dark {
background: var(--neo-black);
color: var(--neo-white);
border-color: var(--neo-black);
}
.neo-btn--dark:hover {
background: var(--neo-dark-gray);
}
/* Ghost - Transparent */
.neo-btn--ghost {
background: transparent;
box-shadow: none;
}
.neo-btn--ghost:hover {
background: var(--neo-black);
color: var(--neo-white);
transform: none;
box-shadow: none;
}
/* Outline Only */
.neo-btn--outline {
background: transparent;
}
.neo-btn--outline:hover {
background: var(--neo-black);
color: var(--neo-white);
}Button Sizes
.neo-btn--sm {
padding: var(--neo-space-2) var(--neo-space-4);
font-size: 0.875rem;
box-shadow: var(--neo-shadow-sm);
}
.neo-btn--lg {
padding: var(--neo-space-4) var(--neo-space-8);
font-size: 1.125rem;
box-shadow: var(--neo-shadow-lg);
}
.neo-btn--xl {
padding: var(--neo-space-5) var(--neo-space-10);
font-size: 1.25rem;
box-shadow: var(--neo-shadow-xl);
}
/* Full width */
.neo-btn--block {
display: flex;
width: 100%;
}Icon Buttons
.neo-btn--icon {
padding: var(--neo-space-3);
aspect-ratio: 1;
}
.neo-btn--icon svg {
width: 1.25em;
height: 1.25em;
}---
Cards
Base Card
.neo-card {
background: var(--neo-white);
border: var(--neo-border-md) solid var(--neo-black);
box-shadow: var(--neo-shadow-lg);
overflow: hidden;
}
.neo-card__header {
padding: var(--neo-space-4) var(--neo-space-6);
border-bottom: var(--neo-border-thin) solid var(--neo-black);
}
.neo-card__title {
font-family: var(--font-neo-display);
font-size: 1.25rem;
text-transform: uppercase;
margin: 0;
}
.neo-card__subtitle {
font-size: 0.875rem;
color: var(--neo-dark-gray);
margin-top: var(--neo-space-1);
}
.neo-card__body {
padding: var(--neo-space-6);
}
.neo-card__footer {
padding: var(--neo-space-4) var(--neo-space-6);
border-top: var(--neo-border-thin) solid var(--neo-black);
background: var(--neo-gray);
}
.neo-card__image {
width: 100%;
border-bottom: var(--neo-border-md) solid var(--neo-black);
}Card Variants
/* Interactive card */
.neo-card--interactive {
cursor: pointer;
transition: all var(--neo-transition-fast);
}
.neo-card--interactive:hover {
box-shadow: var(--neo-shadow-xl);
transform: translate(-2px, -2px);
}
/* Featured card */
.neo-card--featured {
background: var(--neo-yellow);
}
/* Highlight card */
.neo-card--highlight {
border-color: var(--neo-pink);
box-shadow: 6px 6px 0 var(--neo-pink);
}
/* Flat card (no shadow) */
.neo-card--flat {
box-shadow: none;
}
/* Colored border variants */
.neo-card--blue {
border-color: var(--neo-blue);
box-shadow: 6px 6px 0 var(--neo-blue);
}
.neo-card--green {
border-color: var(--neo-green);
box-shadow: 6px 6px 0 var(--neo-green);
}---
Form Elements
Inputs
.neo-input {
display: block;
width: 100%;
padding: var(--neo-space-3) var(--neo-space-4);
font-family: var(--font-neo-body);
font-size: 1rem;
color: var(--neo-black);
background: var(--neo-white);
border: var(--neo-border-md) solid var(--neo-black);
transition: box-shadow var(--neo-transition-fast);
}
.neo-input:focus {
box-shadow: var(--neo-shadow-md);
}
.neo-input::placeholder {
color: #888888;
}
/* Input sizes */
.neo-input--sm {
padding: var(--neo-space-2) var(--neo-space-3);
font-size: 0.875rem;
}
.neo-input--lg {
padding: var(--neo-space-4) var(--neo-space-5);
font-size: 1.125rem;
}
/* Error state */
.neo-input--error {
border-color: var(--neo-red);
}
.neo-input--error:focus {
box-shadow: 4px 4px 0 var(--neo-red);
}Labels
.neo-label {
display: block;
font-family: var(--font-neo-display);
font-size: 0.875rem;
text-transform: uppercase;
letter-spacing: 0.05em;
margin-bottom: var(--neo-space-2);
}
.neo-label--required::after {
content: ' *';
color: var(--neo-red);
}Textarea
.neo-textarea {
display: block;
width: 100%;
min-height: 120px;
padding: var(--neo-space-4);
font-family: var(--font-neo-body);
font-size: 1rem;
line-height: 1.5;
color: var(--neo-black);
background: var(--neo-white);
border: var(--neo-border-md) solid var(--neo-black);
resize: vertical;
}
.neo-textarea:focus {
box-shadow: var(--neo-shadow-md);
}Select
.neo-select {
display: block;
width: 100%;
padding: var(--neo-space-3) var(--neo-space-4);
padding-right: var(--neo-space-10);
font-family: var(--font-neo-body);
font-size: 1rem;
color: var(--neo-black);
background: var(--neo-white);
border: var(--neo-border-md) solid var(--neo-black);
appearance: none;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");
background-repeat: no-repeat;
background-position: right 12px center;
background-size: 16px;
cursor: pointer;
}
.neo-select:focus {
box-shadow: var(--neo-shadow-md);
}Checkbox & Radio
.neo-checkbox,
.neo-radio {
appearance: none;
width: 24px;
height: 24px;
border: var(--neo-border-md) solid var(--neo-black);
background: var(--neo-white);
cursor: pointer;
display: inline-flex;
align-items: center;
justify-content: center;
vertical-align: middle;
flex-shrink: 0;
}
.neo-checkbox:checked,
.neo-radio:checked {
background: var(--neo-black);
}
.neo-checkbox:checked::after {
content: '✓';
color: var(--neo-white);
font-size: 16px;
font-weight: bold;
}
.neo-radio {
border-radius: 50%;
}
.neo-radio:checked::after {
content: '';
width: 10px;
height: 10px;
background: var(--neo-white);
border-radius: 50%;
}
/* Focus states */
.neo-checkbox:focus-visible,
.neo-radio:focus-visible {
box-shadow: var(--neo-shadow-sm);
}Form Group
.neo-form-group {
margin-bottom: var(--neo-space-6);
}
.neo-form-hint {
font-size: 0.875rem;
color: var(--neo-dark-gray);
margin-top: var(--neo-space-2);
}
.neo-form-error {
font-size: 0.875rem;
color: var(--neo-red);
margin-top: var(--neo-space-2);
font-weight: 600;
}---
Navigation
Top Navigation
.neo-nav {
display: flex;
align-items: center;
justify-content: space-between;
padding: var(--neo-space-4) var(--neo-space-6);
background: var(--neo-black);
border-bottom: var(--neo-border-thick) solid var(--neo-black);
}
.neo-nav__logo {
font-family: var(--font-neo-display);
font-size: 1.5rem;
color: var(--neo-white);
text-decoration: none;
text-transform: uppercase;
}
.neo-nav__menu {
display: flex;
align-items: center;
gap: var(--neo-space-6);
list-style: none;
}
.neo-nav__link {
color: var(--neo-white);
text-decoration: none;
font-weight: 600;
padding-bottom: var(--neo-space-1);
border-bottom: 3px solid transparent;
transition: border-color var(--neo-transition-fast);
}
.neo-nav__link:hover {
border-bottom-color: var(--neo-yellow);
}
.neo-nav__link--active {
border-bottom-color: var(--neo-pink);
}
/* Light variant */
.neo-nav--light {
background: var(--neo-white);
border-bottom-color: var(--neo-black);
}
.neo-nav--light .neo-nav__logo,
.neo-nav--light .neo-nav__link {
color: var(--neo-black);
}Mobile Menu
.neo-nav__toggle {
display: none;
background: transparent;
border: none;
color: var(--neo-white);
font-size: 1.5rem;
cursor: pointer;
}
@media (max-width: 768px) {
.neo-nav__toggle {
display: block;
}
.neo-nav__menu {
display: none;
position: absolute;
top: 100%;
left: 0;
right: 0;
flex-direction: column;
background: var(--neo-black);
border-bottom: var(--neo-border-thick) solid var(--neo-black);
padding: var(--neo-space-4);
gap: var(--neo-space-4);
}
.neo-nav__menu--open {
display: flex;
}
}---
Badges & Tags
.neo-badge {
display: inline-flex;
align-items: center;
padding: var(--neo-space-1) var(--neo-space-3);
font-family: var(--font-neo-display);
font-size: 0.75rem;
text-transform: uppercase;
letter-spacing: 0.05em;
background: var(--neo-yellow);
border: var(--neo-border-thin) solid var(--neo-black);
}
.neo-badge--pink { background: var(--neo-pink); color: var(--neo-white); }
.neo-badge--blue { background: var(--neo-blue); color: var(--neo-white); }
.neo-badge--green { background: var(--neo-green); color: var(--neo-white); }
.neo-badge--red { background: var(--neo-red); color: var(--neo-white); }
.neo-badge--black { background: var(--neo-black); color: var(--neo-white); }
.neo-tag {
display: inline-flex;
align-items: center;
gap: var(--neo-space-2);
padding: var(--neo-space-2) var(--neo-space-3);
font-size: 0.875rem;
background: var(--neo-gray);
border: var(--neo-border-thin) solid var(--neo-black);
}
.neo-tag__remove {
background: none;
border: none;
cursor: pointer;
font-size: 1rem;
padding: 0;
line-height: 1;
}---
Alerts & Notices
.neo-alert {
padding: var(--neo-space-4) var(--neo-space-6);
border: var(--neo-border-md) solid var(--neo-black);
box-shadow: var(--neo-shadow-md);
margin-bottom: var(--neo-space-4);
}
.neo-alert__title {
font-family: var(--font-neo-display);
font-size: 1rem;
text-transform: uppercase;
margin-bottom: var(--neo-space-2);
}
.neo-alert--info {
background: var(--neo-blue);
color: var(--neo-white);
}
.neo-alert--success {
background: var(--neo-green);
color: var(--neo-white);
}
.neo-alert--warning {
background: var(--neo-yellow);
color: var(--neo-black);
}
.neo-alert--error {
background: var(--neo-red);
color: var(--neo-white);
}---
Modal / Dialog
.neo-modal-overlay {
position: fixed;
inset: 0;
background: rgba(0, 0, 0, 0.5);
display: flex;
align-items: center;
justify-content: center;
padding: var(--neo-space-4);
z-index: 1000;
}
.neo-modal {
width: 100%;
max-width: 500px;
max-height: 90vh;
overflow-y: auto;
background: var(--neo-white);
border: var(--neo-border-thick) solid var(--neo-black);
box-shadow: var(--neo-shadow-xl);
}
.neo-modal__header {
display: flex;
align-items: center;
justify-content: space-between;
padding: var(--neo-space-4) var(--neo-space-6);
background: var(--neo-black);
color: var(--neo-white);
}
.neo-modal__title {
font-family: var(--font-neo-display);
font-size: 1.25rem;
text-transform: uppercase;
margin: 0;
}
.neo-modal__close {
background: none;
border: none;
color: var(--neo-white);
font-size: 1.5rem;
cursor: pointer;
padding: 0;
line-height: 1;
}
.neo-modal__body {
padding: var(--neo-space-6);
}
.neo-modal__footer {
display: flex;
justify-content: flex-end;
gap: var(--neo-space-3);
padding: var(--neo-space-4) var(--neo-space-6);
border-top: var(--neo-border-thin) solid var(--neo-black);
}---
Tables
.neo-table {
width: 100%;
border-collapse: collapse;
border: var(--neo-border-md) solid var(--neo-black);
}
.neo-table th,
.neo-table td {
padding: var(--neo-space-3) var(--neo-space-4);
text-align: left;
border-bottom: var(--neo-border-thin) solid var(--neo-black);
}
.neo-table th {
font-family: var(--font-neo-display);
text-transform: uppercase;
font-size: 0.875rem;
background: var(--neo-black);
color: var(--neo-white);
}
.neo-table tr:hover td {
background: var(--neo-gray);
}
.neo-table--striped tr:nth-child(even) td {
background: var(--neo-cream);
}---
Utilities
/* Text alignment */
.neo-text-left { text-align: left; }
.neo-text-center { text-align: center; }
.neo-text-right { text-align: right; }
/* Font weights */
.neo-font-normal { font-weight: 400; }
.neo-font-medium { font-weight: 500; }
.neo-font-bold { font-weight: 700; }
/* Text transforms */
.neo-uppercase { text-transform: uppercase; }
.neo-lowercase { text-transform: lowercase; }
.neo-capitalize { text-transform: capitalize; }
/* Display */
.neo-block { display: block; }
.neo-inline { display: inline; }
.neo-inline-block { display: inline-block; }
.neo-flex { display: flex; }
.neo-grid { display: grid; }
.neo-hidden { display: none; }
/* Margins & Padding (using spacing scale) */
.neo-m-0 { margin: 0; }
.neo-m-4 { margin: var(--neo-space-4); }
.neo-mt-4 { margin-top: var(--neo-space-4); }
.neo-mb-4 { margin-bottom: var(--neo-space-4); }
.neo-p-4 { padding: var(--neo-space-4); }
/* Add more as needed */
/* Width */
.neo-w-full { width: 100%; }
.neo-max-w-md { max-width: 28rem; }
.neo-max-w-lg { max-width: 32rem; }
.neo-max-w-xl { max-width: 36rem; }Design Gallery Sources for Neobrutalism
Crawled 2026-01-31 via Firecrawl MCP
Primary Component Libraries
neobrutalism.dev (Official shadcn/ui Neobrutalism)
URL: https://www.neobrutalism.dev/ Author: Samuel Breznjak (@samuelbreznjak)
A collection of neobrutalism-styled React Tailwind components based on shadcn/ui.
Key Features:
- Made with Tailwind CSS
- Open source (MIT License)
- Based on Shadcn/ui for high-quality components
- Fully customizable styling
Philosophy (from docs):
"Neobrutalism is a mix of regular brutalism in web design and more modern typography, illustration, and animation standards. Neobrutalism refuses the usual components of UX-UI design and embraces uncomfortable design elements, and it is more fearless to use distinctive color palettes."
Component Types Available:
- Alerts with icons
- Accordions
- Badges
- Buttons
- Cards with notifications
- Carousels
- Checkboxes
- Dialogs/Modals
- Dropdowns/Selects
- Forms (Login, Create Project)
- OTP inputs
- Radio groups
- Toggles/Switches
---
Tutorials & Style Guides
Behance: "How can I design in the Neo Brutalism style?"
URL: https://www.behance.net/gallery/164728311/How-can-I-design-in-the-Neo-Brutalism-style Author: Sepideh Yazdi (@sepidy) Published: February 26, 2023 Stats: 499 appreciations, 10.2K views
Cheat Sheet Summary
COLOR RULES: 1. Black: Use pitch black with no fear! Two main uses:
- Strokes (borders)
- Dark shadows
2. Background colors: Multiple colors allowed (not just white/gray)
- Vibrant colors (high saturation)
- Vintage/muted colors (like old magazines/posters)
3. NO GRADIENTS: Colors are distinct, no tones or gradients
SHADOW RULES:
- Drop shadows have both X and Y offset
- NO BLUR (critical!)
- Color: Black with 100% opacity
COMPONENT RULES:
- Raw, unrefined shapes: circles, rectangles, stars, polygons
- All shapes have strokes
- "Basically, these are shapes from Microsoft Paint!"
- Spaces defined with lines and cards
- Cards have strokes and black shadows
- Decorative elements: moving banners, images with background and stroke, illustrations
TYPOGRAPHY RULES:
- Sans-serif still most popular
- Large font sizes for headings
- Experiment with line height and letter spacing
- Typography is a decorative element (especially on websites)
- Recommended fonts:
- Lexend Mega
- Public Sans
- Mabry Pro
- Archivo Black
- Bebas Kai
DIFFERENCE FROM OTHER STYLES:
| Style | Characteristics |
|---|---|
| Brutalism | Deliberately ugly, raw HTML, no styling |
| Minimalism | Clean, white space, subtle, refined |
| Neobrutalism | Bold colors + raw shapes + modern typography + NO blur |
---
CSS Example Collections
FreeFrontend: CSS Neobrutalism UI Examples
URL: https://freefrontend.com/css-neobrutalism/ Examples: 6 curated CSS implementations
Featured Examples:
1. Neobrutalist Subscribe Form (January 2026)
- Bold, responsive input field that pops out on activation
- Valid email triggers bright green arrow button sliding in
- Playful hover animations
- CodePen: rustcode collection
2. Neo Brutalism Profile Card
- CodePen: https://codepen.io/rustcode/pen/MYYMrVQ
3. Neo-Brutalist Component Library
- CodePen: https://codepen.io/rustcode/pen/YPPbxYX
4. Bootstrap 5 Accordion Example
- Uses
:has()pseudo-class for active panel detection - Applies bold border and hard shadow to parent container
- Creates "pop-out" focus effect
5. Credit Card Checkout
- JS-free form component
- Solid
borderwith hard, offsetbox-shadow - Tactile, pseudo-3D effect
- Flexbox layout
box-shadowoutline on:hover- Background change on
:focus
Related CSS Hubs:
---
Design System References
Component Gallery
URL: https://component.gallery/ Stats: 60 components, 95 design systems, 2,680 examples
Curated reference for interface components from real-world design systems.
Featured Design Systems (for neobrutalism inspiration):
- Elastic UI framework (React, CSS-in-JS)
- Sainsbury's Design System (React, Sass)
- Ariakit (React, Accessibility-focused)
- Web Awesome (Web Components)
- Red Hat design system (Web Components)
- HeroUI (React, Tailwind CSS)
Component Categories:
- Carousel / Content slider
- Tree view (hierarchical)
- Popover (click-triggered, interactive)
- Rating (star systems)
- Accordion / Collapsible
- Quote / Pull quote
- Pagination
- Tabs / Tabbed interface
---
Template Marketplaces
Framer Templates
URL: https://www.framer.com/templates/
Categories with counts:
- Business: 2.9K templates
- Creative: 1.7K templates
- Community: 213 templates
- Style: 2.3K templates
- Free: 1.4K templates
Notable Free Templates:
- Stelvio (Peter Konti)
- Finns (Motiondrops)
- Xtract (Kanishk Dubey)
- Wallet (Akim)
- Handyman (Expressed Labs)
- Cryptix (Arthur Duchesne)
- Draftr (Salim/Webestica)
---
Dribbble Search Results
Active Search Pages for Neobrutalism:
- https://dribbble.com/search/neobrutalism-ui-design
- https://dribbble.com/search/neobrutalism
- https://dribbble.com/search/neo-brutalism-design
- https://dribbble.com/search/neobrutalism-design
- https://dribbble.com/search/neobrutalism-web
- https://dribbble.com/search/neobrutalism-website
- https://dribbble.com/tags/neobrutalism-design
- https://dribbble.com/search/brutalism-ui
Featured Shot:
- "Website Landing Page - Neobrutalism - Portal 2025"
- Uses custom animations
- Motion mirrors portal travel experience
---
Behance Resources
Tutorial Collections: 1. https://www.behance.net/gallery/164728311/How-can-I-design-in-the-Neo-Brutalism-style (Main guide) 2. https://www.behance.net/gallery/141541363/Neo-brutalism-landing-page-UI-design 3. https://www.behance.net/gallery/164756593/NEO-BRUTALISM-Concept-NFT-Website-Design
UI Kits with Neobrutalism Themes:
- Nutrio - Calorie Counter App UI Kit (modern + neobrutalism themes)
- Lumio - Mood Tracker App UI Kit (modern + neobrutalism themes)
Tag Searches:
- https://www.behance.net/tags/brutalism
- https://www.behance.net/search/projects/retro%20elements%20brutalism
---
21st.dev Community Components
URL: https://21st.dev/community/components
Large collection of community-contributed UI components. (Full data available in separate crawl file)
---
Quick Reference: CSS Patterns Extracted
The Signature Neobrutalism Shadow
.neo-element {
/* Hard shadow - NO BLUR */
box-shadow: 4px 4px 0 #000000;
/* Thick border */
border: 3px solid #000000;
}
.neo-element:hover {
/* Grow shadow on hover */
box-shadow: 6px 6px 0 #000000;
transform: translate(-2px, -2px);
}
.neo-element:active {
/* Shrink shadow on click */
box-shadow: 2px 2px 0 #000000;
transform: translate(2px, 2px);
}Color Palette Approaches
Vibrant (High Saturation):
:root {
--neo-red: #FF5252;
--neo-yellow: #FFEB3B;
--neo-blue: #2196F3;
--neo-green: #4CAF50;
--neo-purple: #9C27B0;
}Vintage/Muted:
:root {
--neo-cream: #FEF3C7;
--neo-sage: #A7C4A0;
--neo-dusty-rose: #D4A5A5;
--neo-mustard: #E3B23C;
--neo-slate: #6B7280;
}Typography Stack
:root {
--font-display: 'Archivo Black', 'Lexend Mega', sans-serif;
--font-body: 'Public Sans', 'Space Grotesk', sans-serif;
/* Large headings */
--heading-size: clamp(2.5rem, 5vw, 4rem);
/* Experiment with spacing */
--heading-tracking: -0.02em;
--heading-leading: 1.1;
}---
Sources Summary
| Source | Type | Key Value |
|---|---|---|
| neobrutalism.dev | Component Library | shadcn/ui neobrutalism |
| Behance (Sepidy) | Tutorial | Complete style guide + cheat sheet |
| FreeFrontend | CSS Examples | CodePen implementations |
| Component Gallery | Reference | 2,680 real-world examples |
| Framer | Templates | 8K+ templates by category |
| Dribbble | Inspiration | Visual design examples |
---
Last updated: 2026-01-31 Crawled via Firecrawl MCP
Real-World Neobrutalism Examples
Analysis of production neobrutalist implementations for reference.
Tier 1: Pure Neobrutalism
Gumroad
URL: gumroad.com
What they do right:
- Heavy black borders on everything
- Flat solid colors (pink, yellow, blue)
- Hard shadows with no blur
- Bold display typography
- Raw, functional aesthetic
Key patterns:
/* Gumroad-style product card */
.gumroad-card {
background: #fff;
border: 4px solid #000;
box-shadow: 8px 8px 0 #000;
}
/* Gumroad pink accent */
.gumroad-accent {
background: #FF90E8; /* Their signature pink */
}Takeaways:
- Consistency is key—every element uses the same border/shadow language
- Limited color palette (pink, black, white) creates cohesion
- Typography is functional, not decorative
---
Figma (Brand Refresh 2023+)
URL: figma.com
What they do right:
- Bold geometric shapes
- High contrast color blocking
- Thick strokes on illustrations
- Playful yet professional
Key patterns:
/* Figma-style color blocks */
.figma-block {
background: #A259FF; /* Figma purple */
border: 3px solid #000;
}
.figma-block--yellow {
background: #FFC700;
}
.figma-block--coral {
background: #FF7262;
}Takeaways:
- Neobrutalism can be professional and enterprise-friendly
- Geometric illustrations reinforce the bold aesthetic
- Color variety works when all colors are high-saturation
---
Tier 2: Neobrutalist Influence
Tony's Chocolonely
Industry: E-commerce (Chocolate)
Neobrutalist elements:
- Bright primary colors
- Bold typography
- Chunky layout sections
- Playful, "unpolished" feel
Non-neobrutalist elements:
- Some soft shadows
- Rounded corners in places
- Gradient accents
Hybrid approach:
/* Tony's blends neobrutalism with playfulness */
.tonys-wrapper {
background: #FF1E00; /* Bold red */
border: 3px solid #000;
/* They add some curves for friendliness */
border-radius: 8px;
}---
Linear (linearb.io)
Industry: Developer Tools
Neobrutalist elements:
- Hard shadows on cards
- Bold accent colors
- Strong typography hierarchy
Non-neobrutalist elements:
- Dark mode default
- Some blur effects
- Subtle gradients
Analysis: Linear shows how neobrutalism can be adapted for developer audiences—keeping the structural boldness while adding dark mode sophistication.
---
Tier 3: Brutalist (Not Neo)
Craigslist
URL: craigslist.org
This is BRUTALISM, not neobrutalism:
- Purely functional
- No styling for aesthetics
- System fonts, default links
- No intentional design language
Key difference: Brutalism is absence of style; neobrutalism is intentional bold style.
---
Drudge Report
URL: drudgereport.com
This is BRUTALISM:
- Text-only design
- No visual hierarchy through color
- Default HTML styling
- Information density over aesthetics
Why it's not neobrutalism:
- No hard shadows
- No bold borders
- No primary color palette
- No intentional visual design
---
Pattern Library from Real Sites
Card Patterns
Gumroad-style:
.card-gumroad {
background: #fff;
border: 3px solid #000;
box-shadow: 6px 6px 0 #000;
padding: 1.5rem;
transition: all 0.1s;
}
.card-gumroad:hover {
box-shadow: 8px 8px 0 #000;
transform: translate(-2px, -2px);
}Figma-style (with color):
.card-figma {
background: #A259FF;
border: 4px solid #000;
box-shadow: 8px 8px 0 #000;
padding: 2rem;
color: #fff;
}Button Patterns
Standard neobrutalist:
.btn-neo {
background: #FFEB3B;
border: 3px solid #000;
box-shadow: 4px 4px 0 #000;
padding: 0.75rem 1.5rem;
font-weight: 700;
text-transform: uppercase;
}
.btn-neo:hover {
box-shadow: 6px 6px 0 #000;
transform: translate(-2px, -2px);
}
.btn-neo:active {
box-shadow: 2px 2px 0 #000;
transform: translate(2px, 2px);
}Inverted (dark):
.btn-neo-dark {
background: #000;
color: #fff;
border: 3px solid #000;
box-shadow: 4px 4px 0 #FF4081;
}
.btn-neo-dark:hover {
background: #FF4081;
color: #000;
}Hero Patterns
Bold headline with color block:
.hero-neo {
background: #4CAF50;
border-bottom: 6px solid #000;
padding: 6rem 2rem;
}
.hero-neo h1 {
font-size: clamp(3rem, 10vw, 8rem);
font-weight: 900;
text-transform: uppercase;
color: #000;
line-height: 0.9;
}
.hero-neo .subtitle {
font-size: 1.5rem;
max-width: 600px;
margin-top: 1.5rem;
}Split hero:
.hero-split {
display: grid;
grid-template-columns: 1fr 1fr;
min-height: 100vh;
}
.hero-split__left {
background: #FF5252;
display: flex;
align-items: center;
padding: 4rem;
border-right: 4px solid #000;
}
.hero-split__right {
background: #2196F3;
display: flex;
align-items: center;
justify-content: center;
}Navigation Patterns
Solid black nav:
.nav-neo {
background: #000;
padding: 1rem 2rem;
display: flex;
justify-content: space-between;
align-items: center;
border-bottom: 4px solid #000;
}
.nav-neo__logo {
color: #fff;
font-size: 1.5rem;
font-weight: 900;
text-transform: uppercase;
}
.nav-neo__link {
color: #fff;
text-decoration: none;
padding: 0.5rem 0;
border-bottom: 3px solid transparent;
}
.nav-neo__link:hover {
border-bottom-color: #FFEB3B;
}White nav with accent:
.nav-neo-light {
background: #fff;
border-bottom: 4px solid #000;
box-shadow: 0 4px 0 #000;
}---
Industry-Specific Adaptations
SaaS / Tech Startups
Best practices:
- Use neobrutalism for marketing pages
- Consider softer approach for complex dashboards
- Bold CTAs drive conversions
- Works great for pricing pages
Example structure:
Marketing site → Full neobrutalism
Dashboard → Softer, functional neo-influenced
Onboarding → Bold but clearE-Commerce
Best practices:
- Product cards with hard shadows
- Bold "Add to Cart" buttons
- High-contrast price displays
- Category navigation with color coding
Caution:
- Don't let style overwhelm product images
- Ensure checkout is clear and trustworthy
- Test with users—bold can feel "untrustworthy" to some
Creative / Portfolio
Best practices:
- Full neobrutalism works great
- Use as a differentiator
- Bold typography for name/title
- Hard shadow image frames
Education / EdTech
Best practices:
- Playful neobrutalism with softer colors
- High contrast for readability
- Bold CTAs for lesson progression
- Color coding for categories/subjects
---
Common Mistakes in Production
1. Inconsistent Shadow Sizes
Wrong:
.card-1 { box-shadow: 4px 4px 0 #000; }
.card-2 { box-shadow: 8px 8px 0 #000; }
.button { box-shadow: 2px 2px 0 #000; }Right: Use CSS variables for consistency:
:root {
--shadow-sm: 2px 2px 0 #000;
--shadow-md: 4px 4px 0 #000;
--shadow-lg: 6px 6px 0 #000;
}2. Mixing Blur Shadows
Wrong:
.neo-card { box-shadow: 4px 4px 0 #000; }
.neo-button { box-shadow: 0 4px 6px rgba(0,0,0,0.1); } /* Blur! */Right: All shadows hard, all the time.
3. Color Palette Explosion
Wrong: 15 different accent colors
Right: 3-5 primary colors, used consistently
4. Thin Borders + Hard Shadows
Wrong:
.card {
border: 1px solid #000;
box-shadow: 8px 8px 0 #000;
}Right: Border weight should match shadow weight:
.card {
border: 3px solid #000;
box-shadow: 6px 6px 0 #000;
}---
Responsive Considerations
All examples should scale down shadows/borders on mobile:
:root {
--shadow: 3px 3px 0 #000;
--border: 2px;
}
@media (min-width: 768px) {
:root {
--shadow: 4px 4px 0 #000;
--border: 3px;
}
}
@media (min-width: 1024px) {
:root {
--shadow: 6px 6px 0 #000;
--border: 4px;
}
}---
Performance Notes
Neobrutalism is performance-friendly:
- No blur effects (CPU-intensive)
- No transparency calculations
- Simple box-shadows (GPU-accelerated)
- Flat colors (small CSS)
Keep it that way—don't add CSS filters or backdrop effects.