Merge version_2_1781550699769 into main #1

Merged
bender merged 3 commits from version_2_1781550699769 into main 2026-06-15 19:18:29 +00:00
10 changed files with 261 additions and 300 deletions

View File

@@ -5,15 +5,15 @@
:root {
/* @colorThemes/lightTheme/grayNavyBlue */
--background: #f6f0e9;
--card: #efe7dd;
--foreground: #2b180a;
--primary-cta: #2b180a;
--primary-cta-text: #f6f0e9;
--secondary-cta: #efe7dd;
--secondary-cta-text: #2b180a;
--accent: #94877c;
--background-accent: #afa094;
--background: #0a0a0a;
--card: #141414;
--foreground: #e5e5e5;
--primary-cta: #ffffff;
--primary-cta-text: #000000;
--secondary-cta: #262626;
--secondary-cta-text: #e5e5e5;
--accent: #8c7355;
--background-accent: #1f1f1f;
/* @layout/border-radius/rounded */
--radius: 1rem;

View File

@@ -1,303 +1,36 @@
import AboutText from '@/components/sections/about/AboutText';
import ContactCta from '@/components/sections/contact/ContactCta';
import FaqSplitMedia from '@/components/sections/faq/FaqSplitMedia';
import FeaturesDetailedCards from '@/components/sections/features/FeaturesDetailedCards';
import FeaturesRevealCardsBento from '@/components/sections/features/FeaturesRevealCardsBento';
import HeroSplitVerticalMarquee from '@/components/sections/hero/HeroSplitVerticalMarquee';
import MetricsFeatureCards from '@/components/sections/metrics/MetricsFeatureCards';
import TestimonialRatingCards from '@/components/sections/testimonial/TestimonialRatingCards';
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 AboutSection from './HomePage/sections/About';
import ServicesSection from './HomePage/sections/Services';
import ShowcaseSection from './HomePage/sections/Showcase';
import MetricsSection from './HomePage/sections/Metrics';
import TestimonialsSection from './HomePage/sections/Testimonials';
import FaqSection from './HomePage/sections/Faq';
import ContactSection from './HomePage/sections/Contact';
export default function HomePage(): React.JSX.Element {
return (
<>
<div id="hero" data-section="hero">
<SectionErrorBoundary name="hero">
<HeroSplitVerticalMarquee
tag="Artesanos de la madera"
title="Creamos mobiliario con alma y precisión"
description="Transformamos madera maciza en piezas únicas diseñadas para durar generaciones, combinando técnicas tradicionales con diseño contemporáneo."
primaryButton={{
text: "Ver Portafolio",
href: "#services",
}}
secondaryButton={{
text: "Hablemos",
href: "#contact",
}}
leftItems={[
{
imageSrc: "http://img.b2bpic.net/free-photo/high-view-person-measuring-ring_23-2148643243.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/set-hand-tool-with-nails-small-tag-slate-grunge-backdrop_23-2147866977.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/man-making-instruments-his-workshop_23-2149018568.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/close-up-man-working-with-wood_23-2148898042.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/front-view-construction-roof_23-2148748814.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/tools-stand-inside-old-atelier_114579-12142.jpg",
},
]}
rightItems={[
{
imageSrc: "http://img.b2bpic.net/free-photo/wooden-flooring-textured-background-design_53876-128568.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/close-up-photo-painting-wood-brown-color_176420-4792.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/spaghetties-with-wheat-grains-grey-surface_114579-34568.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/flat-lay-artisan-jobs-equipment-diy-word-assortment_23-2148732423.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/photo-wood-texture-pattern_58702-15444.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/engraving-instrument-arrangement-table_23-2149061689.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<>
<HeroSection />
<div id="about" data-section="about">
<SectionErrorBoundary name="about">
<AboutText
title="Nuestra Filosofía Artesanal"
primaryButton={{
text: "Nuestra Historia",
href: "#about",
}}
/>
</SectionErrorBoundary>
</div>
<AboutSection />
<div id="services" data-section="services">
<SectionErrorBoundary name="services">
<FeaturesDetailedCards
tag="Expertise"
title="Soluciones a Medida"
description="Desde cocinas integrales hasta restauración de muebles antiguos, cubrimos todas las necesidades de carpintería."
items={[
{
title: "Cocinas de Diseño",
description: "Personalizamos cada rincón de tu cocina con materiales premium y terminaciones impecables.",
tags: [
"Cocinas",
"Premium",
],
imageSrc: "http://img.b2bpic.net/free-photo/kitchen-interior-design-with-wooden-furniture_23-2148848699.jpg",
},
{
title: "Muebles a Medida",
description: "Diseños exclusivos adaptados perfectamente a las dimensiones de tu hogar y tus necesidades.",
tags: [
"Muebles",
"Custom",
],
imageSrc: "http://img.b2bpic.net/free-photo/high-angle-shot-wooden-toy-track-races_181624-32480.jpg",
},
{
title: "Carpintería Estructural",
description: "Pergolas, decks y estructuras de madera sólida con alta durabilidad y estilo.",
tags: [
"Estructura",
"Exterior",
],
imageSrc: "http://img.b2bpic.net/free-photo/carpenter-man-taking-measures-wood-plank_23-2148748813.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<ServicesSection />
<div id="showcase" data-section="showcase">
<SectionErrorBoundary name="showcase">
<FeaturesRevealCardsBento
tag="Portafolio"
title="Proyectos destacados"
description="Una muestra de nuestra dedicación al detalle y amor por la madera."
items={[
{
title: "Mesa de Roble",
description: "Comedor minimalista.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/minimal-abstract-concept-pear-front-view_23-2148835277.jpg",
},
{
title: "Biblioteca",
description: "Diseño en encina.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/waffle-sticks-glass-jar-inside-wooden-tray_114579-19163.jpg",
},
{
title: "Puertas",
description: "Entrada principal.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/colorful-mexican-architecture-urban-landscape_23-2149749937.jpg",
},
{
title: "Escritorio",
description: "Madera de nogal.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/laptop-notepad-paper-cup-computer-mouse-wooden-table-top-view_169016-50119.jpg",
},
{
title: "Escalera",
description: "Diseño a medida.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/closeup-staircase-industrial-style-wood-metal-texture_169016-69156.jpg",
},
{
title: "Vanitory",
description: "Baño con estilo.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/wooden-piece-furniture-interior-design_23-2148848664.jpg",
},
{
title: "Vestidor",
description: "Organización total.",
href: "#",
imageSrc: "http://img.b2bpic.net/free-photo/kitchen-symmetry-metal-cutlery-minimalist-storage_169016-68870.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<ShowcaseSection />
<div id="metrics" data-section="metrics">
<SectionErrorBoundary name="metrics">
<MetricsFeatureCards
tag="Trayectoria"
title="Calidad que nos respalda"
description="Más de una década transformando hogares."
metrics={[
{
value: "15+",
title: "Años de experiencia",
features: [
"Legado",
"Confianza",
],
},
{
value: "500+",
title: "Proyectos entregados",
features: [
"Calidad",
"Puntualidad",
],
},
{
value: "100%",
title: "Clientes satisfechos",
features: [
"Garantía",
"Compromiso",
],
},
]}
/>
</SectionErrorBoundary>
</div>
<MetricsSection />
<div id="testimonials" data-section="testimonials">
<SectionErrorBoundary name="testimonials">
<TestimonialRatingCards
tag="Opiniones"
title="Lo que dicen nuestros clientes"
description="La satisfacción de nuestros clientes es nuestro mejor testimonio."
testimonials={[
{
name: "Ana García",
role: "Arquitecta",
quote: "Excelente trabajo, gran atención al detalle.",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/pretty-student-girl-with-gathered-hair-make-up-relaxing-home-after-lectures-university-attractive-cheerful-young-woman-blue-dress-sitting-comfortable-couch-with-joyful-relaxed-smile_343059-2102.jpg",
},
{
name: "Luis Pérez",
role: "Dueño de casa",
quote: "Los muebles quedaron perfectos, un lujo.",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/handsome-man-outdoors-portrait_158595-3548.jpg",
},
{
name: "Elena Martínez",
role: "Diseñadora",
quote: "Profesionalismo total en la entrega.",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/front-view-smiley-architect-looking-camera_23-2148242889.jpg",
},
{
name: "Carlos Ruíz",
role: "Desarrollador",
quote: "La calidad de la madera es espectacular.",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/high-angle-man-home-using-mobile_23-2148306608.jpg",
},
{
name: "Sofía López",
role: "Chef",
quote: "Increíble cocina, diseño impecable.",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/african-american-girl-posing-with-sincere-smile-studio-shot-cheerful-curly-young-woman-isolated-beige-background_197531-28951.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<TestimonialsSection />
<div id="faq" data-section="faq">
<SectionErrorBoundary name="faq">
<FaqSplitMedia
tag="Preguntas"
title="Dudas frecuentes"
description="Todo lo que necesitas saber antes de empezar tu proyecto."
items={[
{
question: "¿Cuánto demora un mueble?",
answer: "Depende de la complejidad, generalmente 3 a 6 semanas.",
},
{
question: "¿Usan madera certificada?",
answer: "Sí, solo utilizamos fuentes sustentables.",
},
{
question: "¿Hacen envíos?",
answer: "Sí, realizamos envíos en todo el territorio.",
},
]}
imageSrc="http://img.b2bpic.net/free-photo/fishing-reel-lure-corkboard-wooden-desk_23-2148189274.jpg"
/>
</SectionErrorBoundary>
</div>
<FaqSection />
<div id="contact" data-section="contact">
<SectionErrorBoundary name="contact">
<ContactCta
tag="Contacto"
text="¿Tienes una idea en mente? Hagámosla realidad hoy mismo."
primaryButton={{
text: "Solicitar Cotización",
href: "#",
}}
secondaryButton={{
text: "Llamar ahora",
href: "tel:123456789",
}}
/>
</SectionErrorBoundary>
</div>
<ContactSection />
</>
);
}

View File

@@ -0,0 +1,19 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "about" section.
import React from 'react';
import AboutText from '@/components/sections/about/AboutText';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function AboutSection(): React.JSX.Element {
return (
<div id="about" data-section="about">
<SectionErrorBoundary name="about">
<AboutText
title="Norte Bravo Carpintería nace de la pasión por construir espacios con carácter. Especializados en carpintería comercial, montaje de stands, showrooms y escaparates para marcas que buscan diferenciarse. Trabajamos con precisión, detalle y mentalidad internacional, creando proyectos que no solo se construyen, sino que se sienten."
primaryButton={{"href":"#services","text":"Nuestros servicios"}}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,21 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "contact" section.
import React from 'react';
import ContactCta from '@/components/sections/contact/ContactCta';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function ContactSection(): React.JSX.Element {
return (
<div id="contact" data-section="contact">
<SectionErrorBoundary name="contact">
<ContactCta
tag="Contacto"
text="¿Tienes un proyecto en mente? Hablemos."
primaryButton={{"href":"#","text":"Solicitar presupuesto"}}
secondaryButton={{"text":"hola@nortebravo.com","href":"mailto:hola@nortebravo.com"}}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,22 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "faq" section.
import React from 'react';
import FaqSplitMedia from '@/components/sections/faq/FaqSplitMedia';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function FaqSection(): React.JSX.Element {
return (
<div id="faq" data-section="faq">
<SectionErrorBoundary name="faq">
<FaqSplitMedia
tag="El Fundador"
title="Norte Bravo"
description="Un carpintero moderno, trabajador, internacional y diferente. Pasión por el oficio."
items={[{"answer":"Nos dedicamos en cuerpo y alma a cada proyecto, asegurando que el resultado final sea perfecto.","question":"Trabajo duro"},{"answer":"Cada milímetro cuenta. Utilizamos técnicas avanzadas y herramientas de última generación.","question":"Precisión"},{"answer":"Buscamos siempre el equilibrio perfecto entre funcionalidad y un diseño visualmente impactante.","question":"Estética"},{"answer":"Años de trabajo en el sector nos avalan, enfrentando retos complejos con soluciones eficaces.","question":"Experiencia real"},{"question":"Espíritu viajero","answer":"Inspirados por tendencias globales, aportamos una visión internacional a cada diseño."},{"answer":"Siempre buscando mejorar, aprender nuevas técnicas y superar nuestros propios límites.","question":"Mentalidad de crecimiento"}]}
imageSrc="https://picsum.photos/seed/154548791/1200/800"
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,74 @@
/* eslint-disable */
// @ts-nocheck — generated by catalog-eject; runtime-correct but TS strict-mode false-positives on inlined catalog body
import Button from "@/components/ui/Button";
import HeroBackgroundSlot from "@/components/ui/HeroBackgroundSlot";
import TextAnimation from "@/components/ui/TextAnimation";
import ImageOrVideo from "@/components/ui/ImageOrVideo";
import ScrollReveal from "@/components/ui/ScrollReveal";
const primaryButton = {
href: "#showcase",
text: "Ver proyectos"
};
const secondaryButton = {
href: "#contact",
text: "Pedir presupuesto"
};
type HeroSplitProps = {
tag: string;
title: string;
description: string;
primaryButton: { text: string; href: string };
secondaryButton: { text: string; href: string };
} & ({ imageSrc: string; videoSrc?: never } | { videoSrc: string; imageSrc?: never });
const HeroInline = () => {
return (
<section aria-label="Hero section" className="relative flex items-center h-fit md:h-svh pt-25 pb-20 md:py-0">
<HeroBackgroundSlot />
<div className="flex flex-col md:flex-row items-center gap-12 md:gap-20 w-content-width mx-auto">
<div className="w-full md:w-1/2">
<div className="flex flex-col items-center md:items-start gap-3">
<div className="px-3 py-1 mb-1 text-sm card rounded w-fit">
<p>{"Diseño. Precisión. Montaje. Norte Bravo."}</p>
</div>
<TextAnimation
text={"Construimos espacios que hacen destacar marcas."}
variant="fade"
gradientText={true}
tag="h1"
className="text-7xl 2xl:text-8xl leading-[1.15] font-semibold text-center md:text-left text-balance"
/>
<TextAnimation
text={"Especialistas en stands, showrooms, escaparates y carpintería comercial con acabados premium."}
variant="fade"
gradientText={false}
tag="p"
className="md:max-w-8/10 text-lg md:text-xl leading-snug text-center md:text-left text-balance"
/>
<div className="flex flex-wrap max-md:justify-center gap-3 mt-2 md:mt-3">
<Button text={primaryButton.text} href={primaryButton.href} variant="primary"/>
<Button text={secondaryButton.text} href={secondaryButton.href} variant="secondary"animationDelay={0.1} />
</div>
</div>
</div>
<ScrollReveal variant="fade-blur" delay={0.2} className="w-full md:w-1/2 h-100 md:h-[65vh] md:max-h-[75svh] p-2 xl:p-3 2xl:p-4 card rounded overflow-hidden">
<ImageOrVideo imageSrc={"https://images.unsplash.com/photo-1504307651254-35680f356f27?auto=format&fit=crop&q=80&w=2000"} className="w-full h-full object-cover rounded" />
</ScrollReveal>
</div>
</section>
);
};
export default function HeroSection() {
return (
<div data-webild-section="hero" id="hero">
<HeroInline />
</div>
);
}

View File

@@ -0,0 +1,21 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "metrics" section.
import React from 'react';
import MetricsFeatureCards from '@/components/sections/metrics/MetricsFeatureCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function MetricsSection(): React.JSX.Element {
return (
<div id="metrics" data-section="metrics">
<SectionErrorBoundary name="metrics">
<MetricsFeatureCards
tag="Proceso"
title="Nuestro método de trabajo"
description="Nos obsesiona el detalle."
metrics={[{"title":"Idea del cliente","features":["Escucha activa","Requisitos"],"value":"01"},{"value":"02","title":"Diseño y planificación","features":["Planos","Materiales"]},{"value":"03","title":"Fabricación y montaje","features":["Precisión","Taller"]},{"title":"Entrega impecable","features":["Acabados","Limpieza"],"value":"04"}]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,21 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "services" section.
import React from 'react';
import FeaturesDetailedCards from '@/components/sections/features/FeaturesDetailedCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function ServicesSection(): React.JSX.Element {
return (
<div id="services" data-section="services">
<SectionErrorBoundary name="services">
<FeaturesDetailedCards
tag="Servicios"
title="Soluciones para Retail y Marcas"
description="Cada servicio debe transmitir profesionalidad y acabados de alto nivel."
items={[{"imageSrc":"https://images.unsplash.com/photo-1540575467063-178a50c2df87?auto=format&fit=crop&q=80&w=800","description":"Estructuras impactantes para ferias y eventos internacionales.","title":"Montaje de stands","tags":["Stands","Eventos"]},{"tags":["Showrooms","Retail"],"title":"Showrooms","imageSrc":"https://images.unsplash.com/photo-1441986300917-64674bd600d8?auto=format&fit=crop&q=80&w=800","description":"Espacios inmersivos que reflejan la identidad de tu marca."},{"title":"Escaparates","imageSrc":"https://images.unsplash.com/photo-1567401893414-76b7b1e5a7a5?auto=format&fit=crop&q=80&w=800","description":"Diseños que capturan miradas y atraen clientes.","tags":["Escaparates","Diseño"]},{"title":"Expositores comerciales","imageSrc":"https://images.unsplash.com/photo-1555529771-835f59fc5efe?auto=format&fit=crop&q=80&w=800","description":"Mobiliario comercial diseñado para destacar tus productos.","tags":["Expositores","Retail"]},{"title":"Suelos","imageSrc":"https://images.unsplash.com/photo-1581858726788-75bc0f6a952d?auto=format&fit=crop&q=80&w=800","description":"Instalación de suelos de alta resistencia y estética impecable.","tags":["Suelos","Instalación"]},{"tags":["A medida","Premium"],"title":"Carpintería a medida","imageSrc":"https://images.unsplash.com/photo-1581091226825-a6a2a5aee158?auto=format&fit=crop&q=80&w=800","description":"Soluciones únicas para espacios comerciales exigentes."}]}
/>
</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 "showcase" section.
import React from 'react';
import FeaturesRevealCardsBento from '@/components/sections/features/FeaturesRevealCardsBento';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function ShowcaseSection(): React.JSX.Element {
return (
<div id="showcase" data-section="showcase">
<SectionErrorBoundary name="showcase">
<FeaturesRevealCardsBento
tag="Proyectos"
title="Portfolio Destacado"
description="Una muestra de nuestra dedicación al detalle y amor por la madera en espacios comerciales."
items={[
{"href":"#","description":"Montaje completo para tienda de ropa.","imageSrc":"https://images.unsplash.com/photo-1441984904996-e0b6ba687e04?auto=format&fit=crop&q=80&w=800","title":"Retail Premium"},
{"href":"#","description":"Expositores y probadores a medida.","imageSrc":"https://images.unsplash.com/photo-1567401893414-76b7b1e5a7a5?auto=format&fit=crop&q=80&w=800","title":"Moda"},
{"title":"Showrooms","description":"Espacio inmersivo para nueva colección.","imageSrc":"https://images.unsplash.com/photo-1497366216548-37526070297c?auto=format&fit=crop&q=80&w=800","href":"#"},
{"href":"#","description":"Stand de alto impacto visual.","imageSrc":"https://images.unsplash.com/photo-1540575467063-178a50c2df87?auto=format&fit=crop&q=80&w=800","title":"Eventos"},
{"href":"#","description":"Mobiliario exclusivo para boutique.","imageSrc":"https://images.unsplash.com/photo-1555529771-835f59fc5efe?auto=format&fit=crop&q=80&w=800","title":"Carpintería personalizada"},
{"href":"#","description":"Diseño y montaje de stands para ferias internacionales.","imageSrc":"https://images.unsplash.com/photo-1504307651254-35680f356f27?auto=format&fit=crop&q=80&w=800","title":"Stands Comerciales"},
{"href":"#","description":"Detalles en madera y metal para espacios de lujo.","imageSrc":"https://images.unsplash.com/photo-1581858726788-75bc0f6a952d?auto=format&fit=crop&q=80&w=800","title":"Acabados Premium"}
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,21 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "testimonials" section.
import React from 'react';
import TestimonialRatingCards from '@/components/sections/testimonial/TestimonialRatingCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function TestimonialsSection(): React.JSX.Element {
return (
<div id="testimonials" data-section="testimonials">
<SectionErrorBoundary name="testimonials">
<TestimonialRatingCards
tag="Confianza"
title="Opiniones de clientes"
description="Las marcas vuelven cuando el trabajo está bien hecho."
testimonials={[{"quote":"El stand que montaron para nuestra marca en la feria superó todas las expectativas. Impecable.","role":"Directora de Marketing","rating":5,"name":"Laura Gómez","imageSrc":"https://images.unsplash.com/photo-1573496359142-b8d87734a5a2?auto=format&fit=crop&q=80&w=800"},{"rating":5,"role":"CEO Retail Brand","quote":"La precisión en los acabados de nuestro nuevo showroom es de otro nivel. Profesionales de verdad.","imageSrc":"https://images.unsplash.com/photo-1560250097-0b93528c311a?auto=format&fit=crop&q=80&w=800","name":"David Ruiz"},{"quote":"Entendieron perfectamente la estética industrial que buscábamos para nuestros escaparates.","rating":5,"role":"Visual Merchandiser","name":"Marta Blanco","imageSrc":"https://images.unsplash.com/photo-1580489944761-15a19d654956?auto=format&fit=crop&q=80&w=800"}]}
/>
</SectionErrorBoundary>
</div>
);
}