/* global React, Nav, Footer, ClientTicker, MarqueeBand, Counter, CircleScribble, DrawArrow, Sparkle, HeartScribble, StarDoodle, SmileyDoodle, LemonMark, LemonWordmark, FloatingLemon, WaterlemonCursor, useInView, useTweaks, TweaksPanel, TweakSection, TweakRadio, TweakToggle, TweakColor, TweakSelect */ const { useState, useEffect, useRef } = React; /* ---------- HEADLINE VARIANTS ---------- */ const HEADLINES = { punk: { eyebrow: "EQUIPO DETRÁS DE +30 MARCAS · BARCELONA", h1: ( No hacemos marketing.aburrido, Hacemos que posteen{" "} hablen de ti. ), lede: ( Somos Waterlemon Studio, el water de tu lemon. Una agencia 360 con la que no contratas servicios — sumas un equipo. Pensamos, creamos, ejecutamos y nos jugamos el pellejo como si tu marca fuera la nuestra. ), cta: "Quiero esto para mi marca" }, direct: { eyebrow: "MARKETING DIGITAL 360 · ESTRATEGIA + EJECUCIÓN · BARCELONA", h1: ( Tu departamento de marketing, sin tener que contratarlo. ), lede: ( Estrategia, redes, contenido, ads, SEO y web. Todo bajo un mismo techo, ejecutado por personas que conocen tu marca como si la llevaran in-house. Más leads, mejor marca, sin pasar pelotas entre 4 freelancers que no se conocen. ), cta: "Empezar mi diagnóstico" }, leads: { eyebrow: "+340% LEADS · +250% EN REDES · CASOS REALES, NO HUMO", h1: ( Más leads. Mejor marca. Cero humo postureo. ), lede: ( Llevamos +30 marcas activas y +25 estudios Club Pilates. Sabemos lo que funciona, lo que no, y lo que cuesta cada lead. Te lo enseñamos en una llamada de 15 minutos, gratis. ), cta: "Auditoría gratuita →" }, partner: { eyebrow: "TU PARTNER DE CRECIMIENTO · DESDE 2020 · BARCELONA", h1: ( No somos tu agencia. Somos tu equipo. ♥ ), lede: ( Imagina un departamento de marketing dentro de tu empresa, sin la nómina, sin la silla, sin el café. Eso es Waterlemon. Nos metemos en tu negocio, lo tratamos como propio, y crecemos contigo. ), cta: "Hablemos de tu marca" }, }; /* ---------- HERO ---------- */ function Hero({ variant = "punk" }) { const h = HEADLINES[variant] || HEADLINES.punk; return (
{/* Decorative floating lemons */}
{h.eyebrow}

{h.h1}

{h.lede}

{h.cta} Ver proyectos
+30 · marcas activas +25 · estudios Club Pilates 6 años · construyendo marcas
{/* Polaroid 1 - equipo */}
Somos el water
de tu lemon ♥
{/* Polaroid 2 - laptop */}
edición real ✿
{/* Sticky note pink */}
ideas reales
para marcas que
quieren crecer.
{/* Polaroid 3 - neon DO PILATES */}
probablemente
nos llevemos bien
{/* Sticky note ink */}
partner ≠ proveedor.
nota importante.
{/* sparkles & doodles */}
{/* Hero bottom marquee */}
{[ "Estrategia con propósito", "Contenido que conecta", "Diseño que destaca", "Comunidad que enamora", "Resultados que se notan", "Estrategia con propósito", "Contenido que conecta", "Diseño que destaca", "Comunidad que enamora", "Resultados que se notan", ].map((t, i) => ( {t} ))}
); } /* ---------- SERVICES ---------- */ const SERVICES = [ { id: "01", slug: "redes-sociales", name: "Redes Sociales", tag: "Estrategia, contenido y comunidad. La marca que no quieres que se acabe.", cap: "Estrategia + Community", grad: "linear-gradient(135deg, rgba(255,45,135,0.5), rgba(13,13,15,0.9))" }, { id: "02", slug: "contenido", name: "Contenido & Video", tag: "Fotografía, reels, motion y branded content que parece tuyo —porque lo es.", cap: "Filmmaker on set", grad: "linear-gradient(135deg, rgba(255,184,217,0.6), rgba(13,13,15,0.95))" }, { id: "03", slug: "ads-meta", name: "Paid Media (Meta)", tag: "Anuncios pensados que traen leads. Improvisar sale caro.", cap: "Campañas que pagan", grad: "linear-gradient(135deg, rgba(225,29,116,0.5), rgba(26,26,29,0.95))" }, { id: "04", slug: "seo", name: "SEO Orgánico", tag: "Que te encuentren cuando buscan lo que vendes. Sin trucos.", cap: "Posición 1 ▲", grad: "linear-gradient(135deg, rgba(255,45,135,0.45), rgba(13,13,15,0.95))" }, { id: "05", slug: "google-ads", name: "Google Ads", tag: "Estar arriba, pagando menos. Search, PMax, YouTube, Remarketing.", cap: "CPL bajo control", grad: "linear-gradient(135deg, rgba(255,210,63,0.5), rgba(13,13,15,0.95))" }, { id: "06", slug: "web", name: "Diseño Web", tag: "Webs hechas para convertir, no para ganar premios polvorientos.", cap: "UX que vende", grad: "linear-gradient(135deg, rgba(255,184,217,0.5), rgba(13,13,15,0.9))" }, { id: "07", slug: "estrategia", name: "Estrategia 360", tag: "Un plan integral, no 4 islas. Diagnóstico, roadmap y acompañamiento.", cap: "Roadmap claro", grad: "linear-gradient(135deg, rgba(255,45,135,0.6), rgba(13,13,15,0.95))" }, { id: "08", slug: "video", name: "Producción Audiovisual", tag: "Vídeos que cuentan algo. Brand films, reels, ads, eventos.", cap: "Calidad cine", grad: "linear-gradient(135deg, rgba(225,29,116,0.5), rgba(13,13,15,0.9))" }, { id: "09", slug: "consultoria", name: "Consultoría 1:1", tag: "Si tienes equipo, te lo afilamos. Si no, te lo prestamos.", cap: "Strategy sessions", grad: "linear-gradient(135deg, rgba(0,224,181,0.45), rgba(13,13,15,0.9))" }, ]; function ServiceRow({ s, onMove }) { const rowRef = useRef(null); const [active, setActive] = useState(false); const [pos, setPos] = useState({ x: 50, y: 50 }); const handleMove = (e) => { const r = rowRef.current?.getBoundingClientRect(); if (!r) return; setPos({ x: e.clientX - r.left, y: e.clientY - r.top }); }; return ( setActive(true)} onMouseLeave={() => setActive(false)} onMouseMove={handleMove} > {s.id}

{s.name}

{s.tag}

{s.cap}
{s.name.toLowerCase()}.jpg
); } function Services() { return (

SERVICIOS 360

Todo lo que
tu marca necesita,
en un solo equipo.

PACK COMPLETO ★

Hacemos marketing como se hacía antes: pensando primero, ejecutando después. Y todo bajo el mismo techo. Sin pasar pelotas entre 4 freelancers que no se conocen.

{SERVICES.map((s, i) => )}

¿Te falta algo? Lo hacemos también.

Ver todo en detalle
); } /* ---------- PARTNER (manifesto) ---------- */ function Partner() { return (

LO QUE NOS HACE DIFERENTES

No somos tu
agencia.
Somos tu
equipo. —externo. ♥

Imagínate un departamento de marketing dentro de tu empresa. Que conoce tu marca, tu sector, tus clientes y tus márgenes. Que se mete contigo en el barro cuando hay que sacar campaña a las 23:47.

Ahora quítate la nómina, la silla, la mesa y el café.
Eso es Waterlemon.

  • Tratamos tu negocio como el nuestro. Si te va bien, nos va bien.
  • Sin intermediarios ni "te paso con el otro depto." Hablas con quien hace.
  • 360º real: estrategia, contenido, ads, web, SEO, video. Todo bajo un mismo techo.
  • Traemos leads, no PowerPoints. Aquí se mide lo que se hace.
  • Cercanía sin postureo. Nos hablamos de tú desde el minuto uno.
Conoce al equipo Hablemos por WhatsApp
"

Como si fueran parte de mi propio equipo.

"Trabajamos juntos desde 2019. Lo mejor es su forma de integrarse: parecen parte de mi equipo. Implicados, comprometidos y siempre con ideas frescas."

Héctor Pérez CEO · GRUPO O'RETORNIÑO
{/* big background type */}
PARTNERS · NOT VENDORS
); } /* ---------- STATS ---------- */ function Stats() { const stats = [ { label: "Marcas activas", big: 30, suf: "+", desc: "Trabajando codo con codo todos los días.", doodle: }, { label: "Estudios Club Pilates", big: 25, suf: "+", desc: "Partner oficial. En toda España.", doodle: }, { label: "Años creando marca", big: 6, suf: "", desc: "Desde 2020. Y los que nos quedan.", doodle: }, { label: "% recomendación", big: 100, suf: "%", desc: "Nuestros clientes nos recomiendan. Punto.", doodle: }, ]; return (

LOS NÚMEROS QUE NOS RESPALDAN

Resultados
que se notan.

Las métricas guapas son las que se traducen en clientes para ti. El resto es vanidad. Aquí, lo que cuenta.

{stats.map((s, i) => (
{s.doodle}
{s.label}
{s.desc}
))}
); } /* ---------- CASES ---------- */ const CASES = [ { title: "Club Pilates", industry: "Wellness · +25 estudios · España", summary: "Convertimos +25 estudios franquiciados en una comunidad local con personalidad propia. Stories que sí venden, ads que traen leads, contenido que enamora.", kpis: [ { v: "+25", l: "estudios" }, { v: "+340%", l: "leads/mes" }, { v: "+62%", l: "engagement" }, { v: "5 años", l: "juntos desde su apertura" }, ], stamp: "FLAGSHIP", grad: "linear-gradient(135deg, rgba(255,45,135,0.55), rgba(13,13,15,0.92))" }, { title: "O'Retorniño", industry: "Restauración · Barcelona", summary: "\"El mejor pulpo de Barcelona, hecho con amor y un toque de humor\". Estrategia integral: redes, contenido, fotografía y video desde 2019.", kpis: [ { v: "×25", l: "alcance" }, { v: "+250%", l: "crecimiento en redes" }, { v: "7 años", l: "juntos" }, ], stamp: "DESDE 2019", grad: "linear-gradient(135deg, rgba(255,184,217,0.5), rgba(13,13,15,0.9))" }, { title: "Artes Marciales", industry: "Wellness · Centros familiares", summary: "Web, SEO, Google Ads, UX y CRO para una red de centros especializados en defensa personal. De la búsqueda local al lead cualificado.", kpis: [ { v: "+210%", l: "tráfico SEO" }, { v: "−38%", l: "CPL" }, { v: "TOP 3", l: "Google" }, ], stamp: "GROWTH", grad: "linear-gradient(135deg, rgba(225,29,116,0.5), rgba(26,26,29,0.95))" }, { title: "Orangetheory Valencia", industry: "Fitness · Franquicia", summary: "Creación de contenido y gestión de redes para una franquicia premium en Valencia. Un salto real en su presencia orgánica: más alcance, más comunidad, más marca.", kpis: [ { v: "Contenido", l: "creación mensual" }, { v: "Orgánico", l: "crecimiento en redes" }, { v: "★★★★★", l: "valoración" }, ], stamp: "LOCAL ❤", grad: "linear-gradient(135deg, rgba(255,45,135,0.45), rgba(13,13,15,0.95))" }, ]; function CaseCard({ c }) { return (
{c.stamp}

{c.title}

{c.industry}

{c.summary}

{c.kpis.map((k, i) => (
{k.v} {k.l}
))}
); } function Cases() { return (

NUESTROS PROYECTOS · LA MEJOR CARTA DE PRESENTACIÓN

Trabajos que hablan
por sí solos. (y por nosotros)

{CASES.map(c => )}
); } /* ---------- TESTIMONIALS ---------- */ const TESTIMONIALS = [ { text: "Trabajar con Waterlemon es siempre una experiencia increíble. Rafa y Raquel captan todas nuestras ideas y las convierten en realidad con creatividad excepcional. Un equipo 100% recomendable.", name: "Nina Areste", role: "Club Pilates Poblenou & Badalona", initials: "NA", stars: "★★★★★", }, { text: "Trabajamos juntos desde 2019. Lo mejor es su forma de integrarse: parecen parte de mi propio equipo. Implicados, comprometidos y siempre con ideas frescas.", name: "Héctor Pérez", role: "CEO · Grupo O'Retorniño", initials: "HP", stars: "★★★★★", }, { text: "Adaptación total, soluciones creativas y estratégicas. Trabajamos con coordinación excepcional, como si fueran una parte más de nuestro equipo.", name: "Mònica Esteve", role: "Marketing Manager · Spandex España y Portugal", initials: "ME", stars: "★★★★★", }, { text: "Waterlemon ha sido una pieza clave en el crecimiento de mi negocio. Profesional, estratégico y cercano. Sin duda, una agencia que recomiendo al 100%.", name: "Ana María Luna", role: "Club Pilates Gran Vía · Orangetheory Fitness Valencia", initials: "AL", stars: "★★★★★", }, { text: "Honestidad en la comunicación, profesionalidad y creatividad en cada contenido. Ni te esfuerces en llamarlos si lo que quieres es vender humo.", name: "Bernardo Riviere", role: "Club Pilates Sant Cugat", initials: "BR", stars: "★★★★★", }, ]; function Testimonials() { return (

SUS PALABRAS, NUESTRA MEJOR CARTA

Lo cuentan
mejor que nosotros.

Mejor que mostrar awards de los años 2010 colgados en una pared, hablamos con las personas que confían en nosotros cada día. Esto es lo que dicen.

{TESTIMONIALS.map((t, i) => (
{t.stars}
"
{t.text}
{t.initials}
{t.name}
{t.role}
))}
); } /* ---------- CTA FINAL ---------- */ function CTAFinal() { return (

TU TURNO

¿Y si tu marca
es la próxima
de la que hablen?
probablemente nos llevemos bien.

HABLEMOS
SIN COMPROMISO.

Te leemos en 24h. Sin comerciales que insisten. Sin propuestas de 80 slides. Una llamada, una idea, una decisión.

{/* huge marquee at the bottom */}
{[ "HABLEMOS", "TU MARCA, NUESTRA OBSESIÓN", "PROBABLEMENTE NOS LLEVEMOS BIEN", "NO VENDEMOS HUMO", "HABLEMOS", "TU MARCA, NUESTRA OBSESIÓN", "PROBABLEMENTE NOS LLEVEMOS BIEN", "NO VENDEMOS HUMO", ].map((t, i) => ( {t} ))}
); } /* ---------- LEAD MAGNET (captación) ---------- */ function LeadMagnet() { const [email, setEmail] = useState(""); const [sent, setSent] = useState(false); const submit = (e) => { e.preventDefault(); if (email.includes("@")) setSent(true); }; return (
{/* huge background headline */}
AUDITORÍA · GRATIS · 15 MIN · AUDITORÍA · GRATIS · 15 MIN ·
PLAZAS LIMITADAS CADA MES · RESERVA LA TUYA

Te decimos qué
está funcionando
en tu marketing.
Y qué no.

Una sesión de 15 minutos por video-call con nuestro equipo. Auditoría rápida de tus redes, web, ads y posicionamiento. Te damos 3 acciones concretas que puedes implementar esta semana. Sin venderte nada.

  • 01 Análisis express de tu presencia digital actual
  • 02 3 acciones concretas que mueven la aguja
  • 03 Benchmarks reales del sector (sin contar humo)
  • 04 Honesto: si no encajamos, te lo decimos.
{!sent ? (
FREE

Reserva tu plaza

Quedan plazas para este mes. Sin compromiso, sin tarjeta de crédito.

setEmail(e.target.value)} />

O directo por WhatsApp ↗

4.9/5 ★★★★★ valoración media
15 min tu tiempo, garantizado
) : (
¡VA!

¡Genial!

Te escribimos en menos de 24h para reservar tu hueco. ♥

probablemente nos llevemos bien.

)}
{/* decorative lemons floating around the card */}
); } const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{ "accent": "#FF2D87", "headline": "punk", "footerPhrase": "hablemos", "cursor": true, "lemons": true }/*EDITMODE-END*/; const ACCENT_PALETTES = { "#FF2D87": { soft: "#FFB8D9", deep: "#E11D74", glow: "rgba(255,45,135,0.55)" }, "#FF5A3C": { soft: "#FFC8B8", deep: "#D63C20", glow: "rgba(255,90,60,0.55)" }, "#00E0B5": { soft: "#A8F4E4", deep: "#00A082", glow: "rgba(0,224,181,0.5)" }, "#FFD23F": { soft: "#FFEC95", deep: "#D9A800", glow: "rgba(255,210,63,0.6)" }, }; /* ---------- ROOT ---------- */ function App() { const [t, setT] = useTweaks(TWEAK_DEFAULTS); useEffect(() => { const p = ACCENT_PALETTES[t.accent] || ACCENT_PALETTES["#FF2D87"]; document.documentElement.style.setProperty("--wl-accent", t.accent); document.documentElement.style.setProperty("--wl-accent-soft", p.soft); document.documentElement.style.setProperty("--wl-accent-deep", p.deep); document.documentElement.style.setProperty("--wl-accent-glow", p.glow); }, [t.accent]); useEffect(() => { document.body.classList.toggle("no-lemons", !t.lemons); }, [t.lemons]); return (