8 Commits

Author SHA1 Message Date
kudinDmitriyUp
d2237152cc Bob AI: fix build errors (attempt 1) 2026-06-18 23:14:11 +00:00
kudinDmitriyUp
7305ca2d9a Bob AI: Update theme colors, typography, and add logo to navbar and 2026-06-18 23:12:52 +00:00
71b0f4b6bf Merge version_3_1781824135871 into main
Merge version_3_1781824135871 into main
2026-06-18 23:08:59 +00:00
fd0f075890 Update theme colors 2026-06-18 23:08:56 +00:00
70abbe2edc Merge version_2_1781824131437 into main
Merge version_2_1781824131437 into main
2026-06-18 23:08:55 +00:00
ce9a6cb10b Merge version_1_1781823209252 into main
Merge version_1_1781823209252 into main
2026-06-18 22:55:48 +00:00
a9c1a2cfd3 Merge version_1_1781823209252 into main
Merge version_1_1781823209252 into main
2026-06-18 22:54:58 +00:00
a9db29ec45 Merge version_1_1781823209252 into main
Merge version_1_1781823209252 into main
2026-06-18 22:54:01 +00:00
10 changed files with 239 additions and 142 deletions

View File

@@ -1,5 +1,5 @@
import FooterBasic from '@/components/sections/footer/FooterBasic';
import NavbarCentered from '@/components/ui/NavbarCentered';
import NavbarFloatingLogo from '@/components/ui/NavbarFloatingLogo';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
import SiteBackgroundSlot from "@/components/ui/SiteBackgroundSlot";
import { Outlet } from 'react-router-dom';
@@ -41,8 +41,9 @@ export default function Layout() {
<StyleProvider buttonVariant="arrow" siteBackground="gridDots" heroBackground="lightRaysCenter">
<SiteBackgroundSlot />
<SectionErrorBoundary name="navbar">
<NavbarCentered
<NavbarFloatingLogo
logo="Lumio"
logoImageSrc="https://storage.googleapis.com/webild/users/user_3FKULPo3nJpi6Z8XrIaYR86bCR6/uploaded-1781824255750-ixcd2q4j.png"
ctaButton={{
text: "Agenda tu diagnóstico",
href: "#contacto",
@@ -53,6 +54,13 @@ export default function Layout() {
<Outlet />
</main>
<SectionErrorBoundary name="footer">
<div className="w-full bg-background pb-4 flex justify-center">
<img
src="https://storage.googleapis.com/webild/users/user_3FKULPo3nJpi6Z8XrIaYR86bCR6/uploaded-1781824255750-ixcd2q4j.png"
alt="Lumio Logo"
className="h-12 object-contain"
/>
</div>
<FooterBasic
columns={[
{
@@ -105,4 +113,4 @@ export default function Layout() {
</SectionErrorBoundary>
</StyleProvider>
);
}
}

View File

@@ -1,19 +1,19 @@
@import url('https://fonts.googleapis.com/css2?family=Figtree:wght@400;500;600;700&display=swap');
@import url('https://fonts.googleapis.com/css2?family=Hanken+Grotesk:wght@400;500;600;700&family=Space+Grotesk:wght@400;500;600;700&display=swap');
@import "tailwindcss";
@import "./styles/masks.css";
@import "./styles/animations.css";
:root {
/* @colorThemes/lightTheme/grayNavyBlue */
--background: #050012;
--card: #040121;
--foreground: #f0e6ff;
--primary-cta: #c89bff;
--primary-cta-text: #050012;
--secondary-cta: #1d123b;
--secondary-cta-text: #f0e6ff;
--accent: #684f7b;
--background-accent: #65417c;
--background: #FAFAFB;
--card: #FFFFFF;
--foreground: #15171C;
--primary-cta: #FF6FB1;
--primary-cta-text: #FFFFFF;
--secondary-cta: #FFFFFF;
--secondary-cta-text: #15171C;
--accent: #6A6F7B;
--background-accent: #E2E8F0;
/* @layout/border-radius/rounded */
--radius: 1.5rem;
@@ -88,8 +88,8 @@
--color-background-accent: var(--background-accent);
/* Fonts */
--font-sans: 'Figtree', sans-serif;
--font-tight: "Inter Tight", sans-serif;
--font-sans: 'Hanken Grotesk', sans-serif;
--font-tight: "Space Grotesk", sans-serif;
--font-mono: monospace;
/* Border Radius */

View File

@@ -1,138 +1,33 @@
import AboutTextSplit from '@/components/sections/about/AboutTextSplit';
import ContactCta from '@/components/sections/contact/ContactCta';
import FeaturesBento from '@/components/sections/features/FeaturesBento';
import FeaturesRevealCardsBento from '@/components/sections/features/FeaturesRevealCardsBento';
import HeroBillboardTiltedCarousel from '@/components/sections/hero/HeroBillboardTiltedCarousel';
import MetricsIconCards from '@/components/sections/metrics/MetricsIconCards';
import TestimonialOverlayCards from '@/components/sections/testimonial/TestimonialOverlayCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
// AUTO-GENERATED shell by per-section-migrate.
// Section bodies live in ./<PageBase>/sections/<X>.tsx. Edit the section
// files directly. Non-block content (wrappers, non-inlinable sections) is
// preserved inline; extracted section blocks become <XSection/> refs.
export default function HomePage() {
import React from 'react';
import HeroSection from './HomePage/sections/Hero';
import ProblemaSection from './HomePage/sections/Problema';
import ServiciosSection from './HomePage/sections/Servicios';
import SistemaSection from './HomePage/sections/Sistema';
import ProcesoSection from './HomePage/sections/Proceso';
import PorQueSection from './HomePage/sections/PorQue';
import ContactoSection from './HomePage/sections/Contacto';
export default function HomePage(): React.JSX.Element {
return (
<>
<div id="hero" data-section="hero">
<SectionErrorBoundary name="hero">
<HeroBillboardTiltedCarousel
tag="AGENCIA DE MARKETING DIGITAL"
title="Más pacientes. \nMenos preocupaciones."
description="Gestionamos redes, anuncios y embudos para atraer pacientes calificados en Cota, Chía y Bogotá."
primaryButton={{
text: "Agenda tu diagnóstico gratis", href: "#contacto"}}
secondaryButton={{
text: "Cómo lo hacemos →", href: "#sistema"}}
items={[
{ imageSrc: "http://img.b2bpic.net/free-photo/high-tech-view-futuristic-earth_23-2151100368.jpg" },
{ imageSrc: "http://img.b2bpic.net/free-photo/armchair-couch_1203-772.jpg" },
{ imageSrc: "http://img.b2bpic.net/free-photo/futuristic-ai-data-visualization_23-2151977857.jpg" },
{ imageSrc: "http://img.b2bpic.net/free-photo/architect-with-wireless-headset-using-laptop-while-working-home-night-sitting-kitchen-industrial-female-engineer-studying-personal-computer-showing-cad-software_482257-14609.jpg" },
{ imageSrc: "http://img.b2bpic.net/free-photo/blurred-night-lights_23-2148139260.jpg" },
{ imageSrc: "http://img.b2bpic.net/free-photo/colleagues-smiling-speaking-discussing-drawings-new-ideas-office_176420-1684.jpg" },
]}
/>
</SectionErrorBoundary>
</div>
<>
<HeroSection />
<div id="problema" data-section="problema">
<SectionErrorBoundary name="problema">
<AboutTextSplit
title="Tienes un gran servicio. Pero tu agenda no lo refleja."
descriptions={[
"Tus redes sociales permanecen quietas a pesar de tu esfuerzo.", "Inviertes dinero en anuncios publicitarios casi a ciegas.", "Te llegan cientos de curiosos, pero pocos pacientes reales.", "No tienes el tiempo técnico necesario para gestionar tu marketing."]}
/>
</SectionErrorBoundary>
</div>
<ProblemaSection />
<div id="servicios" data-section="servicios">
<SectionErrorBoundary name="servicios">
<FeaturesRevealCardsBento
tag="SERVICIOS"
title="Lo que hacemos"
description="Estrategias de crecimiento validadas para el sector estético."
items={[
{ title: "Gestión de Redes", description: "Contenido estratégico que genera confianza.", href: "#", imageSrc: "https://storage.googleapis.com/webild/default/no-image.jpg?id=7kpo9u" },
{ title: "Meta Ads", description: "Anuncios optimizados para atraer pacientes.", href: "#", imageSrc: "http://img.b2bpic.net/free-photo/money-fantasy-scene_23-2151663100.jpg" },
{ title: "Google Ads", description: "Captura búsquedas con intención alta.", href: "#", imageSrc: "http://img.b2bpic.net/free-photo/top-view-notebook-yellow-background_23-2149382391.jpg" },
{ title: "Embudo de Conversión", description: "Transformamos clics en citas.", href: "#", imageSrc: "http://img.b2bpic.net/free-photo/network-connection-graphic-overlay-banner_53876-120356.jpg" },
{ title: "Email Marketing", description: "Nutrición de pacientes potenciales.", href: "#", imageSrc: "http://img.b2bpic.net/free-photo/letter-envelop-message-notification-concept_53876-13786.jpg" },
{ title: "Reportes Semanales", description: "Transparencia total sobre los resultados.", href: "#", imageSrc: "http://img.b2bpic.net/free-photo/creative-business-arrangement-with-colorful-graphics_23-2148488605.jpg" },
{ title: "Consultoría Estratégica", description: "Optimización del negocio estético.", href: "#", imageSrc: "http://img.b2bpic.net/free-photo/drawing-tree-with-ideas_1134-298.jpg" },
]}
/>
</SectionErrorBoundary>
</div>
<ServiciosSection />
<div id="sistema" data-section="sistema">
<SectionErrorBoundary name="sistema">
<FeaturesBento
tag="EL SISTEMA"
title="Así convertimos tráfico en pacientes"
description="Un embudo diseñado para la conversión constante."
features={[
{
title: "Tráfico Calificado", description: "Segmentación geográfica y demográfica precisa.", bentoComponent: "orbiting-icons", centerIcon: "Target", orbitIcons: ["Facebook", "Instagram", "Google"],
},
{
title: "Interacción", description: "Engagement que calienta el interés.", bentoComponent: "chat-marquee", aiIcon: "MessageCircle", userIcon: "User", exchanges: [{ userMessage: "Me gustaría una valoración.", aiResponse: "¡Claro! Agenda aquí." }],
placeholder: "..."},
{
title: "Conversión", description: "Agenda confirmada.", bentoComponent: "checklist-timeline", heading: "El proceso", subheading: "Pasos simples", checklistItems: [
{ label: "Registro", detail: "Formulario rápido" },
{ label: "WhatsApp", detail: "Conversación humana" },
{ label: "Cita", detail: "Cierre en agenda" },
],
completedLabel: "Confirmado"},
{
title: "Pacientes Reales", description: "Resultados de negocio.", bentoComponent: "animated-bar-chart"},
]}
/>
</SectionErrorBoundary>
</div>
<SistemaSection />
<div id="proceso" data-section="proceso">
<SectionErrorBoundary name="proceso">
<MetricsIconCards
tag="PASOS"
title="Cómo trabajamos"
description="Nuestro sistema es transparente y optimizable."
metrics={[
{ icon: "Search", title: "01 Diagnóstico", value: "Base" },
{ icon: "Lightbulb", title: "02 Estrategia", value: "Diseño" },
{ icon: "Zap", title: "03 Ejecución", value: "Meta" },
{ icon: "TrendingUp", title: "04 Optimización", value: "KPIs" },
]}
/>
</SectionErrorBoundary>
</div>
<ProcesoSection />
<div id="por-que" data-section="por-que">
<SectionErrorBoundary name="por-que">
<TestimonialOverlayCards
tag="POR QUÉ NOSOTROS"
title="Una agencia enfocada, no una fábrica de clientes"
description="La transparencia y los resultados son nuestra prioridad."
testimonials={[
{ name: "Enfoque Local", role: "Transparencia Total", company: "Reportes semanales", rating: 5, imageSrc: "http://img.b2bpic.net/free-photo/smiling-colleagues-working-with-laptops-notebooks_171337-17169.jpg" },
{ name: "Trato Directo", role: "Sin intermediarios", company: "Comunicación real", rating: 5, imageSrc: "http://img.b2bpic.net/free-photo/two-businessmen-mad-each-other-trying-come-agreement_1150-2623.jpg" },
{ name: "Flexibilidad", role: "Sin contratos eternos", company: "Crecemos juntos", rating: 5, imageSrc: "http://img.b2bpic.net/free-photo/conceptual-success-business-with-wooden-human-rectangle-blocks_176474-10564.jpg" },
{ name: "Data Driven", role: "Estrategia", company: "Resultados, no promesas", rating: 5, imageSrc: "http://img.b2bpic.net/free-photo/people-tablet-with-bar-graph_1134-472.jpg" },
{ name: "Calidad", role: "Enfoque Salud", company: "Normativa legal", rating: 5, imageSrc: "http://img.b2bpic.net/free-photo/cotton-flower-vase-wooden-floor_53876-105954.jpg" },
]}
/>
</SectionErrorBoundary>
</div>
<PorQueSection />
<div id="contacto" data-section="contacto">
<SectionErrorBoundary name="contacto">
<ContactCta
tag="CONTACTO"
text="¿Listo para llenar tu agenda con pacientes calificados?"
primaryButton={{
text: "Hablemos por WhatsApp", href: "https://wa.me/573000000000"}}
secondaryButton={{
text: "Enviar correo", href: "mailto:hola@lumio.com"}}
/>
</SectionErrorBoundary>
</div>
<ContactoSection />
</>
);
}

View File

@@ -0,0 +1,23 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "contacto" section.
import React from 'react';
import ContactCta from '@/components/sections/contact/ContactCta';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function ContactoSection(): React.JSX.Element {
return (
<div id="contacto" data-section="contacto">
<SectionErrorBoundary name="contacto">
<ContactCta
tag="CONTACTO"
text="¿Listo para llenar tu agenda con pacientes calificados?"
primaryButton={{
text: "Hablemos por WhatsApp", href: "https://wa.me/573000000000"}}
secondaryButton={{
text: "Enviar correo", href: "mailto:hola@lumio.com"}}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,32 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "hero" section.
import React from 'react';
import HeroBillboardTiltedCarousel from '@/components/sections/hero/HeroBillboardTiltedCarousel';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function HeroSection(): React.JSX.Element {
return (
<div id="hero" data-section="hero">
<SectionErrorBoundary name="hero">
<HeroBillboardTiltedCarousel
tag="AGENCIA DE MARKETING DIGITAL"
title="Más pacientes. \nMenos preocupaciones."
description="Gestionamos redes, anuncios y embudos para atraer pacientes calificados en Cota, Chía y Bogotá."
primaryButton={{
text: "Agenda tu diagnóstico gratis", href: "#contacto"}}
secondaryButton={{
text: "Cómo lo hacemos →", href: "#sistema"}}
items={[
{ imageSrc: "http://img.b2bpic.net/free-photo/high-tech-view-futuristic-earth_23-2151100368.jpg" },
{ imageSrc: "http://img.b2bpic.net/free-photo/armchair-couch_1203-772.jpg" },
{ imageSrc: "http://img.b2bpic.net/free-photo/futuristic-ai-data-visualization_23-2151977857.jpg" },
{ imageSrc: "http://img.b2bpic.net/free-photo/architect-with-wireless-headset-using-laptop-while-working-home-night-sitting-kitchen-industrial-female-engineer-studying-personal-computer-showing-cad-software_482257-14609.jpg" },
{ imageSrc: "http://img.b2bpic.net/free-photo/blurred-night-lights_23-2148139260.jpg" },
{ imageSrc: "http://img.b2bpic.net/free-photo/colleagues-smiling-speaking-discussing-drawings-new-ideas-office_176420-1684.jpg" },
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,27 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "por-que" section.
import React from 'react';
import TestimonialOverlayCards from '@/components/sections/testimonial/TestimonialOverlayCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function PorQueSection(): React.JSX.Element {
return (
<div id="por-que" data-section="por-que">
<SectionErrorBoundary name="por-que">
<TestimonialOverlayCards
tag="POR QUÉ NOSOTROS"
title="Una agencia enfocada, no una fábrica de clientes"
description="La transparencia y los resultados son nuestra prioridad."
testimonials={[
{ name: "Enfoque Local", role: "Transparencia Total", company: "Reportes semanales", rating: 5, imageSrc: "http://img.b2bpic.net/free-photo/smiling-colleagues-working-with-laptops-notebooks_171337-17169.jpg" },
{ name: "Trato Directo", role: "Sin intermediarios", company: "Comunicación real", rating: 5, imageSrc: "http://img.b2bpic.net/free-photo/two-businessmen-mad-each-other-trying-come-agreement_1150-2623.jpg" },
{ name: "Flexibilidad", role: "Sin contratos eternos", company: "Crecemos juntos", rating: 5, imageSrc: "http://img.b2bpic.net/free-photo/conceptual-success-business-with-wooden-human-rectangle-blocks_176474-10564.jpg" },
{ name: "Data Driven", role: "Estrategia", company: "Resultados, no promesas", rating: 5, imageSrc: "http://img.b2bpic.net/free-photo/people-tablet-with-bar-graph_1134-472.jpg" },
{ name: "Calidad", role: "Enfoque Salud", company: "Normativa legal", rating: 5, imageSrc: "http://img.b2bpic.net/free-photo/cotton-flower-vase-wooden-floor_53876-105954.jpg" },
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,20 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "problema" section.
import React from 'react';
import AboutTextSplit from '@/components/sections/about/AboutTextSplit';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function ProblemaSection(): React.JSX.Element {
return (
<div id="problema" data-section="problema">
<SectionErrorBoundary name="problema">
<AboutTextSplit
title="Tienes un gran servicio. Pero tu agenda no lo refleja."
descriptions={[
"Tus redes sociales permanecen quietas a pesar de tu esfuerzo.", "Inviertes dinero en anuncios publicitarios casi a ciegas.", "Te llegan cientos de curiosos, pero pocos pacientes reales.", "No tienes el tiempo técnico necesario para gestionar tu marketing."]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,26 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "proceso" section.
import React from 'react';
import MetricsIconCards from '@/components/sections/metrics/MetricsIconCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function ProcesoSection(): React.JSX.Element {
return (
<div id="proceso" data-section="proceso">
<SectionErrorBoundary name="proceso">
<MetricsIconCards
tag="PASOS"
title="Cómo trabajamos"
description="Nuestro sistema es transparente y optimizable."
metrics={[
{ icon: "Search", title: "01 Diagnóstico", value: "Base" },
{ icon: "Lightbulb", title: "02 Estrategia", value: "Diseño" },
{ icon: "Zap", title: "03 Ejecución", value: "Meta" },
{ icon: "TrendingUp", title: "04 Optimización", value: "KPIs" },
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,29 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "servicios" section.
import React from 'react';
import FeaturesRevealCardsBento from '@/components/sections/features/FeaturesRevealCardsBento';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function ServiciosSection(): React.JSX.Element {
return (
<div id="servicios" data-section="servicios">
<SectionErrorBoundary name="servicios">
<FeaturesRevealCardsBento
tag="SERVICIOS"
title="Lo que hacemos"
description="Estrategias de crecimiento validadas para el sector estético."
items={[
{ title: "Gestión de Redes", description: "Contenido estratégico que genera confianza.", href: "#", imageSrc: "https://storage.googleapis.com/webild/default/no-image.jpg?id=7kpo9u" },
{ title: "Meta Ads", description: "Anuncios optimizados para atraer pacientes.", href: "#", imageSrc: "http://img.b2bpic.net/free-photo/money-fantasy-scene_23-2151663100.jpg" },
{ title: "Google Ads", description: "Captura búsquedas con intención alta.", href: "#", imageSrc: "http://img.b2bpic.net/free-photo/top-view-notebook-yellow-background_23-2149382391.jpg" },
{ title: "Embudo de Conversión", description: "Transformamos clics en citas.", href: "#", imageSrc: "http://img.b2bpic.net/free-photo/network-connection-graphic-overlay-banner_53876-120356.jpg" },
{ title: "Email Marketing", description: "Nutrición de pacientes potenciales.", href: "#", imageSrc: "http://img.b2bpic.net/free-photo/letter-envelop-message-notification-concept_53876-13786.jpg" },
{ title: "Reportes Semanales", description: "Transparencia total sobre los resultados.", href: "#", imageSrc: "http://img.b2bpic.net/free-photo/creative-business-arrangement-with-colorful-graphics_23-2148488605.jpg" },
{ title: "Consultoría Estratégica", description: "Optimización del negocio estético.", href: "#", imageSrc: "http://img.b2bpic.net/free-photo/drawing-tree-with-ideas_1134-298.jpg" },
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,37 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "sistema" section.
import React from 'react';
import FeaturesBento from '@/components/sections/features/FeaturesBento';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function SistemaSection(): React.JSX.Element {
return (
<div id="sistema" data-section="sistema">
<SectionErrorBoundary name="sistema">
<FeaturesBento
tag="EL SISTEMA"
title="Así convertimos tráfico en pacientes"
description="Un embudo diseñado para la conversión constante."
features={[
{
title: "Tráfico Calificado", description: "Segmentación geográfica y demográfica precisa.", bentoComponent: "orbiting-icons", centerIcon: "Target", orbitIcons: ["Facebook", "Instagram", "Google"],
},
{
title: "Interacción", description: "Engagement que calienta el interés.", bentoComponent: "chat-marquee", aiIcon: "MessageCircle", userIcon: "User", exchanges: [{ userMessage: "Me gustaría una valoración.", aiResponse: "¡Claro! Agenda aquí." }],
placeholder: "..."},
{
title: "Conversión", description: "Agenda confirmada.", bentoComponent: "checklist-timeline", heading: "El proceso", subheading: "Pasos simples", checklistItems: [
{ label: "Registro", detail: "Formulario rápido" },
{ label: "WhatsApp", detail: "Conversación humana" },
{ label: "Cita", detail: "Cierre en agenda" },
],
completedLabel: "Confirmado"},
{
title: "Pacientes Reales", description: "Resultados de negocio.", bentoComponent: "animated-bar-chart"},
]}
/>
</SectionErrorBoundary>
</div>
);
}