import React, { useEffect, useRef, useState, useMemo, useId } from "react"; import { createRoot } from "react-dom/client"; import { motion, AnimatePresence, useMotionValue, useSpring, useTransform, useScroll, useInView, animate, } from "framer-motion"; import Lenis from "lenis"; const whatsappLink = (message = "Me interesa posicionar mi marca") => `https://wa.me/573153593552?text=${encodeURIComponent(message)}`; const WHATSAPP_LINK = whatsappLink(); /* ====================================================================== GLOBAL HOOKS ====================================================================== */ function useLenis() { useEffect(() => { const lenis = new Lenis({ lerp: 0.1, wheelMultiplier: 1, smoothWheel: true }); let rafId; function raf(time) { lenis.raf(time); rafId = requestAnimationFrame(raf); } rafId = requestAnimationFrame(raf); return () => { cancelAnimationFrame(rafId); lenis.destroy(); }; }, []); } function useMouse() { const x = useMotionValue(-200); const y = useMotionValue(-200); useEffect(() => { function handle(e) { x.set(e.clientX); y.set(e.clientY); } window.addEventListener("mousemove", handle); return () => window.removeEventListener("mousemove", handle); }, [x, y]); return { x, y }; } /* ====================================================================== CURSOR + PROGRESS + GRAIN ====================================================================== */ function CustomCursor({ mouse }) { const [hovering, setHovering] = useState(false); const dotX = useSpring(mouse.x, { damping: 40, stiffness: 900 }); const dotY = useSpring(mouse.y, { damping: 40, stiffness: 900 }); const ringX = useSpring(mouse.x, { damping: 30, stiffness: 200 }); const ringY = useSpring(mouse.y, { damping: 30, stiffness: 200 }); useEffect(() => { function over(e) { if (e.target.closest("[data-cursor]")) setHovering(true); } function out(e) { if (e.target.closest("[data-cursor]")) setHovering(false); } document.addEventListener("mouseover", over); document.addEventListener("mouseout", out); return () => { document.removeEventListener("mouseover", over); document.removeEventListener("mouseout", out); }; }, []); return ( <> ); } function ScrollProgressBar() { const { scrollYProgress } = useScroll(); return ( ); } /* ====================================================================== REUSABLE PRIMITIVES ====================================================================== */ const easeOut = [0.16, 1, 0.3, 1]; function Reveal({ children, className = "", delay = 0, y = 36, once = true }) { return ( {children} ); } function Stagger({ children, className = "", stagger = 0.08 }) { return ( {children} ); } function StaggerItem({ children, className = "" }) { return ( {children} ); } function CountUp({ to, prefix = "", suffix = "", decimals = 0 }) { const ref = useRef(null); const inView = useInView(ref, { once: true, amount: 0.6 }); const [val, setVal] = useState(0); useEffect(() => { if (!inView) return; const controls = animate(0, to, { duration: 1.6, ease: easeOut, onUpdate: (v) => setVal(v), }); return () => controls.stop(); }, [inView, to]); return ( {prefix} {val.toFixed(decimals)} {suffix} ); } function MagneticButton({ children, className = "", onClick, as = "button", ...rest }) { const ref = useRef(null); const x = useSpring(0, { stiffness: 200, damping: 15, mass: 0.4 }); const y = useSpring(0, { stiffness: 200, damping: 15, mass: 0.4 }); function handleMove(e) { const rect = ref.current.getBoundingClientRect(); const relX = e.clientX - (rect.left + rect.width / 2); const relY = e.clientY - (rect.top + rect.height / 2); x.set(relX * 0.3); y.set(relY * 0.3); } function handleLeave() { x.set(0); y.set(0); } const Comp = motion[as]; return ( {children} ); } function TiltCard({ children, className = "" }) { const ref = useRef(null); const rx = useSpring(0, { stiffness: 150, damping: 18 }); const ry = useSpring(0, { stiffness: 150, damping: 18 }); const scale = useSpring(1, { stiffness: 150, damping: 18 }); function handleMove(e) { const rect = ref.current.getBoundingClientRect(); const px = (e.clientX - rect.left) / rect.width - 0.5; const py = (e.clientY - rect.top) / rect.height - 0.5; ry.set(px * 14); rx.set(-py * 14); } function reset() { rx.set(0); ry.set(0); scale.set(1); } return ( scale.set(1.03)} onMouseLeave={reset} style={{ rotateX: rx, rotateY: ry, scale, transformPerspective: 900 }} > {children} ); } function Eyebrow({ children, dark = false }) { return (
{children}
); } /* ====================================================================== NAVBAR ====================================================================== */ function Navbar() { const [scrolled, setScrolled] = useState(false); useEffect(() => { function onScroll() { setScrolled(window.scrollY > 20); } window.addEventListener("scroll", onScroll); return () => window.removeEventListener("scroll", onScroll); }, []); return (
Infinity Pixel Empezar Gratis
); } function slugify(s) { return s .toLowerCase() .normalize("NFD") .replace(/[̀-ͯ]/g, "") .replace(/\s+/g, "-"); } function LogoMark({ size = 26, loop = false }) { const gid = useId(); return ( ); } /* ====================================================================== TICKER ====================================================================== */ const TICKER_ITEMS = [ { icon: "🥖", label: "Bakers Manizales", tag: "3.6K seguidores" }, { icon: "🏢", label: "Raíces Inmobiliaria", tag: "697 seguidores" }, { icon: "🌾", label: "Origen Caldas", tag: "2.3K seguidores" }, { icon: "💧", label: "PureWater", tag: "221 seguidores" }, { icon: "🍬", label: "Casa'o", tag: "3.6K seguidores" }, { icon: "📈", label: "El Darling Academy", tag: "4.9K seguidores" }, ]; function Ticker() { const items = [...TICKER_ITEMS, ...TICKER_ITEMS]; return (
{items.map((item, i) => (
{item.icon} {item.label} {item.tag}
))}
); } /* ====================================================================== HERO ====================================================================== */ function Hero({ mouse }) { const blob1x = useTransform(mouse.x, [0, window.innerWidth], [-40, 40]); const blob1y = useTransform(mouse.y, [0, window.innerHeight], [-30, 30]); const blob2x = useTransform(mouse.x, [0, window.innerWidth], [30, -30]); const blob2y = useTransform(mouse.y, [0, window.innerHeight], [20, -20]); const blob1xs = useSpring(blob1x, { damping: 25, stiffness: 60 }); const blob1ys = useSpring(blob1y, { damping: 25, stiffness: 60 }); const blob2xs = useSpring(blob2x, { damping: 25, stiffness: 60 }); const blob2ys = useSpring(blob2y, { damping: 25, stiffness: 60 }); const words = "Contenido que".split(" "); const words2 = "Posiciona tu Marca.".split(" "); return (
Agencia de Contenido para Redes Sociales

{words.map((w, i) => ( {w} ))} {words2.map((w, i) => ( {w} ))}

Estrategia, diseño y producción de contenido para que tu negocio local tenga la presencia que merece en redes sociales.

Solicita tu Auditoría Gratis → Ver casos de éxito
{["🍕", "💇‍♀️", "🦷", "👗"].map((e, i) => (
{e}
))}
Negocios de Manizales que ya confían en Infinity Pixel
); } /* ====================================================================== AGENTS SECTION (24/7 team + pipeline) ====================================================================== */ const AGENT_TABS = ["Vídeo", "Copy", "Diseño", "SEO"]; const AGENT_TAB_COPY = { Vídeo: "Guiones, edición y renderizado automático de reels y shorts listos para publicar.", Copy: "Anuncios, descripciones de producto y posts con el tono de tu marca.", Diseño: "Piezas gráficas, banners y branding coherente en cada publicación.", SEO: "Fichas de Google Business y contenido optimizado para aparecer en búsquedas locales.", }; function AgentsSection() { const [tab, setTab] = useState(AGENT_TABS[0]); const pipeline = usePipelineMock(); return (
Nuestro Equipo

Un Equipo Dedicado a
Posicionar tu Marca.

Especialistas en estrategia, producción y redes que trabajan tu contenido cada semana, sin pausas ni festivos.

{AGENT_TABS.map((t) => ( ))}
{AGENT_TAB_COPY[tab]}
Producción

Contenido Listo en Minutos, no en Semanas.

Nuestro equipo analiza tu negocio, produce piezas de alto impacto y las deja listas para publicar en cualquier canal, sin depender de agencias lentas ni de que tú tengas que aprender a hacerlo.

Ver planes {["Instagram", "TikTok", "Google", "WhatsApp"].map((b) => ( {b} ))}
{pipeline.map((row, i) => (

{row.label}

{row.sub}

))}
); } function usePipelineMock() { const stages = [ { label: "Brief del negocio", sub: "Datos y objetivos recogidos" }, { label: "Producción de contenido", sub: "Vídeo, copy y diseño" }, { label: "Publicación", sub: "Programado en tus redes" }, ]; const statuses = ["Completado", "En proceso", "En cola"]; const [offset, setOffset] = useState(0); useEffect(() => { const id = setInterval(() => setOffset((o) => (o + 1) % statuses.length), 2600); return () => clearInterval(id); }, []); return stages.map((s, i) => ({ ...s, status: statuses[(i + offset) % statuses.length] })); } function StatusPill({ status }) { const styles = { Completado: "bg-mint-400/15 text-mint-500", "En proceso": "bg-violet-100 text-violet-600", "En cola": "bg-black/5 text-ink/40", }; return ( {status} ); } /* ====================================================================== CASOS DE ÉXITO — video gallery ====================================================================== */ const CASE_VIDEOS = [ { src: "videos/tardea-dron.mp4", poster: "posters/tardea-dron.jpg" }, { src: "videos/casao-montadito.mp4", poster: "posters/casao-montadito.jpg" }, { src: "videos/anas-topara.mp4", poster: "posters/anas-topara.jpg" }, { src: "videos/fastfoodbrasil-burger.mp4", poster: "posters/fastfoodbrasil-burger.jpg" }, { src: "videos/bakers-tarta-manzana.mp4", poster: "posters/bakers-tarta-manzana.jpg" }, { src: "videos/divebynature-gorgona.mp4", poster: "posters/divebynature-gorgona.jpg" }, { src: "videos/casao-receta.mp4", poster: "posters/casao-receta.jpg" }, { src: "videos/tardea-michael.mp4", poster: "posters/tardea-michael.jpg" }, { src: "videos/burgerclub-philly.mp4", poster: "posters/burgerclub-philly.jpg" }, { src: "videos/anas-giraldo.mp4", poster: "posters/anas-giraldo.jpg" }, { src: "videos/osmo-nano.mp4", poster: "posters/osmo-nano.jpg" }, { src: "videos/casao-recinto.mp4", poster: "posters/casao-recinto.jpg" }, { src: "videos/tardea-foto-jero.mp4", poster: "posters/tardea-foto-jero.jpg" }, { src: "videos/bakers-24-48-horas.mp4", poster: "posters/bakers-24-48-horas.jpg" }, { src: "videos/anas-bustamante.mp4", poster: "posters/anas-bustamante.jpg" }, { src: "videos/casa-paseo-bosque.mp4", poster: "posters/casa-paseo-bosque.jpg" }, { src: "videos/tardea-pov-botella.mp4", poster: "posters/tardea-pov-botella.jpg" }, { src: "videos/bakers-desayunos.mp4", poster: "posters/bakers-desayunos.jpg" }, ]; const AUTOSCROLL_SPEED = 0.6; function BeforeAfterSection() { const videoRefs = useRef([]); const scrollRef = useRef(null); const hoveringRef = useRef(false); const activeIndexRef = useRef(null); const dirRef = useRef(1); const [activeIndex, setActiveIndex] = useState(null); useEffect(() => { activeIndexRef.current = activeIndex; }, [activeIndex]); useEffect(() => { const id = setInterval(() => { const el = scrollRef.current; if (!el || hoveringRef.current || activeIndexRef.current !== null) return; const max = el.scrollWidth - el.clientWidth; if (max <= 0) return; let next = el.scrollLeft + AUTOSCROLL_SPEED * dirRef.current; if (next >= max) { next = max; dirRef.current = -1; } else if (next <= 0) { next = 0; dirRef.current = 1; } el.scrollLeft = next; }, 30); return () => clearInterval(id); }, []); function handleVideoPlay(index) { videoRefs.current.forEach((el, i) => { if (el && i !== index) el.pause(); }); setActiveIndex(index); } function handleVideoStop(index) { setActiveIndex((current) => (current === index ? null : current)); } function scrollByCards(dir) { scrollRef.current?.scrollBy({ left: dir * 240, behavior: "smooth" }); } return (
Casos de Éxito

De Invisible
a Inolvidable.

Contenido real que ya estamos produciendo para negocios reales.

(hoveringRef.current = true)} onMouseLeave={() => (hoveringRef.current = false)} onTouchStart={() => (hoveringRef.current = true)} onTouchEnd={() => (hoveringRef.current = false)} >
{CASE_VIDEOS.map((v, i) => ( handleVideoPlay(i)} onVideoStop={() => handleVideoStop(i)} videoRef={(el) => (videoRefs.current[i] = el)} /> ))}
); } function VideoCard({ src, poster, isActive, dimmed, onVideoPlay, onVideoStop, videoRef }) { const localRef = useRef(null); const [playing, setPlaying] = useState(false); function setRefs(el) { localRef.current = el; videoRef(el); } function handleClickPlay() { localRef.current.play(); } return ( ); } /* ====================================================================== ROLES SECTION ====================================================================== */ const ROLES = [ { icon: "🍽️", title: "Restaurantes y Hostelería", copy: "Fotos y reels que dan hambre, gestión de reseñas y promos de temporada listas en minutos.", }, { icon: "🛍️", title: "Comercios y Retail", copy: "Fichas de producto, catálogos y campañas de temporada que convierten visitas en ventas.", }, { icon: "💼", title: "Servicios Profesionales", copy: "Contenido de autoridad para clínicas, peluquerías, gimnasios y despachos que genera confianza.", }, ]; function RolesSection() { return (
Roles

Soluciones para Cada Tipo de Negocio.

Ya vendas platos, cortes de pelo o consultas médicas, Infinity Pixel se adapta a tu forma de trabajar.

{ROLES.map((r) => (
{r.icon}

{r.title}

{r.copy}

))}
); } function ToolCTA() { const ref = useRef(null); const { scrollYProgress } = useScroll({ target: ref, offset: ["start end", "end start"] }); const linesX = useTransform(scrollYProgress, [0, 1], [-60, 60]); return (
Auditoría Gratuita

Descubre Cómo
Posicionar tu Marca.

Analizamos tu presencia actual y te mostramos, sin compromiso, el plan para hacerla crecer.

    {["Analizamos tu presencia actual", "Diseñamos tu estrategia de contenido", "Publicas en menos de 2 semanas"].map( (t) => (
  • {t}
  • ) )}
Solicita tu Auditoría →
{[...Array(6)].map((_, i) => (
))}
); } /* ====================================================================== PRICING ====================================================================== */ const PRICING = [ { name: "Plan Sencillo", price: "800.000", desc: "Para negocios que están dando sus primeros pasos en redes.", features: ["8 publicaciones al mes", "Diseño y redacción incluidos", "Atención directa con el equipo"], highlight: false, }, { name: "Plan Intermedio", price: "1.100.000", desc: "Para negocios que quieren mantener una presencia constante.", features: ["12 publicaciones al mes", "Diseño y redacción incluidos", "Atención directa con el equipo"], highlight: true, }, { name: "Plan Premium", price: "1.500.000", desc: "Para negocios que quieren maximizar su presencia en redes.", features: ["16 publicaciones al mes", "Diseño y redacción incluidos", "Atención directa con el equipo"], highlight: false, }, ]; function PricingSection() { return (
Precios

Planes para Cada Etapa de tu Negocio.

Sin permanencia. Cambia o cancela cuando quieras.

{PRICING.map((p) => (
{p.highlight && ( Más popular )}

{p.name}

{p.desc}

${p.price} COP/mes
    {p.features.map((f) => (
  • {f}
  • ))}
Elegir {p.name}
))}
); } /* ====================================================================== RESOURCES GRID ====================================================================== */ const RESOURCES = [ { title: "Casos de Éxito", copy: "Historias reales de negocios que despegaron con Infinity Pixel.", color: "bg-[#ffb3c7]" }, { title: "Academia", copy: "Cursos gratuitos sobre contenido, marca y redes sociales.", color: "bg-[#0b4fc4] text-white" }, { title: "Blog de Marketing", copy: "Ideas, tendencias y análisis para negocios locales.", color: "bg-[#5ee6f0]" }, { title: "Plantillas Gratis", copy: "Guiones, calendarios de contenido y ejemplos listos para usar.", color: "bg-[#ffb066]" }, ]; function ResourcesSection() { return (
Aprende

Recursos e Ideas para Vender Más.

{RESOURCES.map((r) => (

{r.title}

{r.copy}

Explorar
))}
); } /* ====================================================================== FINAL CTA ====================================================================== */ function FinalCTA() { const ref = useRef(null); const { scrollYProgress } = useScroll({ target: ref, offset: ["start end", "end start"] }); const orbScale = useTransform(scrollYProgress, [0, 0.5, 1], [0.8, 1.3, 0.8]); return (

Posiciona tu Marca.
Que te Vean, que te Recuerden.

Únete a los negocios de Manizales que ya construyeron una presencia de marca sólida en redes sociales.

Empezar Ahora
); } /* ====================================================================== FOOTER ====================================================================== */ function Footer() { const cols = [ { title: "Navegación", items: ["Inicio", "Servicios", "Casos de Éxito", "Precios"] }, { title: "Trabaja con Nosotros", items: ["Auditoría Gratuita", "Portfolio", "Únete al Equipo"] }, { title: "Recursos", items: ["Academia", "Blog", "Plantillas", "Ayuda"] }, ]; return (
Infinity Pixel

Agencia de contenido para redes sociales con sede en Manizales, Caldas.

{cols.map((c) => (

{c.title}

    {c.items.map((i) => (
  • {i}
  • ))}
))}
© 2026 Infinity Pixel. Todos los derechos reservados.

Infinity Pixel

); } /* ====================================================================== APP ====================================================================== */ function App() { useLenis(); const mouse = useMouse(); return ( <>