How to Make Your AI-Generated Website Look Like You Built It
Every AI coding tool produces the same Inter font, the same blue palette, the same 3-card grid. Here is a systematic process for turning generic AI output into something that looks deliberately designed.
You asked an AI to build your landing page. It came out fast, functional, and completely generic. Inter font. Blue primary color. Three cards in a row. Centered hero with an eyebrow badge. You have seen this exact site a thousand times.
This is not a criticism of AI tools. They are producing exactly what they are trained on — the most common patterns in their training data. The problem is that the most common patterns are indistinguishable from each other. Your product may be genuinely different. Your website is not.
Here is the process to fix that.
The 5 layers AI always gets wrong
Before you start editing, you need to know what to look for. AI-generated sites fail on five specific dimensions. Fix all five and the site stops looking generated.
Layer 1: Typography
Every AI tool defaults to Inter. Sometimes it varies to system-ui, Roboto, or DM Sans. All of these fonts are technically fine. They are also used on millions of websites. When you combine Inter with left-aligned body copy and two font weights (400 and 600), you have recreated the most common typographic signature on the web.
The fix is a font pairing: one display font for headings and one body font for text. These should not be from the same category. If your display font is a serif (Playfair Display, Fraunces, Cormorant Garamond), your body font should be a neutral sans (Karla, Work Sans, DM Sans). If your display font is geometric or condensed (Archivo Black, Bebas Neue), your body font should have personality (Raleway, Barlow).
Do not use: Inter, Roboto, Poppins, Open Sans, Montserrat, Lato.
/* Generic (the default) */
body { font-family: 'Inter', system-ui, sans-serif; }
/* Distinctive */
:root {
--f-display: 'Playfair Display', Georgia, serif;
--f-body: 'Karla', system-ui, sans-serif;
}
h1, h2, h3 { font-family: var(--f-display); }
body { font-family: var(--f-body); }This single change will make your site look designed rather than scaffolded. It costs nothing and takes ten minutes.
Layer 2: Color
AI tools default to one of three color bands:
- Blue-indigo (hue 210-240): #3B82F6, #6366F1 — the most common
- Purple-violet (hue 255-280): #8B5CF6, #7C3AED
- Teal-cyan (hue 180-200): #0EA5E9, #06B6D4
These are clean colors. They are also instantly recognizable as AI defaults. Users have seen them so many times that they subconsciously associate them with "generated."
The fix is simple: choose a hue outside those bands. Hue 0-180 and 290-360 are almost entirely free of AI defaults. A red-orange at hue 20, a warm yellow-green at hue 80, a deep magenta at hue 320 — any of these will immediately differentiate your palette.
/* AI default */
--primary: #3B82F6; /* hue 220 — the most common AI color */
/* Distinctive */
--primary: hsl(347, 72%, 48%); /* deep rose — hue 347, outside AI band */
/* or */
--primary: hsl(22, 85%, 52%); /* burnt orange — hue 22 */
/* or */
--primary: hsl(156, 60%, 38%); /* forest green — hue 156 */Also check your background color. Pure #ffffff and #000000 are AI defaults. A slightly warm white (hsl(35, 20%, 96%)) or a tinted dark (hsl(220, 15%, 8%)) looks intentional rather than generated.
Layer 3: Layout and spacing
AI tools reach for two layout defaults:
- Grid with 3 equal columns for features
- Centered single column for everything else
Equal-column grids signal "template." The fix is an asymmetric ratio. A 5fr/3fr split looks designed. A 2fr/3fr split with the visual element on the left looks like someone made a deliberate choice. A 7fr/4fr grid with the content on the left and a code block on the right looks like a product company.
/* AI default */
.features { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1rem; }
/* Distinctive */
.features { display: grid; grid-template-columns: 5fr 3fr; gap: 3rem 4rem; }For spacing, AI tools use a single gap value throughout (usually gap-4 or gap-6 in Tailwind). The fix is to vary your spacing deliberately — wider between sections, tighter within sections, and a specific rhythm that creates visual breathing room in some places and density in others.
Layer 4: Border radius
AI tools apply rounded-lg (0.5rem) to almost everything: buttons, cards, inputs, avatars, code blocks. When everything has the same corner radius, the site looks assembled from a kit.
The fix is two independent radius values: one for interactive elements (buttons, inputs) and one for containers (cards, panels). These should be different. A button at 4px with a card at 0px looks editorial. A button at 8px with a card at 2px looks product-like. A button at 3px with a card at 8px looks intentional.
/* AI default */
--radius: 0.5rem; /* applied to everything */
/* Distinctive */
--r-btn: 4px; /* small and direct */
--r-card: 0px; /* sharp, editorial */
/* or */
--r-btn: 6px;
--r-card: 14px; /* soft containers, precise buttons */Layer 5: Animation
AI tools use one animation pattern: opacity 0→1 combined with translateY(20px→0), duration 300ms, ease-in-out. This is the "fade-up" pattern. It is applied to every section, every card, every button on scroll. It reads as generated.
The fix is variation. Different elements should animate differently. Your hero headline might clip-reveal from left to right. Your feature list might stagger from the left axis (x: -30px). Your CTA section might scale up from 95% opacity. The variety signals that a human made choices, not that a template was applied.
/* AI default */
@keyframes fadeUp { from { opacity: 0; transform: translateY(20px); } }
.section { animation: fadeUp 300ms ease-in-out; }
/* Distinctive — vary the pattern per component type */
@keyframes clipReveal { from { clip-path: inset(0 100% 0 0); } to { clip-path: inset(0 0% 0 0); } }
@keyframes slideFromLeft { from { opacity: 0; transform: translateX(-30px); } to { opacity: 1; transform: translateX(0); } }
@keyframes scaleUp { from { opacity: 0; transform: scale(0.95); } to { opacity: 1; transform: scale(1); } }
h1 { animation: clipReveal 0.7s cubic-bezier(0.16, 1, 0.3, 1); }
.feature-list { animation: slideFromLeft 0.6s cubic-bezier(0.34, 1.56, 0.64, 1); }
.cta-section { animation: scaleUp 0.5s ease-out; }The fast path: scan first, fix what scores low
If you have a project already, scan it before you start editing. This tells you which of the five layers is worst:
npx sailop install
sailop scan ./srcThe output will score each dimension from A to F. Fix F scores first, then D scores. Most AI-generated projects score worst on color (F) and typography (D or F). Layout and animation are usually C-range. This tells you where to spend your time.
What not to change
When fixing an AI-generated site, there are things that are fine to leave:
Component structure: The JSX markup, the component hierarchy, the prop interfaces — all fine. You are changing the design tokens, not the component architecture.
Accessibility features: If the AI added ARIA labels, semantic HTML, and keyboard navigation, keep them. These are correct.
Responsive breakpoints: AI tools usually handle mobile correctly. Leave the responsive logic alone and only change the visual values at each breakpoint.
Content and copy: Unless the copy is also generic ("Seamlessly streamline your workflow with our AI-powered platform"), the content structure can stay. Rewrite the words, not the structure.
The result
A site that went through this process looks like this:
- Display font: Cormorant Garamond (serif, editorial)
- Body font: Karla (neutral sans, readable)
- Primary color: hsl(347, 72%, 48%) — deep rose
- Feature layout: 5fr 3fr grid
- Button radius: 4px, card radius: 0px
- Hero animation: clip-reveal
- Feature animation: x-slide with stagger
Put that next to a default AI output and they do not look like the same tool made them. That is the point.
Use Sailop to automate this
Sailop's transform command runs all five fixes automatically. It derives values from your project seed so every project gets a different result:
sailop transform ./src
# Rewrites: font imports, color variables, grid ratios, radius values, animation keyframes
# Does not touch: component logic, content, accessibility attributesThe scan command tells you what to fix. The transform command fixes it. For projects already in production, scan first and read the report — then decide which fixes to apply manually.
SHIP CODE THAT LOOKS INTENTIONAL
Scan your frontend for AI patterns. Generate a unique design system. Stop shipping the same blue gradient as everyone else.