everything looks the same now
Open ten Series A SaaS landing pages back to back and you will start to feel something close to vertigo, because they are all running the same playbook, the same rounded-2xl cards floating on a faint gradient mesh, the same Inter variable font at three weights, the same lavender-to-cyan blob in the hero, the same testimonial carousel with circular avatars and a four point eight star rating, the same 'Trusted by' logo strip in 40% opacity grayscale. Figma's 2026 State of the Designer report puts a number on it, 72% of designers now use generative AI somewhere in their workflow, and you can see the consequence rendered pixel for pixel across the entire industry. When everyone is prompting roughly the same models with roughly the same intent, you get convergence, and convergence at scale looks like a single design language wearing slightly different hats. I am not arguing the output is ugly. A lot of it is fine. That is exactly the problem. Fine is forgettable, and a product that is forgettable on first contact has to spend real money later buying the attention it failed to earn for free. We had a client come to us last year, a B2B document processing startup, genuinely good product, and their landing page converted like wet cardboard because nothing about it told the visitor a human had ever made a decision. It looked like it had been generated, because it had been, and people can smell that even when they can't name it.
why the models converge
Generative tools don't have taste, they have a center of mass, and they pull everything toward it. Ask v0 or any of the current crop of design assistants for a pricing section and you get the statistical average of every pricing section in the training data, which means the most common patterns get reinforced and the unusual ones get smoothed away. This is not a bug you can prompt your way out of with 'make it more unique', because the model's notion of unique is also an average, just an average of things people described as unique. The deeper issue is that the cost of accepting the default has collapsed to nearly zero. It used to take a designer a full day to build a hero section, so there was friction, and friction forced decisions, and decisions are where personality comes from. Now the first draft appears in eight seconds and it is good enough to ship, so it ships, and the small accumulated weirdnesses that used to differentiate one team's work from another's never get a chance to form. Multiply that across thousands of teams all reaching for the same defaults and the entire visual baseline flattens. Your product isn't competing against ugly anymore. It's competing against an ocean of competent sameness, and competent sameness is invisible.
brutalism as performance architecture
Tactile brutalism gets dismissed as a nostalgia trip, raw borders and clashing colors and type that screams, but the people who write it off as pure aesthetics are missing what it does to your bundle. Most of the slick, soft, gradient-heavy look that the AI defaults produce is expensive to render. Layered box shadows trigger paint work, backdrop-filter blur is one of the most punishing properties you can put on a scrolling element, and the smooth spring animations that make those interfaces feel premium usually arrive on the back of Framer Motion or some other library that costs you 40 to 60 kilobytes of JavaScript before you have shown a single useful thing. Brutalism, done deliberately, throws most of that out. A two pixel solid black border costs nothing. A hard offset shadow is one cheap declaration, box-shadow: 8px 8px 0 #000, no blur radius, no compositing headache. Color blocks beat gradients on paint cost. Viewport-scaled type with clamp() means you delete entire breakpoint blocks from your stylesheet, font-size: clamp(2rem, 8vw, 6rem), and the browser handles the fluid scaling natively with zero JavaScript listening to resize events. We rebuilt that document processing client's marketing site this way, swapped the animation library for a handful of CSS keyframes and scroll-driven animations using animation-timeline: view(), and the JS bundle for the landing route dropped from around 180KB to under 30KB. Largest Contentful Paint went from 2.9 seconds to 1.1 on a throttled mid-tier Android. The thing loads like it's 2004 and looks like nothing else in their category.
the css-native toolkit
You can get most of the way to a distinctive, tactile interface without reaching for a single runtime dependency, and the modern CSS we have in 2026 makes this almost embarrassingly easy compared to a few years back. Texture is the first thing people assume needs an image asset, but you can build paper grain, halftone dots, and noise straight in CSS, a repeating conic-gradient for a checker or dot pattern, an SVG feTurbulence filter inlined as a data URI for film grain that scales infinitely and weighs basically nothing. Sharp geometry comes from clip-path, and you can carve angular cards and asymmetric containers that immediately read as intentional rather than templated. For the structural weirdness that signals a human was here, container queries let you change a component's entire layout based on its own width rather than the viewport, so a card can rearrange itself when you drop it into a narrow sidebar without a single media query. Scroll-driven animations, now stable across the browsers that matter, handle reveal effects and parallax with animation-timeline so the main thread stays free. The point isn't to use every one of these at once, that way lies a different kind of noise. The point is that the entire palette of distinctive, high-performance interface work is sitting in the platform already, waiting, and the only reason teams don't use it is that the AI defaults never suggest it and nobody on the team has the time or mandate to go off-script.
how to argue for the investment
If you are the designer or frontend lead who suspects your team's output is dissolving into the background, the hard part isn't the CSS, it's convincing whoever holds the budget that distinctiveness is worth deliberate engineering time when the generated version is free and ships today. Frame it as two arguments, because the aesthetic one alone will lose to a VP who genuinely cannot tell the difference between your dashboard and a competitor's. The first argument is the performance one, and it is the easy sell because it comes with numbers. Stripping the animation libraries and the heavy effects buys you real Core Web Vitals improvements, and you can put the LCP and bundle-size deltas on a slide, and improved LCP correlates with conversion in a way executives already believe. The second argument is harder but more important over a long horizon, which is that recognizability is a moat that compounds. A user who can identify your product from a single screenshot in a crowded Slack channel is a user you are not paying to re-acquire every quarter, and the only way to be recognizable is to make choices the averaging machine would never make. Pick one surface, your marketing homepage or your onboarding flow, rebuild it with the CSS-native approach, ship it, and measure both the load time and whatever proxy you have for engagement. That is how we usually start with clients, one route, real numbers, then expand once the argument has proven itself rather than trying to win a philosophical debate up front. Sameness is the default outcome of the tools everyone now uses. Escaping it is an engineering decision, and a cheap one, you just have to choose to make it.
