De-Slopify Audit
A checklist-driven audit to strip AI-slop tells from a site and replace them with premium patterns. Extracted from comparing 12 VC-funded case studies against common AI-generated defaults.
When to invoke
- User says: "it looks like ChatGPT/Claude/v0 generated this"
- Site is ready-to-ship but feels generic
- Pre-launch final review
- Design review comparing against references
- When someone else sent you a "why does this look AI-made?" question
The 17-point audit
Run through each point. For every item marked ❌, apply the fix.
1. Background color
- ❌ Slop:
background: #ffffff or background: #f9fafb
- ✅ Fix: Warm off-white
#fafafa, #f7f7f5, #f5f2f0, or #fbfaf9
- See:
soft-gradient-dreamy skill, Rule 1
2. Primary typeface
- ❌ Slop:
font-family: Inter, sans-serif on every element
- ✅ Fix: Distinct display font + neutral body. PP Neue Montreal / Geist / Söhne / Instrument Serif + Inter/Geist body
- See:
typography-that-sells, Rule 1
3. Display letter-spacing
- ❌ Slop:
h1 { font-size: 64px; } with no letter-spacing
- ✅ Fix:
letter-spacing: -0.035em minimum on 48px+ headings; use px (-0.46px) for foundry precision
- See:
typography-that-sells, Rule 2
4. Display line-height
- ❌ Slop:
line-height: 1.5 on 60px headings
- ✅ Fix:
line-height: 1.0-1.1 on display, 1.3-1.5 on body
- See:
typography-that-sells, Rule 3
5. Body font-weight
- ❌ Slop:
font-weight: 400 or 500 on body
- ✅ Fix:
font-weight: 300 body paired with 500-600 display — maximum elegance contrast
- See:
typography-that-sells, Rule 4
6. Shadow color
- ❌ Slop:
box-shadow: 0 4px 6px rgba(0,0,0,0.1) — neutral black
- ✅ Fix: Tint shadow to match theme. Warm → plum
rgba(45,32,50,..) / rose rgba(100,63,63,..). Cool → blue-gray rgba(34,42,53,..). Match to your palette
- See:
soft-gradient-dreamy, Rule 2
7. Shadow layering
- ❌ Slop: single-layer
shadow-lg Tailwind default
- ✅ Fix: 3-8 layer stack: ring + short contact + medium ambient + long ambient + inset highlights (top & bottom)
- See:
soft-gradient-dreamy, Rule 3
8. Hero gradient
- ❌ Slop:
linear-gradient(135deg, #667eea, #764ba2) purple→blue diagonal
- ✅ Fix: 3+ stop warm gradient at a specific angle (70°, 78°, 145°, 195°). Copy from Incident/Cohere/AngelList
- See:
soft-gradient-dreamy, Rule 4
9. Border radius
- ❌ Slop:
rounded-md (8px) on every card, button, input, image
- ✅ Fix: Pick a radius architecture: binary (0/pill), asymmetric interlocking, or per-element variety (pill buttons + 12-20px cards + 2px chips)
- See:
spatial-rhythm-and-whitespace, Rule 1
10. Borders
- ❌ Slop:
border: 1px solid #e5e7eb
- ✅ Fix: Hairline at 4-10% alpha of theme-tinted dark color.
rgba(0,0,0,0.06) minimum, or rgba(12,38,77,0.04) navy-tinted
- See:
spatial-rhythm-and-whitespace, Rule 6
11. Section padding
- ❌ Slop:
py-12 (48px) or py-16 (64px) on every section
- ✅ Fix: 80-160px vertical section padding. Use
py-24 minimum; py-32 for hero; py-40 for editorial
- See:
spatial-rhythm-and-whitespace, Rule 2
12. Transition
- ❌ Slop:
transition: all 300ms ease-in-out
- ✅ Fix: Named cubic-bezier (
cubic-bezier(.215,.61,.355,1) or cubic-bezier(.4,0,.2,1)). Duration per interaction: 75ms press, 200ms hover, 600ms reveal
- See:
motion-and-micro-interactions, Rules 1-2
13. Button hover
- ❌ Slop:
hover:bg-blue-600 color-only hover
- ✅ Fix: Add
:active { transform: scale(0.95); } for press feedback; add shadow delta; orchestrate child translations
- See:
motion-and-micro-interactions, Rule 3
14. Card hover
- ❌ Slop:
hover:translate-y-[-4px] hover:shadow-xl
- ✅ Fix: Grow the shadow ring weight (8% → 10% alpha) and deepen contact shadows; keep the card stationary
- See:
motion-and-micro-interactions, Rule 5
15. Icons
- ❌ Slop: Lucide everything, 2px stroke, defaults
- ✅ Fix: Phosphor (with Bold/Fill weights) OR custom inline SVG OR icon font; 1.5px stroke standard; rounded caps
- See case studies: Outseta (Phosphor), Cohere (icon font), Cal (custom 1.5)
16. Gradient on buttons
- ❌ Slop: Primary button has a gradient background
- ✅ Fix: Flat solid color for button background + rich multi-layer shadow for depth. Gradient lives elsewhere (hero, art plates, text-clip)
- See: Amplemarket, Cal, Cohere — all flat-color buttons with stacked shadows
17. Eyebrow labels
- ❌ Slop:
<span class="text-xs uppercase">Features</span>
- ✅ Fix: Monospace font, wider positive tracking (0.1-0.2em), optionally color-muted
.eyebrow {
font-family: 'Geist Mono', 'Fragment Mono', monospace;
font-size: 11px;
letter-spacing: 0.14em;
text-transform: uppercase;
color: var(--text-muted);
}
Quick-scan grep commands
Run these against your codebase to find slop patterns:
# Find pure-white backgrounds
grep -rn "background.*#fff\b\|#ffffff\|bg-white\b" --include="*.{css,tsx,jsx,html,vue,svelte}" .
# Find generic ease-in-out 300ms
grep -rn "ease-in-out\|duration-300\|0\.3s ease" --include="*.{css,tsx,jsx}" .
# Find rounded-md monotone
grep -rn "rounded-md\|border-radius:\s*8px" --include="*.{css,tsx,jsx,html}" .
# Find the purple→blue gradient
grep -rn "#667eea\|#764ba2\|from-purple.*to-blue\|from-blue.*to-purple" --include="*.{css,tsx,jsx}" .
# Find single-layer shadows
grep -rn "box-shadow:\s*0 4px 6px\|shadow-md\|shadow-lg" --include="*.{css,tsx,jsx}" .
# Find Inter everywhere
grep -rn "font-family.*Inter\|font-sans" --include="*.{css,tsx,jsx}" . | wc -l
# Find translateY hover cards
grep -rn "hover:.*translate-y\|hover:-translate" --include="*.{css,tsx,jsx}" .
# Find 48/64px section padding
grep -rn "py-12\|py-16\|padding-block:\s*48\|padding-block:\s*64" --include="*.{css,tsx,jsx,html}" .
# Find plain black shadows
grep -rn "rgba(0,\s*0,\s*0," --include="*.{css,tsx,jsx}" .
# Find color-only button hover
grep -rn "hover:bg-\|hover:background" --include="*.{css,tsx,jsx}" .
Audit report template
Run through the site, mark each with ✅ / ⚠️ / ❌:
## De-Slopify Audit: <site-name>
Background: [ ] (if ❌: swap #fff → #fafafa/#f7f7f5)
Typeface: [ ] (if ❌: display font + body font split)
Display tracking: [ ] (if ❌: -0.035em minimum)
Display line-height: [ ] (if ❌: ≤1.1 on display)
Body weight: [ ] (if ❌: test weight 300)
Shadow tint: [ ] (if ❌: tint to theme)
Shadow layering: [ ] (if ❌: 3-8 layer stack)
Hero gradient: [ ] (if ❌: 3+ stop warm, non-135° angle)
Border radius system: [ ] (if ❌: pick architecture)
Border colors: [ ] (if ❌: hairline at 4-10% alpha)
Section padding: [ ] (if ❌: 80-160px)
Transition easing: [ ] (if ❌: named cubic-bezier)
Transition duration: [ ] (if ❌: per-interaction durations)
Button hover: [ ] (if ❌: add :active scale, child orchestration)
Card hover: [ ] (if ❌: shadow growth, no translateY)
Icon style: [ ] (if ❌: 1.5px stroke, not Lucide defaults)
Button background: [ ] (if ❌: flat color + rich shadow)
Eyebrow labels: [ ] (if ❌: mono + wide tracking)
Score: X / 18
The 5 most damaging AI tells (fix these first)
If you can only fix 5 things, fix these — they move the design from "AI" to "designed":
- Background color — swap
#fff → #fafafa/#f7f7f5 (60 seconds, massive impact)
- Display font — add ONE distinctive typeface for headings
- Tracking + line-height on h1/h2 —
-0.035em / line-height: 1.0 (huge perception shift)
- Shadow tint + layering — drop in a 5-layer tinted shadow system
- Button :active state — add
scale(0.95) press feedback
Before/after snippets
Before (AI slop)
body { background: #ffffff; font-family: Inter, sans-serif; color: #333; }
h1 { font-size: 60px; font-weight: 700; }
.btn { background: #3b82f6; color: white; padding: 12px 24px; border-radius: 8px;
transition: all 0.3s ease-in-out; }
.btn:hover { background: #2563eb; }
.card { background: white; border: 1px solid #e5e7eb; border-radius: 8px;
box-shadow: 0 4px 6px rgba(0,0,0,0.1); padding: 24px; }
.hero { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); padding: 64px 0; }
After (de-slopified)
body {
background: #f7f7f5;
font-family: 'Inter', system-ui, sans-serif;
font-weight: 300;
color: #222221;
}
h1 {
font-family: 'PP Neue Montreal', 'Söhne', system-ui, sans-serif;
font-size: clamp(3rem, 2rem + 5vw, 4.5rem);
font-weight: 500;
line-height: 1.0;
letter-spacing: -0.035em;
}
.btn {
background: #222221;
color: #fff;
padding: 12px 20px 13px 24px;
border-radius: 9999px;
font-weight: 500;
box-shadow:
0 1px 2px rgba(45,32,50,0.05),
inset 0 10px 24px -10px rgba(255,255,255,0.4);
transition: all 75ms ease-in;
}
.btn:hover { transition-duration: 200ms; }
.btn:active { transform: scale(0.97); box-shadow: 0 1px 2px rgba(45,32,50,0.05); }
.card {
background: #fff;
border-radius: 12px;
padding: 24px;
box-shadow:
0 0 0 1px rgba(45,32,50,0.06),
0 2px 6px -2px rgba(45,32,50,0.08),
0 16px 40px -8px rgba(45,32,50,0.06),
inset 0 .5px .5px rgba(255,255,255,0.4);
transition: box-shadow 200ms cubic-bezier(.4,0,.2,1);
}
.card:hover { box-shadow:
0 0 0 1px rgba(45,32,50,0.10),
0 4px 12px -2px rgba(45,32,50,0.10),
0 24px 56px -12px rgba(45,32,50,0.10),
inset 0 .5px .5px rgba(255,255,255,0.4); }
.hero {
background:
linear-gradient(180deg, rgba(224,246,255,0.1) 0%, transparent 25%,
transparent 90%, rgba(224,246,255,0.1) 100%),
#f7f7f5;
padding-block: 140px 96px;
}
Related skills
After running this audit, escalate to:
typography-that-sells for deep type work
soft-gradient-dreamy for shadow/gradient systems
motion-and-micro-interactions for animation
spatial-rhythm-and-whitespace for layout
add-signature-moment once the baseline is polished
1---2name: de-slopify-audit3description: Scan a site for AI-slop defaults and replace them with premium patterns. Detects generic giveaways (Inter everywhere,4---56# De-Slopify Audit78A checklist-driven audit to strip AI-slop tells from a site and replace them with premium patterns. Extracted from comparing 12 VC-funded case studies against common AI-generated defaults.910## When to invoke1112- User says: "it looks like ChatGPT/Claude/v0 generated this"13- Site is ready-to-ship but feels generic14- Pre-launch final review15- Design review comparing against references16- When someone else sent you a "why does this look AI-made?" question1718## The 17-point audit1920Run through each point. For every item marked ❌, apply the fix.2122### 1. Background color23- ❌ **Slop**: `background: #ffffff` or `background: #f9fafb`24- ✅ **Fix**: Warm off-white `#fafafa`, `#f7f7f5`, `#f5f2f0`, or `#fbfaf9`25- See: `soft-gradient-dreamy` skill, Rule 12627### 2. Primary typeface28- ❌ **Slop**: `font-family: Inter, sans-serif` on every element29- ✅ **Fix**: Distinct display font + neutral body. PP Neue Montreal / Geist / Söhne / Instrument Serif + Inter/Geist body30- See: `typography-that-sells`, Rule 13132### 3. Display letter-spacing33- ❌ **Slop**: `h1 { font-size: 64px; }` with no letter-spacing34- ✅ **Fix**: `letter-spacing: -0.035em` minimum on 48px+ headings; use px (`-0.46px`) for foundry precision35- See: `typography-that-sells`, Rule 23637### 4. Display line-height38- ❌ **Slop**: `line-height: 1.5` on 60px headings39- ✅ **Fix**: `line-height: 1.0-1.1` on display, `1.3-1.5` on body40- See: `typography-that-sells`, Rule 34142### 5. Body font-weight43- ❌ **Slop**: `font-weight: 400` or `500` on body44- ✅ **Fix**: `font-weight: 300` body paired with 500-600 display — maximum elegance contrast45- See: `typography-that-sells`, Rule 44647### 6. Shadow color48- ❌ **Slop**: `box-shadow: 0 4px 6px rgba(0,0,0,0.1)` — neutral black49- ✅ **Fix**: Tint shadow to match theme. Warm → plum `rgba(45,32,50,..)` / rose `rgba(100,63,63,..)`. Cool → blue-gray `rgba(34,42,53,..)`. Match to your palette50- See: `soft-gradient-dreamy`, Rule 25152### 7. Shadow layering53- ❌ **Slop**: single-layer `shadow-lg` Tailwind default54- ✅ **Fix**: 3-8 layer stack: ring + short contact + medium ambient + long ambient + inset highlights (top & bottom)55- See: `soft-gradient-dreamy`, Rule 35657### 8. Hero gradient58- ❌ **Slop**: `linear-gradient(135deg, #667eea, #764ba2)` purple→blue diagonal59- ✅ **Fix**: 3+ stop warm gradient at a specific angle (70°, 78°, 145°, 195°). Copy from Incident/Cohere/AngelList60- See: `soft-gradient-dreamy`, Rule 46162### 9. Border radius63- ❌ **Slop**: `rounded-md` (8px) on every card, button, input, image64- ✅ **Fix**: Pick a radius architecture: binary (0/pill), asymmetric interlocking, or per-element variety (pill buttons + 12-20px cards + 2px chips)65- See: `spatial-rhythm-and-whitespace`, Rule 16667### 10. Borders68- ❌ **Slop**: `border: 1px solid #e5e7eb`69- ✅ **Fix**: Hairline at 4-10% alpha of theme-tinted dark color. `rgba(0,0,0,0.06)` minimum, or `rgba(12,38,77,0.04)` navy-tinted70- See: `spatial-rhythm-and-whitespace`, Rule 67172### 11. Section padding73- ❌ **Slop**: `py-12` (48px) or `py-16` (64px) on every section74- ✅ **Fix**: 80-160px vertical section padding. Use `py-24` minimum; `py-32` for hero; `py-40` for editorial75- See: `spatial-rhythm-and-whitespace`, Rule 27677### 12. Transition78- ❌ **Slop**: `transition: all 300ms ease-in-out`79- ✅ **Fix**: Named cubic-bezier (`cubic-bezier(.215,.61,.355,1)` or `cubic-bezier(.4,0,.2,1)`). Duration per interaction: 75ms press, 200ms hover, 600ms reveal80- See: `motion-and-micro-interactions`, Rules 1-28182### 13. Button hover83- ❌ **Slop**: `hover:bg-blue-600` color-only hover84- ✅ **Fix**: Add `:active { transform: scale(0.95); }` for press feedback; add shadow delta; orchestrate child translations85- See: `motion-and-micro-interactions`, Rule 38687### 14. Card hover88- ❌ **Slop**: `hover:translate-y-[-4px] hover:shadow-xl`89- ✅ **Fix**: Grow the shadow ring weight (8% → 10% alpha) and deepen contact shadows; keep the card stationary90- See: `motion-and-micro-interactions`, Rule 59192### 15. Icons93- ❌ **Slop**: Lucide everything, 2px stroke, defaults94- ✅ **Fix**: Phosphor (with Bold/Fill weights) OR custom inline SVG OR icon font; 1.5px stroke standard; rounded caps95- See case studies: Outseta (Phosphor), Cohere (icon font), Cal (custom 1.5)9697### 16. Gradient on buttons98- ❌ **Slop**: Primary button has a gradient background99- ✅ **Fix**: Flat solid color for button background + rich multi-layer shadow for depth. Gradient lives elsewhere (hero, art plates, text-clip)100- See: Amplemarket, Cal, Cohere — all flat-color buttons with stacked shadows101102### 17. Eyebrow labels103- ❌ **Slop**: `<span class="text-xs uppercase">Features</span>`104- ✅ **Fix**: Monospace font, wider positive tracking (0.1-0.2em), optionally color-muted105```css106.eyebrow {107 font-family: 'Geist Mono', 'Fragment Mono', monospace;108 font-size: 11px;109 letter-spacing: 0.14em;110 text-transform: uppercase;111 color: var(--text-muted);112}113```114115## Quick-scan grep commands116117Run these against your codebase to find slop patterns:118119```bash120# Find pure-white backgrounds121grep -rn "background.*#fff\b\|#ffffff\|bg-white\b" --include="*.{css,tsx,jsx,html,vue,svelte}" .122123# Find generic ease-in-out 300ms124grep -rn "ease-in-out\|duration-300\|0\.3s ease" --include="*.{css,tsx,jsx}" .125126# Find rounded-md monotone127grep -rn "rounded-md\|border-radius:\s*8px" --include="*.{css,tsx,jsx,html}" .128129# Find the purple→blue gradient130grep -rn "#667eea\|#764ba2\|from-purple.*to-blue\|from-blue.*to-purple" --include="*.{css,tsx,jsx}" .131132# Find single-layer shadows133grep -rn "box-shadow:\s*0 4px 6px\|shadow-md\|shadow-lg" --include="*.{css,tsx,jsx}" .134135# Find Inter everywhere136grep -rn "font-family.*Inter\|font-sans" --include="*.{css,tsx,jsx}" . | wc -l137138# Find translateY hover cards139grep -rn "hover:.*translate-y\|hover:-translate" --include="*.{css,tsx,jsx}" .140141# Find 48/64px section padding142grep -rn "py-12\|py-16\|padding-block:\s*48\|padding-block:\s*64" --include="*.{css,tsx,jsx,html}" .143144# Find plain black shadows145grep -rn "rgba(0,\s*0,\s*0," --include="*.{css,tsx,jsx}" .146147# Find color-only button hover148grep -rn "hover:bg-\|hover:background" --include="*.{css,tsx,jsx}" .149```150151## Audit report template152153Run through the site, mark each with ✅ / ⚠️ / ❌:154155```156## De-Slopify Audit: <site-name>157158Background: [ ] (if ❌: swap #fff → #fafafa/#f7f7f5)159Typeface: [ ] (if ❌: display font + body font split)160Display tracking: [ ] (if ❌: -0.035em minimum)161Display line-height: [ ] (if ❌: ≤1.1 on display)162Body weight: [ ] (if ❌: test weight 300)163Shadow tint: [ ] (if ❌: tint to theme)164Shadow layering: [ ] (if ❌: 3-8 layer stack)165Hero gradient: [ ] (if ❌: 3+ stop warm, non-135° angle)166Border radius system: [ ] (if ❌: pick architecture)167Border colors: [ ] (if ❌: hairline at 4-10% alpha)168Section padding: [ ] (if ❌: 80-160px)169Transition easing: [ ] (if ❌: named cubic-bezier)170Transition duration: [ ] (if ❌: per-interaction durations)171Button hover: [ ] (if ❌: add :active scale, child orchestration)172Card hover: [ ] (if ❌: shadow growth, no translateY)173Icon style: [ ] (if ❌: 1.5px stroke, not Lucide defaults)174Button background: [ ] (if ❌: flat color + rich shadow)175Eyebrow labels: [ ] (if ❌: mono + wide tracking)176177Score: X / 18178```179180## The 5 most damaging AI tells (fix these first)181182If you can only fix 5 things, fix these — they move the design from "AI" to "designed":1831841. **Background color** — swap `#fff` → `#fafafa`/`#f7f7f5` (60 seconds, massive impact)1852. **Display font** — add ONE distinctive typeface for headings1863. **Tracking + line-height on h1/h2** — `-0.035em / line-height: 1.0` (huge perception shift)1874. **Shadow tint + layering** — drop in a 5-layer tinted shadow system1885. **Button :active state** — add `scale(0.95)` press feedback189190## Before/after snippets191192### Before (AI slop)193```css194body { background: #ffffff; font-family: Inter, sans-serif; color: #333; }195h1 { font-size: 60px; font-weight: 700; }196.btn { background: #3b82f6; color: white; padding: 12px 24px; border-radius: 8px;197 transition: all 0.3s ease-in-out; }198.btn:hover { background: #2563eb; }199.card { background: white; border: 1px solid #e5e7eb; border-radius: 8px;200 box-shadow: 0 4px 6px rgba(0,0,0,0.1); padding: 24px; }201.hero { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); padding: 64px 0; }202```203204### After (de-slopified)205```css206body {207 background: #f7f7f5;208 font-family: 'Inter', system-ui, sans-serif;209 font-weight: 300;210 color: #222221;211}212h1 {213 font-family: 'PP Neue Montreal', 'Söhne', system-ui, sans-serif;214 font-size: clamp(3rem, 2rem + 5vw, 4.5rem);215 font-weight: 500;216 line-height: 1.0;217 letter-spacing: -0.035em;218}219.btn {220 background: #222221;221 color: #fff;222 padding: 12px 20px 13px 24px;223 border-radius: 9999px;224 font-weight: 500;225 box-shadow:226 0 1px 2px rgba(45,32,50,0.05),227 inset 0 10px 24px -10px rgba(255,255,255,0.4);228 transition: all 75ms ease-in;229}230.btn:hover { transition-duration: 200ms; }231.btn:active { transform: scale(0.97); box-shadow: 0 1px 2px rgba(45,32,50,0.05); }232.card {233 background: #fff;234 border-radius: 12px;235 padding: 24px;236 box-shadow:237 0 0 0 1px rgba(45,32,50,0.06),238 0 2px 6px -2px rgba(45,32,50,0.08),239 0 16px 40px -8px rgba(45,32,50,0.06),240 inset 0 .5px .5px rgba(255,255,255,0.4);241 transition: box-shadow 200ms cubic-bezier(.4,0,.2,1);242}243.card:hover { box-shadow:244 0 0 0 1px rgba(45,32,50,0.10),245 0 4px 12px -2px rgba(45,32,50,0.10),246 0 24px 56px -12px rgba(45,32,50,0.10),247 inset 0 .5px .5px rgba(255,255,255,0.4); }248.hero {249 background:250 linear-gradient(180deg, rgba(224,246,255,0.1) 0%, transparent 25%,251 transparent 90%, rgba(224,246,255,0.1) 100%),252 #f7f7f5;253 padding-block: 140px 96px;254}255```256257## Related skills258259After running this audit, escalate to:260- **`typography-that-sells`** for deep type work261- **`soft-gradient-dreamy`** for shadow/gradient systems262- **`motion-and-micro-interactions`** for animation263- **`spatial-rhythm-and-whitespace`** for layout264- **`add-signature-moment`** once the baseline is polished