Compare commits

...

52 Commits

Author SHA1 Message Date
kudinDmitriyUp
b8a934daef Bob AI: fix build errors (attempt 1) 2026-06-03 14:47:23 +00:00
kudinDmitriyUp
07e87980df Bob AI: add an about section as the second section 2026-06-03 14:46:45 +00:00
5c0ca1bc47 Merge version_26_1780497803548 into main
Merge version_26_1780497803548 into main
2026-06-03 14:44:24 +00:00
kudinDmitriyUp
691b7358f1 Bob AI (stub): in the hero section on top of the big image let's add floati 2026-06-03 14:44:18 +00:00
86d97a6b0d Merge version_25_1780497680352 into main
Merge version_25_1780497680352 into main
2026-06-03 14:42:48 +00:00
kudinDmitriyUp
9ca64f07fd Bob AI (stub): in the hero section on top of the big image let's add floati 2026-06-03 14:42:45 +00:00
ca02ca44f0 Merge version_24_1780497537571 into main
Merge version_24_1780497537571 into main
2026-06-03 14:40:32 +00:00
kudinDmitriyUp
ed73a46116 Bob AI (stub): add floating KPI cards in the hero section, they should move 2026-06-03 14:40:25 +00:00
ed3f23f639 Merge version_23_1780497315842 into main
Merge version_23_1780497315842 into main
2026-06-03 14:36:59 +00:00
kudinDmitriyUp
1eaceaf054 Bob AI: reduce the space between the navbar and the hero section, an 2026-06-03 14:36:26 +00:00
ca209f8fc4 Merge version_22_1780497042169 into main
Merge version_22_1780497042169 into main
2026-06-03 14:33:53 +00:00
kudinDmitriyUp
38b4a3e01d Bob AI: fix build errors (attempt 1) 2026-06-03 14:33:20 +00:00
kudinDmitriyUp
39d9941b58 Bob AI: i want a simpler navbar 2026-06-03 14:32:26 +00:00
38c9a521d3 Merge version_21_1780497029869 into main
Merge version_21_1780497029869 into main
2026-06-03 14:30:33 +00:00
51f6fc5115 Update theme colors 2026-06-03 14:30:30 +00:00
de70dd02a2 Merge version_20_1780496932547 into main
Merge version_20_1780496932547 into main
2026-06-03 14:30:19 +00:00
kudinDmitriyUp
e5b8f20a11 Bob AI: I want a light beige color theme 2026-06-03 14:29:43 +00:00
83ab24c38f Merge version_19_1780496743813 into main
Merge version_19_1780496743813 into main
2026-06-03 14:26:11 +00:00
kudinDmitriyUp
6f9df2475f Bob AI (stub): make the hero section use width content width, like w-conten 2026-06-03 14:26:07 +00:00
55090fbfbe Merge version_18_1780496227930 into main
Merge version_18_1780496227930 into main
2026-06-03 14:17:32 +00:00
kudinDmitriyUp
1c7704b1ba Bob AI (stub): make the hero section the same width as all the other sectio 2026-06-03 14:17:29 +00:00
212f55108a Merge version_17_1780496129831 into main
Merge version_17_1780496129831 into main
2026-06-03 14:16:46 +00:00
kudinDmitriyUp
25247ef9dd Bob AI: Make hero section progress bars full width 2026-06-03 14:16:07 +00:00
009b67ee3e Merge version_16_1780495977779 into main
Merge version_16_1780495977779 into main
2026-06-03 14:13:59 +00:00
kudinDmitriyUp
6a1e1b8121 Bob AI: remove white border from hero section image box 2026-06-03 14:13:22 +00:00
b744e497c0 Merge version_15_1780495898454 into main
Merge version_15_1780495898454 into main
2026-06-03 14:12:40 +00:00
kudinDmitriyUp
1e6aab2988 Bob AI: Removed the black background from the hero section 2026-06-03 14:12:03 +00:00
587cbacf95 Merge version_14_1780495786088 into main
Merge version_14_1780495786088 into main
2026-06-03 14:11:26 +00:00
kudinDmitriyUp
444cf85ddc Bob AI: Fix hero heading gradient and bottom clipping 2026-06-03 14:10:37 +00:00
56e04d4460 Merge version_13_1780495654401 into main
Merge version_13_1780495654401 into main
2026-06-03 14:08:48 +00:00
kudinDmitriyUp
280e8dda68 Bob AI: Added text-balance to hero heading 2026-06-03 14:08:11 +00:00
d9f48bc7b4 Merge version_12_1780495544927 into main
Merge version_12_1780495544927 into main
2026-06-03 14:06:57 +00:00
kudinDmitriyUp
dcc140c72d Bob AI: Match hero heading size and gradient to accommodation sectio 2026-06-03 14:06:20 +00:00
b237841c42 Merge version_11_1780495392414 into main
Merge version_11_1780495392414 into main
2026-06-03 14:04:34 +00:00
kudinDmitriyUp
ce48920897 Bob AI: Match hero title size with accommodation title 2026-06-03 14:03:55 +00:00
101c7f6641 Merge version_10_1780495208394 into main
Merge version_10_1780495208394 into main
2026-06-03 14:02:00 +00:00
kudinDmitriyUp
7c37b18ffd Bob AI: Adjust hero section text box to match accommodation section 2026-06-03 14:01:22 +00:00
da7de495ba Merge version_9_1780495095951 into main
Merge version_9_1780495095951 into main
2026-06-03 13:59:34 +00:00
kudinDmitriyUp
ada39e3fe6 Bob AI: Adjust hero section textbox sizing to match accommodation se 2026-06-03 13:58:53 +00:00
7f0cc4b273 Merge version_8_1780494974164 into main
Merge version_8_1780494974164 into main
2026-06-03 13:57:49 +00:00
kudinDmitriyUp
20ff83b8d9 Bob AI: Remove the text 'Our Legacy of Hospitality' from the about s 2026-06-03 13:57:16 +00:00
026cd0a078 Merge version_7_1780494791132 into main
Merge version_7_1780494791132 into main
2026-06-03 13:55:26 +00:00
kudinDmitriyUp
61d5307458 Bob AI: Fix carousel skipping images by removing state setter from u 2026-06-03 13:54:36 +00:00
fede3905da Merge version_6_1780494606830 into main
Merge version_6_1780494606830 into main
2026-06-03 13:52:04 +00:00
kudinDmitriyUp
64c7aa89fb Bob AI: i want each images to have their own progress bar and they a 2026-06-03 13:51:28 +00:00
bc52183401 Merge version_5_1780494437120 into main
Merge version_5_1780494437120 into main
2026-06-03 13:49:07 +00:00
kudinDmitriyUp
1f33c04279 Bob AI (stub): change the hero section so each image in the carousel has it 2026-06-03 13:49:01 +00:00
5cb557e570 Merge version_4_1780494288262 into main
Merge version_4_1780494288262 into main
2026-06-03 13:46:48 +00:00
kudinDmitriyUp
588c8cddf7 Bob AI: Add image carousel with progress bar to hero section 2026-06-03 13:46:07 +00:00
311974c386 Merge version_3_1780494163704 into main
Merge version_3_1780494163704 into main
2026-06-03 13:44:05 +00:00
kudinDmitriyUp
e60814f2c1 Bob AI: Updated hero section layout with text above and image below 2026-06-03 13:43:24 +00:00
2ec5bb4c45 Merge version_2_1780494013667 into main
Merge version_2_1780494013667 into main
2026-06-03 13:42:25 +00:00
5 changed files with 165 additions and 51 deletions

