5 Commits

Author SHA1 Message Date
50262ac5c5 Merge version_3_1782053096923 into main
Merge version_3_1782053096923 into main
2026-06-21 14:46:34 +00:00
kudinDmitriyUp
d041e02da9 Bob AI: Update layout navigation, CTA and footer links for Finca La 2026-06-21 14:45:51 +00:00
d0e0328858 Merge version_2_1782052233603 into main
Merge version_2_1782052233603 into main
2026-06-21 14:31:50 +00:00
kudinDmitriyUp
d63fa33dd8 Bob AI: Apply premium rural color palette and typography 2026-06-21 14:31:10 +00:00
a0d613a7de Merge version_1_1781964857667 into main
Merge version_1_1781964857667 into main
2026-06-20 14:15:24 +00:00
10 changed files with 329 additions and 221 deletions

View File

@@ -8,12 +8,12 @@ import { StyleProvider } from "@/components/ui/StyleProvider";
export default function Layout() {
const navItems = [
{ name: "Inicio", href: "#hero" },
{ name: "Sobre Nosotros", href: "#about" },
{ name: "Instalaciones", href: "#features" },
{ name: "Contacto", href: "#contact" },
{ name: "Metrics", href: "#metrics" },
{ name: "Testimonials", href: "#testimonials" },
{ name: "Faq", href: "#faq" }
{ name: "Alojamientos", href: "#features" },
{ name: "Piscina", href: "#metrics" },
{ name: "Pet Friendly", href: "#faq" },
{ name: "Experiencias", href: "#about" },
{ name: "Eventos", href: "#testimonials" },
{ name: "Contacto", href: "#contact" }
];
return (
@@ -23,7 +23,7 @@ export default function Layout() {
<NavbarCentered
logo="Finca La Caprichosa"
ctaButton={{
text: "Reservar Ahora", href: "tel:+34608760797"}}
text: "Consultar disponibilidad", href: "#contact"}}
navItems={navItems}
/>
</SectionErrorBoundary>
@@ -35,23 +35,42 @@ export default function Layout() {
brand="Finca La Caprichosa"
columns={[
{
title: "Ubicación", items: [{ label: "Villa del Prado, Madrid", href: "#" }],
title: "Alojamientos", items: [
{ label: "Pabellón", href: "#features" },
{ label: "Casa del Guarda", href: "#features" },
{ label: "Suites", href: "#features" }
],
},
{
title: "Descubre", items: [
{ label: "Piscina", href: "#metrics" },
{ label: "Pet Friendly", href: "#faq" },
{ label: "Experiencias", href: "#about" },
{ label: "Caprichos", href: "#about" },
{ label: "Eventos", href: "#testimonials" }
],
},
{
title: "Contacto", items: [
{ label: "608 760 797", href: "tel:+34608760797" },
{ label: "Villa del Prado, Madrid", href: "#" },
{ label: "M-507 pk 31,75", href: "#" },
{ label: "+34 608 760 797", href: "tel:+34608760797" },
{ label: "info@fincalacaprichosa.es", href: "mailto:info@fincalacaprichosa.es" },
{ label: "Atención: 9:00 - 21:00", href: "#" }
],
},
{
title: "Legal", items: [
{ label: "Política de Privacidad", href: "#" },
{ label: "Aviso Legal", href: "#" },
{ label: "Cookies", href: "#" }
],
},
]}
copyright="© 2024 Finca La Caprichosa. Todos los derechos reservados."
links={[]}
links={[
{ label: "Instagram", href: "https://instagram.com/fincalacaprichosa" }
]}
/>
</SectionErrorBoundary>
</StyleProvider>

View File

@@ -1,19 +1,19 @@
@import url('https://fonts.googleapis.com/css2?family=Inter+Tight:wght@400;500;600;700&display=swap');
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Playfair+Display:wght@400;500;600;700&display=swap');
@import "tailwindcss";
@import "./styles/masks.css";
@import "./styles/animations.css";
:root {
/* @colorThemes/lightTheme/grayNavyBlue */
--background: #efebe5;
--card: #f7f2ea;
--foreground: #000000;
--primary-cta: #000000;
--primary-cta-text: #efebe5;
--secondary-cta: #ffffff;
--secondary-cta-text: #000000;
--accent: #ffffff;
--background-accent: #e1b875;
--background: #F4EFE6;
--card: #FFFDF8;
--foreground: #1F2E26;
--primary-cta: #243F32;
--primary-cta-text: #F4EFE6;
--secondary-cta: #C8A96A;
--secondary-cta-text: #1F2E26;
--accent: #6F826A;
--background-accent: #C8A96A;
/* @layout/border-radius/rounded */
--radius: 1rem;
@@ -88,8 +88,8 @@
--color-background-accent: var(--background-accent);
/* Fonts */
--font-sans: 'Inter Tight', sans-serif;
--font-tight: "Inter Tight", sans-serif;
--font-sans: 'Inter', sans-serif;
--font-tight: "Playfair Display", serif;
--font-mono: monospace;
/* Border Radius */

View File

@@ -1,210 +1,33 @@
import AboutFeaturesSplit from '@/components/sections/about/AboutFeaturesSplit';
import ContactCta from '@/components/sections/contact/ContactCta';
import FaqSplitMedia from '@/components/sections/faq/FaqSplitMedia';
import FeaturesRevealCards from '@/components/sections/features/FeaturesRevealCards';
import HeroBillboardCarousel from '@/components/sections/hero/HeroBillboardCarousel';
import MetricsMediaCards from '@/components/sections/metrics/MetricsMediaCards';
import TestimonialQuoteCards from '@/components/sections/testimonial/TestimonialQuoteCards';
import { Heart, Home, Star } from "lucide-react";
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 FeaturesSection from './HomePage/sections/Features';
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">
<HeroBillboardCarousel
tag="Tu retiro en Madrid"
title="Experiencias Únicas en Finca La Caprichosa"
description="Descubre un refugio acogedor en plena naturaleza. Habitaciones rústicas, villas y momentos inolvidables cerca de Madrid."
primaryButton={{
text: "Reservar Ahora",
href: "tel:+34608760797",
}}
secondaryButton={{
text: "Ver Galería",
href: "#features",
}}
items={[
{
imageSrc: "http://img.b2bpic.net/free-photo/panoramic-shot-beautiful-landscape-farmland-mountains-virginia-usa_181624-45239.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/side-view-woman-sitting-boho-couch_23-2149647882.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/portrait-young-asian-woman-relax-smile-happy-around-outdoor-swimming-pool-hotel-resort-with-sea-ocean-view_74190-9084.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/vertical-shot-beautiful-view-houses-trees-near-river_181624-23287.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/dessert-flowers-table_23-2149434114.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/meadow-background-swing-white-light_1203-6333.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<>
<HeroSection />
<div id="about" data-section="about">
<SectionErrorBoundary name="about">
<AboutFeaturesSplit
tag="Nuestra Historia"
title="Un Refugio de Paz y Naturaleza"
description="Finca La Caprichosa ofrece un espacio de desconexión absoluta. Disfruta de nuestras instalaciones impecables, rodeado de vistas espectaculares en Villa del Prado."
items={[
{
icon: Star,
title: "Entorno Natural",
description: "Ubicación privilegiada con vistas inigualables.",
},
{
icon: Home,
title: "Estilo Rústico Chic",
description: "Comodidad máxima en cada villa y habitación.",
},
{
icon: Heart,
title: "Atención Cercana",
description: "La hospitalidad de nuestro equipo te hará sentir como en casa.",
},
]}
imageSrc="http://img.b2bpic.net/free-photo/room-interior-design_23-2148899447.jpg"
/>
</SectionErrorBoundary>
</div>
<AboutSection />
<div id="features" data-section="features">
<SectionErrorBoundary name="features">
<FeaturesRevealCards
tag="Servicios"
title="Disfruta de la Experiencia Completa"
description="Todo lo que necesitas para una escapada perfecta y revitalizante."
items={[
{
title: "Chimenea Acogedora",
description: "El plus perfecto para los meses de frío.",
imageSrc: "http://img.b2bpic.net/free-photo/flower-vase-modern-interior_23-2151928892.jpg",
},
{
title: "Piscina Privada",
description: "Refréscate y relájate en nuestro entorno privado.",
imageSrc: "http://img.b2bpic.net/free-photo/architecture-unidentified-tourists_74190-4259.jpg",
},
{
title: "Zona de Barbacoa",
description: "Organiza tus comidas al aire libre con estilo.",
imageSrc: "http://img.b2bpic.net/free-photo/young-man-roasting-barbecue-grill-cottage-countryside_176420-1837.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<FeaturesSection />
<div id="metrics" data-section="metrics">
<SectionErrorBoundary name="metrics">
<MetricsMediaCards
tag="Nuestros Logros"
title="Clientes Satisfechos"
description="La confianza de quienes nos eligen año tras año."
metrics={[
{
value: "360+",
title: "Reseñas de Confianza",
description: "Valoración media de 4.5/5 estrellas en Google.",
imageSrc: "http://img.b2bpic.net/free-photo/young-stylish-couple-love-countryside-indie-hipster-bohemian-style-weekend-vacation-summer-outfit-red-dress-green-grass-holding-hands-smiling_285396-2633.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<MetricsSection />
<div id="testimonials" data-section="testimonials">
<SectionErrorBoundary name="testimonials">
<TestimonialQuoteCards
tag="Experiencias"
title="Lo que dicen nuestros huéspedes"
description="Historias reales de personas que vivieron su fin de semana inolvidable."
testimonials={[
{
name: "Raquel Navio",
role: "Huésped",
quote: "Todo fenomenal, la casa tiene de todo, ¡colchones muy cómodos y la chimenea es un plus!",
imageSrc: "http://img.b2bpic.net/free-photo/supportive-cute-blond-girlfriend-cheering-liking-interesting-concept-cool-idea-thumbsup-smiling_1258-229510.jpg",
},
{
name: "Lidia del Álamo",
role: "Huésped",
quote: "Estupenda casita para desconectar. Todo impecable y cómodo, el entorno es una pasada.",
imageSrc: "http://img.b2bpic.net/free-photo/handsome-unshaven-man-santa-claus-hat-with-fur-looking-camera-smiling-happily-celebrating-new-year-while-vacations-tropical-country_273609-19169.jpg",
},
{
name: "Almudena A.J.",
role: "Huésped",
quote: "Un fin de semana perfecto. La finca está muy cuidada y el entorno es idílico.",
imageSrc: "http://img.b2bpic.net/free-photo/playful-attractive-african-american-with-afro-haistyle-sticking-out-tongue-being-childish-while-sitting-bean-bad-chair-with-cup-coffee_176420-19803.jpg",
},
{
name: "Visitante 4",
role: "Huésped",
quote: "Atención inmejorable por parte de los dueños. Repetiremos sin duda.",
imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-happy-couple-with-firewood_23-2149411870.jpg",
},
{
name: "Visitante 5",
role: "Huésped",
quote: "Ideal para parejas y mascotas. Un oasis de tranquilidad.",
imageSrc: "http://img.b2bpic.net/free-photo/excited-happy-womna-dressed-shorts-bright-shirt-sitting-beach-with-coconut-cocktail-pointing-aside_291650-1262.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<TestimonialsSection />
<div id="faq" data-section="faq">
<SectionErrorBoundary name="faq">
<FaqSplitMedia
tag="Preguntas frecuentes"
title="¿Tienes alguna duda?"
description="Estamos aquí para facilitarte toda la información antes de tu llegada."
items={[
{
question: "¿Se aceptan mascotas?",
answer: "Sí, nuestros huéspedes pueden venir con sus mascotas sin problema.",
},
{
question: "¿A qué hora es el check-in?",
answer: "Nuestro horario permite flexibilidad; contacta con nosotros para coordinar tu llegada.",
},
{
question: "¿La piscina está abierta todo el año?",
answer: "Disponemos de piscina cubierta/climatizada para disfrutar en distintas temporadas.",
},
]}
imageSrc="http://img.b2bpic.net/free-photo/clients-buy-chemicals-free-food_482257-76636.jpg"
/>
</SectionErrorBoundary>
</div>
<FaqSection />
<div id="contact" data-section="contact">
<SectionErrorBoundary name="contact">
<ContactCta
tag="Contacto"
text="¿Quieres organizar tu próxima escapada o evento? ¡Llámanos o escríbenos!"
primaryButton={{
text: "Llamar ahora: 608 760 797",
href: "tel:+34608760797",
}}
secondaryButton={{
text: "Enviar Email",
href: "mailto:info@fincalacaprichosa.es",
}}
/>
</SectionErrorBoundary>
</div>
<ContactSection />
</>
);
}

View File

@@ -0,0 +1,39 @@
// 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 AboutFeaturesSplit from '@/components/sections/about/AboutFeaturesSplit';
import { Heart, Home, Star } from "lucide-react";
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function AboutSection(): React.JSX.Element {
return (
<div id="about" data-section="about">
<SectionErrorBoundary name="about">
<AboutFeaturesSplit
tag="Nuestra Historia"
title="Un Refugio de Paz y Naturaleza"
description="Finca La Caprichosa ofrece un espacio de desconexión absoluta. Disfruta de nuestras instalaciones impecables, rodeado de vistas espectaculares en Villa del Prado."
items={[
{
icon: Star,
title: "Entorno Natural",
description: "Ubicación privilegiada con vistas inigualables.",
},
{
icon: Home,
title: "Estilo Rústico Chic",
description: "Comodidad máxima en cada villa y habitación.",
},
{
icon: Heart,
title: "Atención Cercana",
description: "La hospitalidad de nuestro equipo te hará sentir como en casa.",
},
]}
imageSrc="http://img.b2bpic.net/free-photo/room-interior-design_23-2148899447.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 "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="¿Quieres organizar tu próxima escapada o evento? ¡Llámanos o escríbenos!"
primaryButton={{
text: "Llamar ahora: 608 760 797",
href: "tel:+34608760797",
}}
secondaryButton={{
text: "Enviar Email",
href: "mailto:info@fincalacaprichosa.es",
}}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,35 @@
// 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="Preguntas frecuentes"
title="¿Tienes alguna duda?"
description="Estamos aquí para facilitarte toda la información antes de tu llegada."
items={[
{
question: "¿Se aceptan mascotas?",
answer: "Sí, nuestros huéspedes pueden venir con sus mascotas sin problema.",
},
{
question: "¿A qué hora es el check-in?",
answer: "Nuestro horario permite flexibilidad; contacta con nosotros para coordinar tu llegada.",
},
{
question: "¿La piscina está abierta todo el año?",
answer: "Disponemos de piscina cubierta/climatizada para disfrutar en distintas temporadas.",
},
]}
imageSrc="http://img.b2bpic.net/free-photo/clients-buy-chemicals-free-food_482257-76636.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 "features" section.
import React from 'react';
import FeaturesRevealCards from '@/components/sections/features/FeaturesRevealCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function FeaturesSection(): React.JSX.Element {
return (
<div id="features" data-section="features">
<SectionErrorBoundary name="features">
<FeaturesRevealCards
tag="Servicios"
title="Disfruta de la Experiencia Completa"
description="Todo lo que necesitas para una escapada perfecta y revitalizante."
items={[
{
title: "Chimenea Acogedora",
description: "El plus perfecto para los meses de frío.",
imageSrc: "http://img.b2bpic.net/free-photo/flower-vase-modern-interior_23-2151928892.jpg",
},
{
title: "Piscina Privada",
description: "Refréscate y relájate en nuestro entorno privado.",
imageSrc: "http://img.b2bpic.net/free-photo/architecture-unidentified-tourists_74190-4259.jpg",
},
{
title: "Zona de Barbacoa",
description: "Organiza tus comidas al aire libre con estilo.",
imageSrc: "http://img.b2bpic.net/free-photo/young-man-roasting-barbecue-grill-cottage-countryside_176420-1837.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,48 @@
// 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 HeroBillboardCarousel from '@/components/sections/hero/HeroBillboardCarousel';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function HeroSection(): React.JSX.Element {
return (
<div id="hero" data-section="hero">
<SectionErrorBoundary name="hero">
<HeroBillboardCarousel
tag="Tu retiro en Madrid"
title="Experiencias Únicas en Finca La Caprichosa"
description="Descubre un refugio acogedor en plena naturaleza. Habitaciones rústicas, villas y momentos inolvidables cerca de Madrid."
primaryButton={{
text: "Reservar Ahora",
href: "tel:+34608760797",
}}
secondaryButton={{
text: "Ver Galería",
href: "#features",
}}
items={[
{
imageSrc: "http://img.b2bpic.net/free-photo/panoramic-shot-beautiful-landscape-farmland-mountains-virginia-usa_181624-45239.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/side-view-woman-sitting-boho-couch_23-2149647882.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/portrait-young-asian-woman-relax-smile-happy-around-outdoor-swimming-pool-hotel-resort-with-sea-ocean-view_74190-9084.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/vertical-shot-beautiful-view-houses-trees-near-river_181624-23287.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/dessert-flowers-table_23-2149434114.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/meadow-background-swing-white-light_1203-6333.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,28 @@
// 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 MetricsMediaCards from '@/components/sections/metrics/MetricsMediaCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function MetricsSection(): React.JSX.Element {
return (
<div id="metrics" data-section="metrics">
<SectionErrorBoundary name="metrics">
<MetricsMediaCards
tag="Nuestros Logros"
title="Clientes Satisfechos"
description="La confianza de quienes nos eligen año tras año."
metrics={[
{
value: "360+",
title: "Reseñas de Confianza",
description: "Valoración media de 4.5/5 estrellas en Google.",
imageSrc: "http://img.b2bpic.net/free-photo/young-stylish-couple-love-countryside-indie-hipster-bohemian-style-weekend-vacation-summer-outfit-red-dress-green-grass-holding-hands-smiling_285396-2633.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,52 @@
// 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 TestimonialQuoteCards from '@/components/sections/testimonial/TestimonialQuoteCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function TestimonialsSection(): React.JSX.Element {
return (
<div id="testimonials" data-section="testimonials">
<SectionErrorBoundary name="testimonials">
<TestimonialQuoteCards
tag="Experiencias"
title="Lo que dicen nuestros huéspedes"
description="Historias reales de personas que vivieron su fin de semana inolvidable."
testimonials={[
{
name: "Raquel Navio",
role: "Huésped",
quote: "Todo fenomenal, la casa tiene de todo, ¡colchones muy cómodos y la chimenea es un plus!",
imageSrc: "http://img.b2bpic.net/free-photo/supportive-cute-blond-girlfriend-cheering-liking-interesting-concept-cool-idea-thumbsup-smiling_1258-229510.jpg",
},
{
name: "Lidia del Álamo",
role: "Huésped",
quote: "Estupenda casita para desconectar. Todo impecable y cómodo, el entorno es una pasada.",
imageSrc: "http://img.b2bpic.net/free-photo/handsome-unshaven-man-santa-claus-hat-with-fur-looking-camera-smiling-happily-celebrating-new-year-while-vacations-tropical-country_273609-19169.jpg",
},
{
name: "Almudena A.J.",
role: "Huésped",
quote: "Un fin de semana perfecto. La finca está muy cuidada y el entorno es idílico.",
imageSrc: "http://img.b2bpic.net/free-photo/playful-attractive-african-american-with-afro-haistyle-sticking-out-tongue-being-childish-while-sitting-bean-bad-chair-with-cup-coffee_176420-19803.jpg",
},
{
name: "Visitante 4",
role: "Huésped",
quote: "Atención inmejorable por parte de los dueños. Repetiremos sin duda.",
imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-happy-couple-with-firewood_23-2149411870.jpg",
},
{
name: "Visitante 5",
role: "Huésped",
quote: "Ideal para parejas y mascotas. Un oasis de tranquilidad.",
imageSrc: "http://img.b2bpic.net/free-photo/excited-happy-womna-dressed-shorts-bright-shirt-sitting-beach-with-coconut-cocktail-pointing-aside_291650-1262.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}