Landing Page Components
The landing module provides high-converting marketing components designed specifically for RespondeIA’s WhatsApp AI automation platform.
Components Overview
Hero Eye-catching hero section with CTA buttons and social proof
Features Grid showcase of product features with icons
Testimonials Customer success stories with ratings
FAQ Collapsible frequently asked questions
Hero
The hero section is the first thing visitors see - featuring a compelling headline, value proposition, CTAs, and key metrics.
Usage
modules/landing/screens/LandingScreen.tsx
import { Hero } from "../components" ;
export const LandingScreen = () => {
return (
< main className = "min-h-screen bg-white" >
< Hero />
{ /* Other sections */ }
</ main >
);
};
Features
Animated Badge : New feature announcement with pulsing indicator
Gradient Headline : Large, bold headline with blue gradient on key phrase
Dual CTAs : Primary (“Comenzar prueba gratuita”) and secondary (“Ver demostración”) buttons
Trust Indicators : “7 días gratis · Sin tarjeta · Cancelación en cualquier momento”
Social Proof Metrics : 4 key stats (2,400+ empresas, 98% satisfacción, etc.)
Background Pattern : Subtle dot matrix pattern for visual interest
Staggered Animations : Each element reveals with <Reveal> component
Component Structure
modules/landing/components/Hero.tsx
< section className = "relative overflow-hidden pt-16 pb-20 md:pt-24 md:pb-32"
style = { { background: "linear-gradient(180deg, #f0f6ff 0%, #ffffff 55%)" } } >
{ /* Dot pattern background */ }
< div className = "absolute inset-0 z-0 opacity-[0.4]"
style = { {
backgroundImage: "radial-gradient(#cbd5e1 1px, transparent 1px)" ,
backgroundSize: "24px 24px" ,
} }
/>
< div className = "container relative z-10 mx-auto px-4 text-center" >
{ /* Badge */ }
< Reveal delay = { 100 } >
< div className = "mb-8 flex justify-center" >
< div className = "inline-flex items-center gap-2 rounded-full border border-blue-100 bg-white/80 px-4 py-1.5" >
< span className = "flex h-2 w-2 rounded-full bg-blue-600 animate-pulse" />
< span className = "text-[13px] font-semibold text-blue-700" >
Nuevo: Integración con MercadoPago
</ span >
</ div >
</ div >
</ Reveal >
{ /* Headline */ }
< Reveal delay = { 300 } >
< h1 className = "mx-auto mb-6 max-w-4xl text-[40px] font-black leading-[1.1] tracking-tighter text-zinc-900 md:text-[64px]" >
Automatizá la atención al cliente en WhatsApp con { " " }
< span className = "bg-gradient-to-r from-[#2563eb] via-[#3b82f6] to-[#60a5fa] bg-clip-text text-transparent" >
inteligencia artificial
</ span >
</ h1 >
</ Reveal >
{ /* Subtitle */ }
< Reveal delay = { 500 } >
< p className = "mx-auto mb-10 max-w-2xl text-[16px] leading-relaxed text-zinc-500 md:text-[18px]" >
Respondé consultas, agendá turnos y cerrá ventas automáticamente. Sin código, sin fricción — { " " }
< span className = "text-zinc-800 font-medium" > activo en menos de 10 minutos. </ span >
</ p >
</ Reveal >
{ /* CTAs */ }
< Reveal delay = { 700 } >
< div className = "mb-12 flex flex-col items-center justify-center gap-4 sm:flex-row" >
< Button className = "h-14 w-full rounded-2xl bg-[#2563eb] px-10 text-[16px] font-bold" asChild >
< Link href = { ROUTES . AUTH . REGISTER } > Comenzar prueba gratuita </ Link >
</ Button >
< Button variant = "outline" className = "h-14 w-full rounded-2xl" asChild >
< Link href = "/quickstart" > Ver demostración </ Link >
</ Button >
</ div >
< div className = "text-[14px] font-medium text-zinc-400" >
7 días gratis · Sin tarjeta de crédito · Cancelación en cualquier momento
</ div >
</ Reveal >
{ /* Statistics */ }
< div className = "mt-20 grid grid-cols-2 gap-8 border-t border-zinc-100 pt-16 md:grid-cols-4" >
{ stats . map (( stat , i ) => (
< Reveal key = { i } delay = { 900 + i * 100 } >
< div className = "flex flex-col gap-1" >
< span className = "text-3xl font-black text-zinc-900" > { stat . label } </ span >
< span className = "text-[13px] font-medium text-zinc-400" > { stat . sub } </ span >
</ div >
</ Reveal >
)) }
</ div >
</ div >
</ section >
Animation Delays
The Hero uses cascading reveals for a polished entrance:
Badge : 100ms delay
Headline : 300ms delay
Subtitle : 500ms delay
CTAs : 700ms delay
Stat 1 : 900ms delay
Stat 2 : 1000ms delay
Stat 3 : 1100ms delay
Stat 4 : 1200ms delay
Social Proof Data
const stats = [
{ label: "2.400+" , sub: "empresas activas" },
{ label: "98%" , sub: "satisfacción" },
{ label: "8 min" , sub: "tiempo de setup" },
{ label: "1.4s" , sub: "respuesta promedio" },
];
Features
A 3-column grid showcasing the platform’s core capabilities with icons and descriptions.
Usage
import { Features } from "../components" ;
< Features /> ;
Features Data
The component displays 6 features from a static array:
modules/landing/components/Features.tsx
const features = [
{
title: "IA conversacional" ,
description: "Respuestas naturales entrenadas con la información de tu negocio." ,
icon: "💬" ,
},
{
title: "Agenda automática" ,
description: "El asistente gestiona turnos y citas directamente en la conversación." ,
icon: "📅" ,
},
{
title: "CRM integrado" ,
description: "Registro centralizado de contactos con historial completo." ,
icon: "👥" ,
},
{
title: "Analytics en tiempo real" ,
description: "Tasa de resolución y satisfacción en un solo panel." ,
icon: "📊" ,
},
{
title: "Traspaso controlado" ,
description: "Cuando la consulta requiere atención humana, el sistema transfiere con contexto." ,
icon: "🔄" ,
},
{
title: "Respuesta inmediata" ,
description: "Menos de dos segundos de latencia promedio, disponible 24/7." ,
icon: "⚡" ,
},
];
Component Structure
< section className = "py-20 bg-white" >
< div className = "container mx-auto px-4 max-w-4xl" >
{ /* Section Header */ }
< div className = "flex items-center gap-2 mb-4" >
< div className = "h-px w-8 bg-blue-600" />
< span className = "text-[12px] font-bold tracking-widest text-blue-600 uppercase" >
Funcionalidades
</ span >
</ div >
< h2 className = "mb-4" > Todo lo que necesita tu operación </ h2 >
< p className = "mb-12 max-w-xl text-zinc-500" >
Una plataforma diseñada para escalar sin agregar personal.
</ p >
{ /* Grid */ }
< div className = "grid grid-cols-1 md:grid-cols-3 gap-6" >
{ features . map (( f , i ) => (
< Reveal key = { i } delay = { ( i % 3 ) * 100 } >
< div className = "rounded-[40px] border border-zinc-100 p-8 shadow-sm" >
< div className = "mb-4 flex h-12 w-12 items-center justify-center rounded-xl bg-blue-50 text-xl" >
{ f . icon }
</ div >
< h3 className = "text-lg mb-2" > { f . title } </ h3 >
< p className = "text-zinc-500 text-[0.95rem] leading-relaxed" > { f . description } </ p >
</ div >
</ Reveal >
)) }
</ div >
</ div >
</ section >
Visual Design
Card Styling : Large border radius (rounded-[40px]) for modern look
Icon Container : Blue background (bg-blue-50) with 12x12 size
Typography : text-lg for title, text-[0.95rem] for description
Grid Layout : 3 columns on desktop, single column on mobile
Row Animation : Features in each row animate with 100ms stagger
Testimonials
Customer testimonials displayed in a 3-column grid with ratings, quotes, and author information.
Usage
import { Testimonials } from "../components" ;
< Testimonials /> ;
Testimonials Data
modules/landing/components/Testimonials.tsx
const testimonials = [
{
quote: "Redujimos el 80% de los mensajes repetitivos. El equipo ahora se enfoca en tareas de mayor valor. El retorno fue evidente en el primer mes." ,
author: "María García" ,
role: "Directora — Clínica Dental Norte" ,
initials: "MG" ,
},
{
quote: "En tres días el bot ya estaba respondiendo. Las reservas online subieron un 40% el primer mes sin ningún esfuerzo adicional del equipo." ,
author: "Juan Rodríguez" ,
role: "Propietario — Restaurante El Molino" ,
initials: "JR" ,
},
{
quote: "Atendemos clientes a las 3am sin personal adicional. Calculamos que recuperamos la inversión en las primeras dos semanas de uso." ,
author: "Laura Pérez" ,
role: "Socia — Inmobiliaria Palermo" ,
initials: "LP" ,
},
];
Component Structure
< section className = "py-20 bg-white" >
< div className = "container mx-auto px-4" >
{ /* Header */ }
< div className = "flex items-center gap-2 mb-4" >
< div className = "h-px w-8 bg-blue-600" />
< span className = "text-[12px] font-bold tracking-widest text-blue-600 uppercase" >
Casos de Uso
</ span >
</ div >
< h2 className = "mb-12" > Resultados comprobados </ h2 >
{ /* Grid */ }
< div className = "grid grid-cols-1 md:grid-cols-3 gap-6" >
{ testimonials . map (( t , i ) => (
< Reveal key = { i } delay = { i * 100 } >
< div className = "flex flex-col rounded-[40px] border border-zinc-100 p-10 shadow-sm" >
{ /* 5-star rating */ }
< div className = "flex gap-1 mb-6" >
{ [ ... Array ( 5 )]. map (( _ , i ) => (
< span key = { i } className = "text-orange-400 text-sm" > ★ </ span >
)) }
</ div >
{ /* Quote */ }
< p className = "text-[1.1rem] italic text-zinc-700 leading-relaxed mb-8" >
" { t . quote } "
</ p >
{ /* Author */ }
< div className = "flex items-center gap-4" >
< div className = "h-12 w-12 rounded-full bg-[#0f172a] flex items-center justify-center text-white font-bold text-sm" >
{ t . initials }
</ div >
< div >
< h4 className = "font-bold text-zinc-900" > { t . author } </ h4 >
< p className = "text-sm text-zinc-400" > { t . role } </ p >
</ div >
</ div >
</ div >
</ Reveal >
)) }
</ div >
</ div >
</ section >
Card Elements
5 orange stars (★) displayed at top of each card
Italic text in text-[1.1rem] size with relaxed leading
Dark circle (bg-[#0f172a]) with white initials
Bold text showing customer name
Muted text showing title and company
FAQ
Collapsible accordion of frequently asked questions using shadcn/ui Accordion component.
Usage
import { Faq } from "../components" ;
< Faq /> ;
FAQ Data
modules/landing/components/Faq.tsx
const faqs = [
{
value: "tech" ,
q: "¿Se requiere conocimiento técnico?" ,
a: "No. Todo se configura desde un panel visual guiado. No es necesario escribir código ni contar con un equipo de IT." ,
},
{
value: "whatsapp" ,
q: "¿Puedo usar mi número de WhatsApp actual?" ,
a: "Sí. Podés migrar tu número existente a la API oficial de Meta. El proceso es guiado y tarda menos de diez minutos." ,
},
{
value: "time" ,
q: "¿Quanto tiempo lleva la configuración inicial?" ,
a: "El promedio de nuestros clientes es de 8 minutos desde el registro hasta el bot activo respondiendo mensajes." ,
},
{
value: "commitment" ,
q: "¿Hay compromiso de permanencia?" ,
a: "No. La suscripción se puede cancelar en cualquier momento desde el panel, sin cargos adicionales ni gestiones externas." ,
},
];
Component Structure
< section className = "pt-10 bg-white pb-1" >
< div className = "container mx-auto px-4 max-w-3xl" >
{ /* Header */ }
< Reveal >
< div className = "flex items-center gap-2 mb-4" >
< div className = "h-px w-8 bg-blue-600" />
< span className = "text-[12px] font-bold tracking-widest text-blue-600 uppercase" >
Preguntas Frecuentes
</ span >
</ div >
< h2 className = "mb-12" > Antes de empezar </ h2 >
</ Reveal >
{ /* Accordion */ }
< Accordion type = "single" collapsible className = "w-full space-y-2" >
{ faqs . map (( faq , i ) => (
< Reveal key = { faq . value } delay = { i * 100 } >
< AccordionItem value = { faq . value } className = "border-b border-zinc-100 py-2" >
< AccordionTrigger className = "hover:no-underline group" >
< h4 className = "text-left text-[17px] font-bold text-zinc-900 group-hover:text-blue-600 transition-colors" >
{ faq . q }
</ h4 >
</ AccordionTrigger >
< AccordionContent >
< p className = "text-zinc-500 leading-relaxed max-w-2xl pt-2" >
{ faq . a }
</ p >
</ AccordionContent >
</ AccordionItem >
</ Reveal >
)) }
</ Accordion >
</ div >
</ section >
Accordion Props
type
'single' | 'multiple'
default: "single"
Controls whether multiple items can be open simultaneously. Set to "single" for exclusive expansion.
When true, allows the open item to be collapsed.
Styling Details
Question Hover : Blue text on hover with smooth transition
Answer Text : Muted zinc-500 color with relaxed line height
Border : Subtle zinc-100 bottom border between items
Max Width : max-w-3xl container for optimal reading width
Complete Landing Page Example
modules/landing/screens/LandingScreen.tsx
import {
Faq ,
Features ,
FinalCTA ,
Hero ,
Methodology ,
Testimonials ,
} from "../components" ;
export const LandingScreen = () => {
return (
< main className = "min-h-screen bg-white" >
< Hero />
< Methodology />
< Features />
< Testimonials />
< Faq />
< FinalCTA />
</ main >
);
};
Animation System
All landing components use the <Reveal> animation wrapper from /components/animations/Reveal.tsx:3.
Usage Pattern
import { Reveal } from "@/components/animations/Reveal" ;
< Reveal delay = { 300 } >
< div > { /* Content to animate */ } </ div >
</ Reveal >
Animation Strategy
Hero
Features
Testimonials
FAQ
Cascading Delays : Each element has increasing delay (100ms, 300ms, 500ms, etc.) for dramatic entrance
Row-based Stagger : Elements in the same row animate together, with 100ms delay between rows using delay={(i % 3) * 100}
Linear Stagger : Each card animates with 100ms increment (delay={i * 100})
Sequential Reveal : Questions appear one by one with 100ms spacing
Customization Guide
Modify the stats array in Hero.tsx to show different metrics: const stats = [
{ label: "5,000+" , sub: "empresas activas" },
{ label: "99.5%" , sub: "uptime" },
// ...
];
Extend the features array - the grid automatically adapts: const features = [
// existing features...
{
title: "Nueva funcionalidad" ,
description: "Descripción de la característica" ,
icon: "🚀" ,
},
];
Replace Emojis with Icon Components
Swap emoji icons for Lucide React icons: import { MessageSquare , Calendar , Users } from "lucide-react" ;
const features = [
{ title: "IA conversacional" , icon: MessageSquare , ... },
{ title: "Agenda automática" , icon: Calendar , ... },
// ...
];
// In render:
< IconComponent className = "h-6 w-6" />
Fetch Testimonials from CMS
Replace static data with API call: const { data : testimonials } = useQuery ({
queryKey: [ 'testimonials' ],
queryFn: fetchTestimonials ,
});
Best Practices
Animation Performance : The Reveal component likely uses IntersectionObserver for scroll-triggered animations. Keep delay values reasonable (< 1000ms) to avoid perceived lag.
Content Strategy : The landing page uses specific psychological triggers:
Hero: Social proof + urgency (“7 días gratis”)
Features: Solution-focused benefits
Testimonials: Specific results (“80% reduction”, “40% increase”)
FAQ: Addressing common objections
Mobile Responsiveness : All grids collapse to single column on mobile. Test CTAs are easily tappable (min 44x44px touch targets).
Reveal Animation Scroll-triggered animation wrapper component
shadcn/ui Accordion Collapsible accordion component API
ROUTES Config Application routing constants
Landing Screen Complete landing page composition