Design Philosophy — Anti-AI-Slop Manifesto

This reference extends the core SKILL.md with deeper guidance on creating distinctive designs.

The Problem: AI Slop

Generic AI-generated designs share these telltale signs:

Typography Sins

  • Inter, Roboto, Arial everywhere
  • Timid weight ranges (400-600 only)
  • Minimal size progression (1.25x-1.5x)
  • No distinctive pairing strategy

Color Crimes

  • Purple/blue gradient on white (the cardinal sin)
  • 5+ evenly-distributed colors with no hierarchy
  • Muted, “safe” palettes that offend no one and delight no one
  • Gray backgrounds that signal “I gave up”

Layout Laziness

  • Everything centered
  • Perfectly symmetrical
  • Predictable card grids
  • No visual tension or interest

Motion Mediocrity

  • No animations at all, OR
  • Generic fade-in on every element
  • No orchestration or timing consideration

Background Boredom

  • Solid white
  • Solid light gray
  • Maybe a subtle gradient if feeling “bold”

The Solution: Intentional Design

Commit to an Extreme

The middle ground is where designs go to die. Pick a direction and push it:

Maximalism Done Right:

  • Dense, layered compositions
  • Overlapping elements with clear hierarchy
  • Rich textures and patterns
  • Multiple animations coordinated
  • Every pixel working

Minimalism Done Right:

  • Extreme restraint (3 colors max)
  • Typography as the star
  • Negative space as intentional element
  • Single, perfect animation
  • Nothing extraneous

Both require courage. Both create memorable designs.

Typography as Identity

Typography isn’t decoration — it’s the voice of the design.

Building a Type Hierarchy:

/* Display: Make a statement */
.display {
  font-family: 'Clash Display', sans-serif;
  font-size: clamp(3rem, 8vw, 6rem);
  font-weight: 600;
  letter-spacing: -0.02em;
  line-height: 1;
}
 
/* Heading: Support the display */
.heading {
  font-family: 'Satoshi', sans-serif;
  font-size: clamp(1.5rem, 3vw, 2.5rem);
  font-weight: 500;
  letter-spacing: -0.01em;
  line-height: 1.2;
}
 
/* Body: Effortless reading */
.body {
  font-family: 'Plus Jakarta Sans', sans-serif;
  font-size: 1rem;
  font-weight: 400;
  line-height: 1.6;
}
 
/* Mono: Technical credibility */
.mono {
  font-family: 'JetBrains Mono', monospace;
  font-size: 0.875rem;
  letter-spacing: 0;
}

Font Pairing Strategies:

StrategyDisplayBodyEffect
ContrastSerif (Playfair)Sans (Inter… no, Plus Jakarta)Editorial elegance
HarmonyGeometric (Satoshi)Geometric (General Sans)Modern consistency
TensionBrutalist (Clash)Humanist (Source Sans)Edgy but readable
TechnicalMono (JetBrains)Sans (IBM Plex Sans)Developer-focused

Color as Emotion

Color isn’t about “what looks nice” — it’s about what the design FEELS.

Building a Palette:

/* Dark, Confident, Premium */
:root {
  --bg-primary: #0a0a0a;
  --bg-secondary: #171717;
  --bg-tertiary: #262626;
  --text-primary: #fafafa;
  --text-secondary: #a3a3a3;
  --accent: #22c55e;  /* Confident green */
  --accent-subtle: rgba(34, 197, 94, 0.1);
}
 
/* Light, Warm, Approachable */
:root {
  --bg-primary: #fffbf5;
  --bg-secondary: #fff7ed;
  --bg-tertiary: #ffedd5;
  --text-primary: #1c1917;
  --text-secondary: #78716c;
  --accent: #ea580c;  /* Warm orange */
  --accent-subtle: rgba(234, 88, 12, 0.1);
}
 
