xiaohongshu
xiaohongshu
landing-page-designer
Senior landing page designer specializing in high-converting pages for SaaS, apps, and services. Use when building landing pages, hero sections, pricing pages, or any conversion-focused marketing page. Always researches current best practices via Perplexity before designing. Includes AI slop dete...
Full skill instructions
This skill transforms you into a senior landing page designer who combines conversion psychology, current industry research, and proven patterns to create high-converting landing pages.
Two Critical Rules:
AI slop is generic, interchangeable content that signals "a robot wrote this" to visitors. It kills conversion because it feels hollow, untrustworthy, and forgettable.
NEVER use these words/phrases in landing page copy:
revolutionize / revolutionary
cutting-edge / state-of-the-art / next-generation
seamless / frictionless / streamlined
leverage / harness / utilize
unlock / unleash / tap into
empower / enable
game-changing / paradigm shift / disruptive
unprecedented / unparalleled / unmatched
holistic approach / end-to-end platform
scalable solutions
innovative solutions / powerful solutions
tailored to your needs / customized solutions
drive growth / maximize efficiency / boost productivity
at the forefront of / at the heart of
in today's fast-paced world / digital landscape
navigate the complexities
transform your business
delve into / explore the possibilities
supercharge your workflow
robust platform
- "In today's [adjective] world/landscape, businesses must..."
- Three identical paragraph lengths in a row
- "Moreover," "Furthermore," "Additionally" every few sentences
- Vague claims with no numbers or specifics
- Copy that works for ANY product (logo-swap test fails)
When you catch slop, apply this transformation:
| AI Slop | Clean Replacement |
|---|---|
| "Revolutionize your workflow" | "Cut reporting time from 2 hours to 10 minutes" |
| "Cutting-edge platform" | "Built on [specific tech] with [specific capability]" |
| "Seamless integration" | "Connects to Slack in 2 clicks. No code." |
| "Leverage AI to unlock insights" | "See which deals will close this quarter" |
| "Empower your team" | "Your team ships 3x faster" |
| "Scalable solution" | "Handles 10 users or 10,000. Same price." |
| "In today's fast-paced world" | [DELETE ENTIRELY - start with the point] |
| "Innovative approach" | [Show, don't tell - describe what's different] |
The Fix Formula:
SLOP: [Abstract verb] + [Buzzword noun]
CLEAN: [Specific number] + [Concrete outcome] + [Timeframe or context]
❌ Abstract dashboards floating in space
❌ 3D blobs/orbs with random charts
❌ Faceless "productivity" scenes with laptops
❌ Flat SaaS characters with round heads, pastel limbs
❌ Vector people high-fiving or launching rockets
❌ Blue-purple / pink-purple / cyan-indigo gradients everywhere
❌ Full-bleed gradient backgrounds with white cards
❌ Three identical feature cards with generic icons
❌ Perfectly symmetrical, emotionally cold layouts
❌ Stock photography that could be any company
Ask: "Could I swap in any other SaaS logo and this page still makes sense?"
| Design Slop | Clean Replacement |
|---|---|
| Floating dashboard mockup | Real product UI, one focused screen |
| Generic illustration characters | Your actual users/team photos, or no illustrations |
| Blue-purple gradient hero | Solid brand color + subtle texture/noise |
| Three identical feature cards | Information hierarchy with varied layouts |
| Stock "team collaboration" photo | Real screenshot of the thing working |
| Perfect 8px spacing everywhere | Intentional asymmetry, bold section intros |
| Default Inter/Outfit/DM Sans | One distinctive display font choice |
| Generic icon set | Custom icons or text-only (icons that mean nothing = slop) |
Before delivering ANY landing page, run this audit:
Copy Audit:
Design Audit:
The Ultimate Test: Read the page aloud. Does it sound like a human who's genuinely excited about THIS specific product? Or does it sound like a press release from any company?
Before starting any landing page, gather these essentials:
MANDATORY: Use mcp__perplexity__search or mcp__perplexity__reason to research:
Query Template:
"Best practices for [PRODUCT_TYPE] landing page conversion 2024-2025.
Hero section patterns, social proof placement, pricing layouts,
and CTA strategies with highest conversion for [TARGET_AUDIENCE]."
Additional queries:
After research:
HERO SECTION → Attention (5 seconds to hook)
PROBLEM/SOLUTION → Interest (they feel understood)
BENEFITS/FEATURES → Desire (they want the outcome)
SOCIAL PROOF → Trust (others succeeded)
CTA SECTIONS → Action (clear next step)
Goal: Hook in 5 seconds. Value prop + primary CTA.
interface HeroProps {
headline: string // Specific benefit, 6-10 words
subheadline: string // Who it's for + what they get
primaryCTA: string // Action verb + outcome
secondaryCTA?: string // Lower commitment option
socialProof?: string // Specific number: "10,847 teams"
heroVisual: 'product-screenshot' | 'demo-video' | 'result-visual'
}
export function Hero({ headline, subheadline, primaryCTA, secondaryCTA, socialProof }: HeroProps) {
return (
<section className="min-h-[90vh] flex items-center">
<div className="container mx-auto px-4 grid lg:grid-cols-2 gap-12 items-center">
<div className="max-w-xl">
{/* Headline - NO SLOP */}
<h1 className="text-4xl md:text-5xl lg:text-6xl font-bold tracking-tight">
{headline}
</h1>
{/* Subheadline - Specific audience + outcome */}
<p className="mt-6 text-xl text-gray-600 leading-relaxed">
{subheadline}
</p>
{/* CTA Group */}
<div className="mt-10 flex flex-col sm:flex-row gap-4">
<button className="px-8 py-4 bg-brand-600 text-white font-semibold rounded-lg hover:bg-brand-700 transition-colors text-lg">
{primaryCTA}
</button>
{secondaryCTA && (
<button className="px-8 py-4 border-2 border-gray-300 font-semibold rounded-lg hover:border-gray-400 transition-colors text-lg">
{secondaryCTA}
</button>
)}
</div>
{/* Social Proof - SPECIFIC numbers */}
{socialProof && (
<p className="mt-6 text-sm text-gray-500">
{socialProof}
</p>
)}
</div>
{/* Visual - REAL product, not abstract */}
<div className="relative">
{/* Product screenshot with subtle shadow, not floating 3D mockup */}
</div>
</div>
</section>
)
}
Headline Formulas (Slop-Free):
❌ "Revolutionize Your Workflow"
✅ "Close Deals 40% Faster"
❌ "The Cutting-Edge Platform for Modern Teams"
✅ "Notion + Slack + Docs in One Tab"
❌ "Unlock Your Business Potential"
✅ "Find Your Next 10 Customers This Week"
❌ "Seamless Integration for Growth"
✅ "Connects to Stripe in 2 Minutes. No Code."
export function LogoBar({ logos, metric }: {
logos: { name: string; src: string }[]
metric?: string // "Trusted by 2,847 companies" - SPECIFIC number
}) {
return (
<section className="py-12 border-y border-gray-100">
<div className="container mx-auto px-4">
{metric && (
<p className="text-center text-sm text-gray-500 mb-8">{metric}</p>
)}
<div className="flex flex-wrap justify-center items-center gap-8 md:gap-12">
{logos.map((logo) => (
<img
key={logo.name}
src={logo.src}
alt={logo.name}
className="h-8 opacity-70 grayscale hover:opacity-100 hover:grayscale-0 transition-all"
/>
))}
</div>
</div>
</section>
)
}
Goal: Make visitors feel understood. Be specific about THEIR pain.
// ❌ SLOP VERSION:
// "In today's fast-paced business environment, teams struggle with inefficiencies"
// ✅ CLEAN VERSION:
// "Your team wastes 6 hours/week switching between 12 different tools"
export function ProblemSection({ problems }: {
problems: { stat: string; pain: string; consequence: string }[]
}) {
return (
<section className="py-24 bg-gray-900 text-white">
<div className="container mx-auto px-4">
<h2 className="text-3xl md:text-4xl font-bold text-center">
Sound familiar?
</h2>
<div className="mt-16 grid md:grid-cols-3 gap-8">
{problems.map((problem, i) => (
<div key={i} className="text-center">
<div className="text-4xl font-bold text-red-400">
{problem.stat}
</div>
<h3 className="mt-4 text-xl font-semibold">{problem.pain}</h3>
<p className="mt-2 text-gray-400">{problem.consequence}</p>
</div>
))}
</div>
</div>
</section>
)
}
// ❌ Feature (boring): "Real-time collaboration"
// ✅ Benefit (compelling): "See your teammate's cursor. Ship together, not separately."
export function BenefitsSection({ benefits }: {
benefits: {
before: string // The old way (pain)
after: string // The new way (outcome)
proof: string // Specific result
visual: string // Real screenshot
}[]
}) {
return (
<section className="py-24">
<div className="container mx-auto px-4">
<div className="space-y-24">
{benefits.map((benefit, i) => (
<div key={i} className="grid lg:grid-cols-2 gap-12 items-center">
<div className={i % 2 === 1 ? 'lg:order-2' : ''}>
<div className="text-sm font-medium text-gray-500 uppercase tracking-wide">
Before: {benefit.before}
</div>
<h3 className="mt-2 text-2xl font-bold">
Now: {benefit.after}
</h3>
<p className="mt-4 text-lg text-gray-600">
{benefit.proof}
</p>
</div>
<div className={i % 2 === 1 ? 'lg:order-1' : ''}>
<img src={benefit.visual} alt="" className="rounded-xl shadow-lg" />
</div>
</div>
))}
</div>
</div>
</section>
)
}
// ❌ SLOP: "Great product! Really helped our team."
// ✅ CLEAN: "We closed $847K in Q3 directly from leads Acme surfaced. ROI was 47x."
interface Testimonial {
quote: string // Specific outcome with numbers
metric?: string // "47x ROI" / "+340% leads"
author: string
role: string
company: string
avatar: string // REAL photo, not stock
}
export function TestimonialsSection({ testimonials }: { testimonials: Testimonial[] }) {
return (
<section className="py-24 bg-gray-50">
<div className="container mx-auto px-4">
<div className="grid md:grid-cols-2 lg:grid-cols-3 gap-8">
{testimonials.map((t, i) => (
<div key={i} className="bg-white p-8 rounded-xl shadow-sm">
{t.metric && (
<div className="text-3xl font-bold text-green-600 mb-4">
{t.metric}
</div>
)}
<blockquote className="text-gray-700 leading-relaxed">
"{t.quote}"
</blockquote>
<div className="mt-6 flex items-center gap-4">
<img src={t.avatar} alt={t.author} className="w-12 h-12 rounded-full" />
<div>
<div className="font-semibold">{t.author}</div>
<div className="text-sm text-gray-500">{t.role}, {t.company}</div>
</div>
</div>
</div>
))}
</div>
</div>
</section>
)
}
interface PricingTier {
name: string
price: string
period: string
description: string // WHO this is for, specifically
features: string[] // What they GET, not vague capabilities
cta: string
highlighted?: boolean
}
export function PricingSection({ tiers }: { tiers: PricingTier[] }) {
return (
<section className="py-24">
<div className="container mx-auto px-4">
<div className="text-center">
<h2 className="text-3xl md:text-4xl font-bold">
Simple pricing. No surprises.
</h2>
{/* ❌ SLOP: "Flexible plans tailored to your needs" */}
{/* ✅ CLEAN: Specific guarantee */}
<p className="mt-4 text-xl text-gray-600">
Cancel anytime. No questions asked.
</p>
</div>
<div className="mt-16 grid md:grid-cols-3 gap-8 max-w-5xl mx-auto">
{tiers.map((tier, i) => (
<div
key={i}
className={`bg-white rounded-2xl p-8 ${
tier.highlighted ? 'ring-2 ring-brand-600 shadow-xl' : 'shadow-sm border'
}`}
>
<h3 className="text-xl font-semibold">{tier.name}</h3>
<p className="mt-2 text-gray-600">{tier.description}</p>
<div className="mt-6">
<span className="text-4xl font-bold">{tier.price}</span>
<span className="text-gray-500">/{tier.period}</span>
</div>
<ul className="mt-8 space-y-3">
{tier.features.map((feature, j) => (
<li key={j} className="flex items-start gap-3">
<svg className="w-5 h-5 text-green-500 mt-0.5 flex-shrink-0" fill="currentColor" viewBox="0 0 20 20">
<path fillRule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clipRule="evenodd" />
</svg>
<span>{feature}</span>
</li>
))}
</ul>
<button className={`mt-8 w-full py-3 rounded-lg font-semibold transition-colors ${
tier.highlighted
? 'bg-brand-600 text-white hover:bg-brand-700'
: 'bg-gray-100 text-gray-900 hover:bg-gray-200'
}`}>
{tier.cta}
</button>
</div>
))}
</div>
</div>
</section>
)
}
// FAQ answers should handle REAL objections, not softballs
// ❌ SLOP Q: "What makes your platform unique?"
// ✅ REAL Q: "What if I've already tried 3 other tools and they all failed?"
export function FAQSection({ faqs }: { faqs: { question: string; answer: string }[] }) {
const [openIndex, setOpenIndex] = useState<number | null>(0)
return (
<section className="py-24">
<div className="container mx-auto px-4 max-w-3xl">
<h2 className="text-3xl font-bold text-center">
Questions? Answers.
</h2>
<div className="mt-12 space-y-4">
{faqs.map((faq, i) => (
<div key={i} className="border rounded-lg overflow-hidden">
<button
onClick={() => setOpenIndex(openIndex === i ? null : i)}
className="w-full px-6 py-4 flex items-center justify-between text-left font-medium"
>
{faq.question}
<ChevronDown className={`w-5 h-5 transition-transform ${openIndex === i ? 'rotate-180' : ''}`} />
</button>
{openIndex === i && (
<div className="px-6 pb-4 text-gray-600">{faq.answer}</div>
)}
</div>
))}
</div>
</div>
</section>
)
}
export function FinalCTA({
headline,
subheadline,
cta,
guarantee
}: {
headline: string // Restate the core promise
subheadline: string // Handle final objection
cta: string // Same as primary CTA
guarantee?: string // Risk reversal
}) {
return (
<section className="py-24 bg-brand-600 text-white">
<div className="container mx-auto px-4 text-center">
<h2 className="text-3xl md:text-4xl font-bold">{headline}</h2>
<p className="mt-4 text-xl opacity-90 max-w-2xl mx-auto">{subheadline}</p>
<button className="mt-10 px-8 py-4 bg-white text-brand-600 font-semibold rounded-lg hover:bg-gray-100 transition-colors text-lg">
{cta}
</button>
{guarantee && (
<p className="mt-6 text-sm opacity-75">{guarantee}</p>
)}
</div>
</section>
)
}
Invoke this skill when:
Remember:
xiaohongshu
technical spec
product ux expert
database patterns
Conduct multi-agent task orchestration and workflow coordination.
Initialize project with Conductor artifacts (product definition,
Expert in web animations, transitions, and motion design using Framer Motion and CSS
Creates Mermaid and ASCII diagrams for flowcharts, architecture, ERDs, state machines, mindmaps, and more. Use when user mentions diagram, flowchart, mermaid, ASCII diagram, text diagram, terminal diagram, visualize, C4, mindmap, architecture diagram, sequence diagram, ERD, or needs visual docume...
PostgreSQL bindings for H3 hexagonal grid system. Use when working with H3 cells in Postgres, including spatial indexing, geometry/geography integration, and raster analysis.
Context-Driven Development skill for projects using Conductor. Use this skill when you detect a `conductor/` directory in the project, when working on tasks defined in a `plan.md` file, or when the user asks about tracks, specs, or plans. Automatically applies TDD workflow, tracks task completion...
Display project status, active tracks, and next actions
Official Stakpak application containerization standard operating procedure, a step-by-step guidline to properly dockerize applications. This is a rule book curated by the Stakpak Team.
Generate, edit, and beat-sync AI video with leading models in one workspace.
The world's fastest calendar for remote work
Transform Your Design with AI Designer by ImgCreator.ai
Revolutionizing Video Production with AI-Powered Creativity
Extend an image past the frame and let AI fill the new aspect ratio.
Discover your celebrity doppelgänger with StarByFace!
ChainClarity explains 700+ crypto whitepapers in plain English, with layered summaries, comparisons, research tools, alerts, and a $4.99 Pro plan.
Opus.ai: Revolutionize Your Web Experience