Back to Blog

Web Brutalism: Creating Interfaces with Extreme Personality

The UI Factory

The End of Boring: Brutalism in UI

Over the last 10 years, the web has suffered a massive "corporatization". Everything is flat, clean, with blurred shadows and friendly neutral colors. Web Brutalism (and its variant "Ink & Acid") is born as a response to this sea of boredom.

The 3 Rules of Brutalism

To create a component with a truly brutalist style in The UI Factory, we apply three unbreakable rules:

1. Solid and Offset Shadows

Forget about the soft box-shadow. Shadows in brutalism simulate physical ink blocks printed on paper.

// The wrong way (Too soft)
<div className="shadow-lg border-gray-200" />

// The right way (Brutalist)
<div className="shadow-[8px_8px_0px_#000] border-4 border-black bg-[#ccff00]" />

2. Aggressive Typography

Use heavy fonts (font-black), uppercase (uppercase), and wide letter spacing (tracking-widest). Text is not just read, it is shouted.

3. Exaggerated Physics with Framer Motion

A brutalist interface is not static. When interacting with it, it must react drastically. This is where Framer Motion comes in.

import { motion } from "framer-motion";

export const BrutalButton = () => (
  <motion.button
    whileHover={{ 
      x: -4, 
      y: -4, 
      boxShadow: "12px 12px 0px #000" 
    }}
    whileTap={{ 
      x: 4, 
      y: 4, 
      boxShadow: "0px 0px 0px #000" 
    }}
    className="bg-[#ff00ff] text-white border-4 border-black font-black uppercase shadow-[8px_8px_0px_#000] px-8 py-4"
  >
    Activate System
  </motion.button>
);

Notice the whileTap: when the user presses the button, we move it exactly the same distance the shadow occupies, while reducing the shadow to zero. This creates a perfect optical illusion of "pressing a physical button".

Brutalism is not for all projects, but when it fits, it leaves an indelible impression.