View File

@@ -1,11 +1,22 @@
import React, { useState, useEffect } from 'react';
import FooterBrand from '@/components/sections/footer/FooterBrand';
import NavbarFloatingLogo from '@/components/ui/NavbarFloatingLogo';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
import SiteBackgroundSlot from "@/components/ui/SiteBackgroundSlot";
import { Outlet } from 'react-router-dom';
import { StyleProvider } from "@/components/ui/StyleProvider";
import Button from "@/components/ui/Button";
export default function Layout() {
const [isScrolled, setIsScrolled] = useState(false);
useEffect(() => {
const handleScroll = () => {
setIsScrolled(window.scrollY > 10);
};
window.addEventListener('scroll', handleScroll);
return () => window.removeEventListener('scroll', handleScroll);
}, []);
const navItems = [
{
"name": "Home", "href": "#hero"
@@ -37,12 +48,21 @@ export default function Layout() {
<StyleProvider buttonVariant="stagger" siteBackground="noise" heroBackground="gradientBars">
<SiteBackgroundSlot />
<SectionErrorBoundary name="navbar">
<NavbarFloatingLogo
ctaButton={{
text: "Book Now", href: "#contact"}}
logo="The Grand Hotel"
logoImageSrc="https://storage.googleapis.com/webild/default/no-image.jpg?id=6xbdeo"
navItems={navItems} />
<nav className={`fixed top-0 z-50 w-full transition-colors duration-300 ${isScrolled ? 'bg-background/95 backdrop-blur-sm border-b border-foreground/10' : 'bg-transparent'} py-4`}>
<div className="mx-auto flex w-content-width items-center justify-between">
<a href="#" className="text-xl md:text-2xl font-bold text-foreground tracking-tight">
The Grand Hotel
</a>
<div className="hidden lg:flex items-center gap-6">
{navItems.map((item) => (
<a key={item.name} href={item.href} className="text-sm font-medium text-foreground/80 hover:text-foreground transition-colors">
{item.name}
</a>
))}
</div>
<Button text="Book Now" href="#contact" variant="primary" />
</div>
</nav>
</SectionErrorBoundary>
<main className="flex-grow">
<Outlet />
@@ -90,4 +110,4 @@ export default function Layout() {
</SectionErrorBoundary>
</StyleProvider>
);
}
}

View File

@@ -5,15 +5,15 @@
:root {
/* @colorThemes/lightTheme/grayNavyBlue */
--background: #0a0a0a;
--card: #1a1a1a;
--foreground: #f5f5f5;
--primary-cta: #ffdf7d;
--primary-cta-text: #0a0a0a;
--secondary-cta: #1a1a1a;
--secondary-cta-text: #ffffff;
--accent: #b8860b;
--background-accent: #8b6914;
--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;
/* @layout/border-radius/rounded */
--radius: 1.5rem;

View File

@@ -13,6 +13,24 @@ import SocialProofSection from './HomePage/sections/SocialProof';
import FaqSection from './HomePage/sections/Faq';
import ContactSection from './HomePage/sections/Contact';
{/* webild-stub @2026-06-03T14:44:17.404Z: in the hero section on top of the big image let's add floating cards with kpi number and description. */}
{/* webild-stub @2026-06-03T14:42:44.419Z: in the hero section on top of the big image let's add floating cards with kpi number and description. on mouse move they should have a nice moving animation */}
{/* webild-stub @2026-06-03T14:40:24.768Z: add floating KPI cards in the hero section, they should move with a parallax effect as I move my mouse around in the hero section */}
{/* webild-stub @2026-06-03T14:26:06.808Z: make the hero section use width content width, like w-content-width */}
{/* webild-stub @2026-06-03T14:17:28.384Z: make the hero section the same width as all the other sections */}
{/* webild-stub @2026-06-03T13:49:00.110Z: change the hero section so each image in the carousel has its own progress bar, and all progress bars are visible at the same time */}
export default function HomePage(): React.JSX.Element {
return (
<>

View File

@@ -1,18 +1,41 @@
// 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";
import Tag from "@/components/ui/Tag";
import ScrollReveal from "@/components/ui/ScrollReveal";
import ImageOrVideo from "@/components/ui/ImageOrVideo";
import Button from "@/components/ui/Button";
export default function AboutSection(): React.JSX.Element {
export default function AboutSection() {
return (
<div id="about" data-section="about">
<SectionErrorBoundary name="about">
<AboutText
title="Our Legacy of Hospitality"
/>
</SectionErrorBoundary>
<section data-webild-section="about" id="about" className="bg-background">
<div className="max-w-content-width mx-auto px-6">
<div className="grid grid-cols-1 lg:grid-cols-2 items-center">
<ScrollReveal variant="slide-up">
<div className="space-y-8">
<Tag text="About Us" />
<h2 className="text-4xl md:text-5xl font-bold text-foreground tracking-tight">
A Legacy of Unparalleled Hospitality
</h2>
<p className="text-lg text-muted-foreground leading-relaxed">
Nestled in the heart of the city, The Grand Hotel has been a beacon of luxury and comfort for over a century. Our commitment to excellence is reflected in every detail, from our meticulously designed rooms to our world-class dining experiences.
</p>
<p className="text-lg text-muted-foreground leading-relaxed">
We believe that true luxury lies in the experience. Our dedicated staff is here to ensure that your stay is nothing short of extraordinary, anticipating your every need and exceeding your expectations.
</p>
<Button text="Discover Our Story" variant="primary" />
</div>
</ScrollReveal>
<ScrollReveal variant="fade">
<div className="relative h-[600px] rounded-theme overflow-hidden">
<ImageOrVideo
imageSrc="https://images.unsplash.com/photo-1542314831-c6a4d14d837e?q=80&w=2000&auto=format&fit=crop"
className="w-full h-full object-cover"
/>
<div className="absolute inset-0 bg-black/10"></div>
</div>
</ScrollReveal>
</div>
</div>
</section>
);
}
}

View File

@@ -1,35 +1,88 @@
// 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 HeroSplitMediaGrid from '@/components/sections/hero/HeroSplitMediaGrid';
import React, { useState, useEffect } from 'react';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
import Button from '@/components/ui/Button';
import Tag from '@/components/ui/Tag';
import ImageOrVideo from '@/components/ui/ImageOrVideo';
export default function HeroSection(): React.JSX.Element {
const images = [
"http://img.b2bpic.net/free-photo/modern-interior-design-interior_23-2151929575.jpg",
"http://img.b2bpic.net/free-photo/luxury-pool-villa-spectacular-contemporary-design-digital-art-real-estate-home-house-property-ge_1258-150749.jpg",
"http://img.b2bpic.net/free-photo/3d-rendering-beautiful-luxury-bedroom-suite-hotel-with-tv_105762-2301.jpg"
];
const [currentIndex, setCurrentIndex] = useState(0);
const [progress, setProgress] = useState(0);
useEffect(() => {
const intervalTime = 5000; // 5 seconds
const updateInterval = 50; // Update progress every 50ms
const step = (updateInterval / intervalTime) * 100;
const timer = setInterval(() => {
setProgress((prev) => {
if (prev >= 100) return 100;
return prev + step;
});
}, updateInterval);
return () => clearInterval(timer);
}, []);
useEffect(() => {
if (progress >= 100) {
setCurrentIndex((prevIndex) => (prevIndex + 1) % images.length);
setProgress(0);
}
}, [progress, images.length]);
return (
<div id="hero" data-webild-section="hero" className="relative w-full min-h-[80vh] flex items-center justify-center overflow-hidden">
<div id="hero" data-webild-section="hero" className="w-full pt-32 pb-16 px-4 md:px-8">
<SectionErrorBoundary name="hero">
<div className="absolute inset-0 z-0">
<ImageOrVideo
imageSrc="http://img.b2bpic.net/free-photo/modern-interior-design-interior_23-2151929575.jpg"
className="w-full h-full object-cover"
/>
<div className="absolute inset-0 bg-black/50" />
</div>
<div className="relative z-10 container mx-auto px-4 text-center flex flex-col items-center gap-6 py-24">
<Tag text="Welcome to Luxury" className="bg-background/20 text-white border-white/30 backdrop-blur-md" />
<h1 className="text-5xl md:text-7xl font-bold text-white max-w-4xl">
Experience Unparalleled Comfort & Elegance
</h1>
<p className="text-lg md:text-xl text-white/90 max-w-2xl">
Discover a world where impeccable service meets sophisticated design. Your unforgettable journey begins here.
</p>
<div className="flex flex-wrap items-center justify-center gap-4 mt-4">
<Button text="Book Your Stay" variant="primary" href="#contact" className="text-lg px-8 py-6" />
<Button text="Explore Rooms" variant="secondary" href="#accommodation" className="text-lg px-8 py-6 bg-white/10 text-white border-white/30 hover:bg-white/20" />
<div className="container mx-auto max-w-6xl flex flex-col items-center text-center">
<div className="flex flex-col items-center text-center gap-4 mb-16 max-w-3xl mx-auto">
<Tag text="Welcome to Luxury" />
<h1 className="text-5xl md:text-6xl lg:text-7xl font-bold tracking-tight text-balance bg-clip-text text-transparent bg-gradient-to-b from-foreground to-muted-foreground pb-2">
Experience Unparalleled Comfort & Elegance
</h1>
<p className="text-lg text-muted-foreground">
Discover a world where impeccable service meets sophisticated design. Your unforgettable journey begins here.
</p>
<div className="flex flex-wrap items-center justify-center gap-4">
<Button text="Book Your Stay" variant="primary" href="#contact" />
<Button text="Explore Rooms" variant="secondary" href="#accommodation" />
</div>
</div>
<div className="w-full rounded-3xl overflow-hidden shadow-2xl relative">
<div className="relative w-full h-[60vh]">
{images.map((src, index) => (
<div
key={src}
className={`absolute inset-0 transition-opacity duration-1000 ${index === currentIndex ? 'opacity-100 z-10' : 'opacity-0 z-0'}`}
>
<ImageOrVideo
imageSrc={src}
className="w-full h-full object-cover"
/>
</div>
))}
</div>
<div className="absolute bottom-6 left-1/2 -translate-x-1/2 flex gap-3 w-full px-4 z-20">
{images.map((_, index) => (
<div key={index} className="h-1.5 flex-1 bg-white/30 rounded-full overflow-hidden cursor-pointer" onClick={() => { setCurrentIndex(index); setProgress(0); }}>
<div
className="h-full bg-white transition-all duration-75 ease-linear"
style={{
width: index === currentIndex ? `${progress}%` : (index < currentIndex ? '100%' : '0%')
}}
/>
</div>
))}
</div>
</div>
</div>
</SectionErrorBoundary>