Generate Awwwards-quality landing pages. Use when creating marketing sites, redesigning with premium aesthetics, or when user mentions "award-winning design."
Transform briefs into sites that win Awwwards Site of the Day.
What wins awards: A singular concept executed relentlessly. Not "many things done well" — ONE thing done unforgettably.
Before starting, ensure you have these. Ask if missing:
| Required | Why |
|---|---|
| Brand name | Identity foundation |
| Industry/product type | Cluster selection |
| Target audience | Tone calibration |
| 3 adjectives | Vibe direction |
| Competitors to avoid | Differentiation |
| Content scope | Section planning |
| Helpful If Provided | Why |
|---|---|
| Existing brand colors | Palette constraint |
| Typography preferences | Type direction |
| Reference sites they like | Style signal |
| Hero imagery/video | Asset planning |
| Key differentiator | Concept seed |
| Launch timeline | Complexity calibration |
If user provides a minimal brief: Extract what you can, then ask 2-3 targeted questions before proceeding.
Before any visuals, answer these:
See concepts/THESIS.md for the full framework.
Constrained choices from the design vocabulary:
| Decision | Options | Reference |
|---|---|---|
| Primary Vibe | cinematic, editorial, playful, brutal, minimal, luxury, futuristic, artisanal, experimental, bold, ethereal | reference/VIBES.md |
| Secondary Vibe | Creates tension with primary | Same |
| Motion Regime | subtle, kinetic-type, scroll-scene, immersive, parallax, cursor-led, minimal-motion | reference/VIBES.md |
| Materiality | glass, paper, metal, fabric, neon, organic | Same |
| Style Cluster | Match vibe combination to proven pattern | reference/CLUSTERS.md |
| Reference DNA | 2-3 sites to borrow specific elements from | reference/CORPUS.md |
Decide in this order — earlier decisions constrain later ones:
See taste/TYPOGRAPHY.md for type-first thinking.
Before generating code, pass these tests:
See taste/EVALUATION.md for the full rubric.
Winners don't do many things well — they do ONE thing unforgettably.
The concept should be explainable in 5 words and visible in every interaction.
Motion isn't "adding animations." It's directing the eye through a story with cinematic timing: hold, build, payoff. Elements enter in relationship to each other, not independently.
Every SOTY has ONE moment users remember and share:
This is the "screenshot moment" that gets posted to design communities.
Winners are brutally restrained (heavy whitespace, limited color) punctuated by controlled excess. The contrast creates drama. Restraint makes surprises land harder.
Type isn't decoration — it's architecture. Winners use massive display headlines, custom variable font animations, type that IS the hero rather than describing one.
Jury members browse at 100% zoom and notice the hover state on a 12px icon. Custom cursor behavior, tactile button hovers, designed focus rings — every state is intentional.
The fastest sites feel expensive. LCP < 1.5s, instant interactions, 60fps scroll. Loading should be branded. Slow shatters the illusion.
See reference/MOTION.md for the full pattern vocabulary (Smooth Scroll, Split Text, Scroll Pin, Parallax, Magnetic Hover, Clip-Path Reveal, etc.).
Always respect
prefers-reduced-motion. Replace with instant states.
| Anti-Pattern | Why It Fails |
|---|---|
| Generic SaaS Template | Hero + 3 features + pricing = forgettable |
| Motion Without Purpose | Animations must guide attention or provide feedback |
| Stock Photo Overload | Max 3-5 stock images; prefer custom/3D/illustration |
| Typography Neglect | Type is 80% of design — generic fonts = generic site |
| Scroll Hijacking | Scrub is fine; full takeover breaks trust |
| Ignoring Performance | LCP > 2.5s = immediate disqualification |
| Complexity Without Concept | Impressive tech with no soul = "cool demo, not a site" |
| Restraint Without Payoff | All quiet, no peaks = boring |
Speed is luxury. Slow shatters the illusion.
Targets:
How to achieve it:
| Technique | When |
|---|---|
| next/image with priority | Hero images |
| Lazy load below fold | All non-hero images |
| Dynamic import GSAP | Don't block initial render |
| Preload fonts | Display fonts in hero |
| Video poster + lazy | Hero video |
| Reduce ScrollTrigger count | Combine where possible |
| will-change sparingly | Only on animated elements |
Tradeoffs when needed:
| If... | Sacrifice... |
|---|---|
| Hero video kills LCP | Use image sequence or poster until interaction |
| Too many scroll triggers | Combine sections, reduce parallax layers |
| Custom fonts slow | Use system font stack for body, custom for display only |
| WebGL/3D needed | Lazy load, show fallback first |
Loading as branding: If load is unavoidable, brand it. Animated logo, progress bar with personality.
After generating code, run this loop:
npm run buildnpx lighthouse http://localhost:3000 --view --preset=desktopwill-changeWhen user provides assets: Use them. Optimize aggressively.
When assets are missing:
| Asset Type | Strategy |
|---|---|
| Hero image/video | Use placeholder with clear TODO comment |
| Product shots | Geometric shapes or branded gradients as placeholders |
| Icons | Lucide React (consistent, crisp) |
| Illustrations | Suggest style, use colored shapes as stand-in |
| Logos (client logos) | Gray rectangles with "LOGO" text |
Stock photo rules:
Illustration vs. photography:
| Vibe | Prefer |
|---|---|
| playful, artisanal | Illustration |
| luxury, cinematic, editorial | Photography |
| minimal, brutal | Neither — geometry, type, negative space |
| futuristic | 3D renders or abstract gradients |
Generate artifacts in chat, then code to disk:
Next.js 14+ App Router, Tailwind CSS, GSAP + ScrollTrigger, TypeScript.
Organize generated code consistently:
app/
├── layout.tsx # Root layout, fonts, metadata
├── page.tsx # Home page, imports sections
├── globals.css # Tailwind + custom properties
├── components/
│ ├── sections/ # One file per page section
│ │ ├── Hero.tsx
│ │ ├── Features.tsx
│ │ └── ...
│ ├── ui/ # Reusable primitives
│ │ ├── Button.tsx
│ │ ├── Magnetic.tsx # Magnetic hover wrapper
│ │ └── ...
│ └── motion/ # Animation utilities
│ ├── SplitText.tsx # Text splitting component
│ ├── ScrollPin.tsx # Scroll-pinned section
│ ├── Reveal.tsx # Intersection-based reveal
│ └── SmoothScroll.tsx # Lenis wrapper
├── hooks/
│ ├── useGSAP.ts # GSAP context hook
│ └── useReducedMotion.ts # prefers-reduced-motion
└── lib/
└── utils.ts # cn(), animation helpers
Section components: Each section is self-contained with its own animations. Initialize GSAP in useLayoutEffect with proper cleanup.
Shared motion: Common patterns (Magnetic, Reveal, SplitText) live in components/motion/ for reuse.
| Breakpoint | Approach |
|---|---|
| Mobile (<768px) | Simplified: reduce motion, stack layouts, touch-friendly |
| Tablet (768-1024px) | Hybrid: some motion, adapted layouts |
| Desktop (>1024px) | Full experience |
What to simplify on mobile:
Touch substitutes:
| Desktop | Mobile |
|---|---|
| Hover states | Tap states or remove |
| Magnetic hover | Remove |
| Cursor-led motion | Scroll-driven instead |
Mobile-first implementation: Write base styles for mobile, use md: and lg: for enhancements.
See reference/CHEATSHEET.md for Vibes→Clusters mapping, Type Pairings, and Color Mode guidance.
| File | Purpose |
|---|---|
| concepts/THESIS.md | Developing singular concept from brief |
| concepts/SIGNATURE.md | Designing the memorable moment |
| concepts/TENSION.md | Restraint and surprise principles |
| taste/TYPOGRAPHY.md | Type-first design thinking |
| taste/EVALUATION.md | Self-critique rubric |
| reference/VIBES.md | Vibe and motion vocabulary |
| reference/CLUSTERS.md | Style clusters with exemplars |
| reference/CORPUS.md | 30+ Awwwards winners with analysis |
| reference/MOTION.md | Motion pattern vocabulary |
| reference/CHEATSHEET.md | Vibes→Clusters, Type Pairings, Color Mode |
| examples/MAISON.md | Worked example: luxury watch brand |
| examples/FLUX.md | Worked example: developer tool |
| examples/BOUNCE.md | Worked example: playful consumer app |