/* High Contrast, Editorial */
:root {
  --bg-primary: #ffffff;
  --bg-secondary: #f5f5f5;
  --text-primary: #000000;
  --text-secondary: #525252;
  --accent: #dc2626;  /* Bold red */
  --accent-subtle: rgba(220, 38, 38, 0.05);
}

The 60-30-10 Rule:

  • 60% dominant (background)
  • 30% secondary (cards, sections)
  • 10% accent (CTAs, highlights)

Motion as Narrative

Animation tells a story. What’s your story?

Page Load Orchestration:

/* Hero elements enter in sequence */
.hero-badge {
  animation: fadeSlideUp 0.6s ease-out 0.1s both;
}
.hero-title {
  animation: fadeSlideUp 0.6s ease-out 0.2s both;
}
.hero-subtitle {
  animation: fadeSlideUp 0.6s ease-out 0.3s both;
}
.hero-cta {
  animation: fadeSlideUp 0.6s ease-out 0.4s both;
}
 
@keyframes fadeSlideUp {
  from {
    opacity: 0;
    transform: translateY(20px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

Scroll-Triggered Reveals:

// Intersection Observer for scroll animations
const observer = new IntersectionObserver((entries) => {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
      entry.target.classList.add('animate-in');
    }
  });
}, { threshold: 0.1 });
 
document.querySelectorAll('.reveal').forEach(el => observer.observe(el));

Hover States That Surprise:

.card {
  transition: transform 0.2s ease, box-shadow 0.2s ease;
}
 
.card:hover {
  transform: translateY(-4px);
  box-shadow: 
    0 20px 40px rgba(0, 0, 0, 0.1),
    0 0 0 1px rgba(255, 255, 255, 0.05);
}
 
/* Or more dramatic */
.card:hover {
  transform: scale(1.02) rotate(-0.5deg);
}

Backgrounds as Atmosphere

The background sets the mood before any content is read.

Gradient Mesh:

.gradient-mesh {
  background: 
    radial-gradient(at 40% 20%, hsla(28, 100%, 74%, 0.3) 0px, transparent 50%),
    radial-gradient(at 80% 0%, hsla(189, 100%, 56%, 0.2) 0px, transparent 50%),
    radial-gradient(at 0% 50%, hsla(355, 100%, 93%, 0.3) 0px, transparent 50%),
    radial-gradient(at 80% 50%, hsla(340, 100%, 76%, 0.2) 0px, transparent 50%),
    radial-gradient(at 0% 100%, hsla(269, 100%, 77%, 0.3) 0px, transparent 50%);
}

Noise Texture:

.noise::before {
  content: '';
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 400 400' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E");
  opacity: 0.03;
  pointer-events: none;
  z-index: 1000;
}

Dot Pattern:

.dots {
  background-image: radial-gradient(circle, #333 1px, transparent 1px);
  background-size: 20px 20px;
}

Glassmorphism:

.glass {
  background: rgba(255, 255, 255, 0.1);
  backdrop-filter: blur(10px);
  border: 1px solid rgba(255, 255, 255, 0.1);
  box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1);
}

Design Decision Framework

When stuck, ask these questions:

  1. What’s the ONE thing? — If users remember one element, what is it?
  2. Would I screenshot this? — Is there a moment worth sharing?
  3. Does it feel designed? — Or does it feel generated?
  4. What’s the emotion? — Confident? Playful? Serious? Luxurious?
  5. Is it brave? — Did I play it safe or commit to a direction?

Anti-Pattern Detection

Before shipping, scan for these:

Anti-PatternFix
Inter fontReplace with distinctive alternative
Purple gradientChoose contextual palette
All centeredAdd asymmetry or left-align
No animationsAdd orchestrated page load
Solid backgroundAdd texture, gradient, or pattern
Evenly spaced colorsApply 60-30-10 rule
Generic cardsAdd unique styling treatment
Default shadowsUse layered, atmospheric shadows

Remember: Claude is capable of extraordinary creative work. Don’t hold back.