// ─── SECTIONS C: About, Testimonials, Plazas, CTA, Footer ────────────── // ─── ABOUT ───────────────────────────────────────────────────────────── function About() { return (
07 Sobre mí

Joel Mateo.

Trato directo. Datos en la mesa. Y no me rindo hasta que cierras.

Llevo seis años en esto. Empecé gestionando campañas para marcas grandes, con +6M€ de inversión publicitaria al año y equipos de análisis detrás. Aprendes rápido cuando los números tienen que cuadrar a final de cada mes y no hay margen para experimentos.

Lo que me quedó de esa etapa es criterio. Sé en pocos días qué va a funcionar para cada negocio y qué no. Sin rodeos. Desde el primer día estamos haciendo cosas con impacto real, no calentando motores.

En un momento decidí hacer algo más directo: trabajar con negocios de servicios donde se nota lo que haces. Sin gestor intermedio, sin informes de relleno. Yo me encargo de todo. Cuando algo no va bien, lo sabes antes de que termine el mes.

Si cierras conmigo, no estás contratando una agencia. Estás contratando a alguien que va a tratar tu negocio como si fuera el suyo durante el tiempo que trabajemos juntos.

Fundador · Mateo Marketing
Joel Mateo
Disponible
+
Años
M€
Inversión
+
Clientes
×
ROI medio
Mi compromiso contigo
    {[ "Trato directo conmigo, sin gestor de cuentas.", "Reporto contratos firmados, no clics.", "Si no encajamos, te lo digo en la primera llamada.", "Máximo 12 clientes a la vez. La atención no se diluye.", ].map((t, i) => (
  • {t}
  • ))}
); } // ─── TESTIMONIALS ────────────────────────────────────────────────────── function Testimonials() { const hero = TESTIMONIALS[0]; const rest = TESTIMONIALS.slice(1, 13); return (
08 Lo dicen los clientes

No es lo que yo digo.
Es lo que ellos firmaron.

Reseñas reales, con nombre y apellido. Cada una contrastable con una llamada de 5 minutos. Pídeme el contacto del que más se parezca a tu caso.

{hero.quote.split("Joel").map((part, i, arr) => ( {part} {i < arr.length - 1 && Joel} ))}
{hero.initials}
{hero.name}
{hero.role}
El antes / el después
ANTES
0
hojas firmadas
6 meses con otra agencia
MES 1 CON JOEL
+
hojas firmadas
4 semanas. Mismo presupuesto.
{hero.name} dirige un despacho de Ley 2ª Oportunidad en Cataluña. Llegó tras quemar dos agencias en dos años.
{rest.map((t, i) => (
{t.sector &&
{t.sector}
}
"{t.quote}"
{t.initials}
{t.name}
{t.role}
))}
); } // ─── PLAZAS (scarcity) ───────────────────────────────────────────────── function Plazas() { const slots = Array.from({ length: 12 }, (_, i) => { if (i < 8) return "taken"; if (i === 8) return "next"; return "open"; }); return (
09 Disponibilidad real · 2026

Trabajo con 12 clientes.
No 13.

No es marketing de escasez. Es matemática. Si yo soy el que ejecuta y analiza cada cuenta, en algún punto la atención se diluye. Doce es el techo que aguanta hacerlo todo a mi nivel. Cuando se llena, se cierra hasta que alguien rota.

Cuatro plazas libres para 2026. Si tu negocio encaja, la siguiente puede ser la tuya.

de 12 plazas ocupadas
); } // ─── CTA ─────────────────────────────────────────────────────────────── function CTA() { return (
10 Una conversación. Quince minutos. Sin PowerPoints.

¿Y si esta vez
de verdad funciona?

Cuéntame qué vendes, a quién y qué has probado. Te digo honestamente si puedo ayudarte y cómo lo plantearía. Da igual el sector: si el ticket justifica el sistema, hay camino. Si no hay fit, te lo digo y te ahorras meses.

Una llamada de WhatsApp. Sin formulario. Sin que te llamen tres comerciales. Solo tú y yo, viendo si tiene sentido.

Hablamos por WhatsApp
+34 694 21 64 03 · Primera conversación sin coste
{[ { l: "Tiempo de respuesta", v: "< 4h", s: "días laborables" }, { l: "Primera llamada", v: "15 min", s: "sin coste · sin compromiso" }, { l: "Sistema activo", v: "5 días", s: "desde que firmamos" }, { l: "Si no encaja", v: "0€", s: "te ahorras meses" }, ].map((m) => (
{m.l}
{m.v}
{m.s}
))}
); } // ─── FOOTER ──────────────────────────────────────────────────────────── function Footer() { return ( ); } // ─── FAB ─────────────────────────────────────────────────────────────── function Fab() { const [show, setShow] = React.useState(false); React.useEffect(() => { const onScroll = () => setShow(window.scrollY > 320); window.addEventListener("scroll", onScroll, { passive: true }); return () => window.removeEventListener("scroll", onScroll); }, []); return ( ); } Object.assign(window, { About, Testimonials, Plazas, CTA, Footer, Fab });