// ─── SECTIONS C: Testimonios, Transformación, ROI Calculator, Comparativa const { useEffect: useEffC, useState: useStC, useRef: useRefC } = React; // ─── TESTIMONIOS ─────────────────────────────────────────────────────── function Testimonios() { const hero = TESTIMONIALS[0]; const rest = TESTIMONIALS.slice(1); return (
Lo que dicen los despachos

Resultados que hablan solos.

{/* Hero testimonial */}

"{hero.quote}"

{hero.initials}
{hero.name}
{hero.role}
Resultado · Mes 1
20.000€
5 casos cerrados · Ley 2ª Oportunidad
Situación anterior
6 meses con otra agencia sin cerrar un solo caso
Quiero resultados así
{/* Grid */}
{rest.map((t, i) => (
{t.sector}

"{t.quote}"

{t.initials}
{t.name}
{t.role}
))}
); } // ─── TRANSFORMACIÓN ──────────────────────────────────────────────────── function Transformacion() { const refBefore = useRefC(null); const refAfter = useRefC(null); const [animated, setAnimated] = useStC(false); const beforeHeights = [22, 62, 18, 72, 28, 54]; const afterHeights = [35, 52, 65, 72, 82, 94]; const afterValues = ["9.000€", "13.500€", "17.200€", "19.800€", "22.500€", "26.100€"]; const months = ["Mes 1", "Mes 2", "Mes 3", "Mes 4", "Mes 5", "Mes 6"]; useEffC(() => { const el = refAfter.current; if (!el) return; const io = new IntersectionObserver(([e]) => { if (e.isIntersecting) setAnimated(true); }, { threshold: 0.3 }); io.observe(el); return () => io.disconnect(); }, []); return (
La transformación

Lo que cambia con nuestro método.

{/* Before */}
Antes de Legalketing
{beforeHeights.map((h, i) => (
))}
{["Ene", "Feb", "Mar", "Abr", "May", "Jun"].map(m => ( {m} ))}
Dependencia total del boca a boca
{[ "Meses de 1.900€ y meses de 18.500€ sin saber por qué", "El pipeline depende de que alguien te recomiende", "Cada enero empiezas de cero", ].map((t, i) =>
{t}
)}
{/* Arrow */}
{/* After */}
Con Legalketing
{afterHeights.map((h, i) => (
{i === afterHeights.length - 1 && (
26.100€
)}
))}
{months.map(m => {m})}
Pipeline estable y predecible
{[ "Leads cualificados entrando cada semana", "Facturación predecible y creciente mes a mes", "Tú controlas el crecimiento de tu despacho", ].map((t, i) =>
{t}
)}
); } // ─── ROI CALCULATOR ──────────────────────────────────────────────────── function ROICalculator() { const [ticket, setTicket] = useStC(2000); const fee = 800; const leads = 20; const scenarios = [ { key: "pesimista", label: "Pesimista", rate: 0.30, note: "Cerrando 3 de cada 10 leads", color: "var(--terra)" }, { key: "neutral", label: "Neutral", rate: 0.50, note: "Cerrando 1 de cada 2 leads", color: "var(--ink-3)" }, { key: "optimista", label: "Optimista", rate: 0.82, note: "La media real de nuestros clientes", color: "oklch(38% 0.12 145)" }, ]; return (
La matemática

Incluso en el peor escenario, sales ganando.

Basado en 20 leads/mes garantizados. Sin contar upsells ni renovaciones.

{/* Input */}
{ticket.toLocaleString("es-ES")}€ setTicket(Number(e.target.value))} />
{/* Scenarios */}
{scenarios.map(s => { const clients = Math.round(leads * s.rate); const revenue = clients * ticket; const roi = (revenue / fee).toFixed(1); return (
↗ {s.label.toUpperCase()}
{s.note}
Cierre
{Math.round(s.rate * 100)}%
Clientes/mes
{clients}
Facturación
{revenue.toLocaleString("es-ES")}€
Retorno
×{roi}
); })}
✓ Garantía incluida: si no llegamos a los {leads} leads, te devolvemos los honorarios.
); } // ─── COMPARATIVA ────────────────────────────────────────────────────── function Comparativa() { return (
La diferencia

Por qué los demás no funcionan.

Aspecto
Otros sistemas
Método Legalketing
{VS_ITEMS.map((row, i) => (
{row.topic}
{row.typical}
{row.mine}
))}
); }