24 Commits

Author SHA1 Message Date
3e30d96568 Merge version_14_1780587851932 into main
Merge version_14_1780587851932 into main
2026-06-04 15:44:48 +00:00
kudinDmitriyUp
f92c053d9a Bob AI (stub): remove all sections except hero and contact form 2026-06-04 15:44:45 +00:00
8bf9127975 Merge version_13_1780587774200 into main
Merge version_13_1780587774200 into main
2026-06-04 15:43:33 +00:00
kudinDmitriyUp
e706c96446 Bob AI (stub): remove all sections except hero and contact form 2026-06-04 15:43:30 +00:00
56a01645f1 Merge version_12_1780587609768 into main
Merge version_12_1780587609768 into main
2026-06-04 15:41:32 +00:00
kudinDmitriyUp
532ed40610 Bob AI: Reorder the 'case-studies-cards' section to appear before th 2026-06-04 15:40:56 +00:00
c2646d5c11 Merge version_11_1780587441025 into main
Merge version_11_1780587441025 into main
2026-06-04 15:39:11 +00:00
kudinDmitriyUp
548163a783 Bob AI: Added newsletter signup section 2026-06-04 15:38:07 +00:00
58750c9da9 Merge version_10_1780574979157 into main
Merge version_10_1780574979157 into main
2026-06-04 12:11:10 +00:00
kudinDmitriyUp
10de60098f Bob AI: Added Pricing section with highlighted cards 2026-06-04 12:10:22 +00:00
ea8d03e0ec Merge version_9_1780574627751 into main
Merge version_9_1780574627751 into main
2026-06-04 12:06:08 +00:00
kudinDmitriyUp
6beb29ee23 Bob AI: Introduce a dedicated Case Studies section to showcase in-de 2026-06-04 12:05:26 +00:00
7b8ba995cd Merge version_8_1780517966951 into main
Merge version_8_1780517966951 into main
2026-06-03 20:20:44 +00:00
kudinDmitriyUp
a11568b7c7 Bob AI: Added How It Works section to outline onboarding steps 2026-06-03 20:20:04 +00:00
0194a09ddb Merge version_7_1780492634052 into main
Merge version_7_1780492634052 into main
2026-06-03 13:19:00 +00:00
kudinDmitriyUp
014fb1ff2b Bob AI: Fixed hero section layout and implemented expanding image ga 2026-06-03 13:18:06 +00:00
b7103e9b8b Merge version_6_1780492427454 into main
Merge version_6_1780492427454 into main
2026-06-03 13:16:22 +00:00
kudinDmitriyUp
cf066a66a8 Bob AI: Rewrite the main headline in the Home section to be more ben 2026-06-03 13:15:43 +00:00
5b56576767 Merge version_5_1780491317611 into main
Merge version_5_1780491317611 into main
2026-06-03 12:56:40 +00:00
kudinDmitriyUp
8876fb18b1 Bob AI: when on the book now page, links in the navbar should naviga 2026-06-03 12:56:04 +00:00
5a65e07558 Merge version_4_1780491205123 into main
Merge version_4_1780491205123 into main
2026-06-03 12:54:31 +00:00
kudinDmitriyUp
092d712508 Bob AI: Populate src/pages/BookNowPage.tsx (snippet builder, 2 sections) 2026-06-03 12:54:25 +00:00
kudinDmitriyUp
7883b32660 Bob AI: Add book-now page 2026-06-03 12:54:08 +00:00
d166f7f52b Merge version_3_1780490790011 into main
Merge version_3_1780490790011 into main
2026-06-03 12:50:13 +00:00
10 changed files with 172 additions and 92 deletions

View File

@@ -2,11 +2,13 @@ import { Routes, Route } from 'react-router-dom';
import Layout from './components/Layout';
import HomePage from './pages/HomePage';
import BookNowPage from "@/pages/BookNowPage";
export default function App() {
return (
<Routes>
<Route element={<Layout />}>
<Route path="/" element={<HomePage />} />
<Route path="/book-now" element={<BookNowPage />} />
</Route>
</Routes>
);

View File

@@ -9,32 +9,34 @@ export default function Layout() {
const navItems = [
{
"name": "Home",
"href": "#home"
"href": "/#home"
},
{
"name": "About Us",
"href": "#about"
"href": "/#about"
},
{
"name": "Products",
"href": "#products"
"href": "/#products"
},
{
"name": "Why Us",
"href": "#why-us"
"href": "/#why-us"
},
{
"name": "Testimonials",
"href": "#testimonials"
"href": "/#testimonials"
},
{
"name": "FAQ",
"href": "#faq"
"href": "/#faq"
},
{
"name": "Social Proof",
"href": "#social-proof"
}
"href": "/#social-proof"
},
{ name: "Book Now", href: "/book-now" },
];
return (
@@ -44,7 +46,7 @@ export default function Layout() {
<NavbarCentered
ctaButton={{
text: "Order Now",
href: "#contact",
href: "/#contact",
}}
logo="Brand"
navItems={navItems} />
@@ -60,11 +62,11 @@ export default function Layout() {
items: [
{
label: "About Us",
href: "#about",
href: "/#about",
},
{
label: "Our Menu",
href: "#products",
href: "/#products",
},
{
label: "Custom Orders",
@@ -81,11 +83,11 @@ export default function Layout() {
items: [
{
label: "FAQ",
href: "#faq",
href: "/#faq",
},
{
label: "Contact Us",
href: "#contact",
href: "/#contact",
},
{
label: "Shipping & Delivery",

23
src/pages/BookNowPage.tsx Normal file
View File

@@ -0,0 +1,23 @@
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";
import ContactSplitForm from "@/components/sections/contact/ContactSplitForm";
export default function BookNowPage() {
return (
<>
<div data-webild-section="HeroSplit"><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>Book Now</p></div><TextAnimation text="Schedule Your Service with Brand Today" variant="fade-blur" gradientText={true} tag="h1" className="text-7xl 2xl:text-8xl leading-[1.15] font-semibold text-center md:text-left text-balance" /><TextAnimation text="Experience the convenience of booking your next appointment online. Our straightforward process ensures you can secure your preferred time quickly and efficiently, getting you closer to the service you need. Start now and take the first step." variant="fade-blur" 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="Book Now" href="#booking-form" variant="primary" /><Button text="View Services" href="/services" 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://img.freepik.com/premium-photo/young-woman-using-laptop-booking-online-appointment-clinic-modern-office_236854-47007.jpg" /></ScrollReveal></div></section></div>
<div data-webild-section="ContactSplitForm"><ContactSplitForm
tag="Book Now"
title="Schedule Your Service Today"
description="Ready to experience our services? Use the form below to book your appointment quickly and conveniently. We look forward to serving you."
inputs={[{"name":"fullName","type":"text","placeholder":"Your Full Name","required":true},{"name":"email","type":"email","placeholder":"Your Email Address","required":true},{"name":"phone","type":"tel","placeholder":"Your Phone Number","required":true},{"name":"service","type":"text","placeholder":"Preferred Service (e.g., Consultation)","required":true}]}
textarea={{"name":"message","placeholder":"Any specific requests or questions?","rows":4,"required":false}}
buttonText="Confirm Booking"
imageSrc="https://img.freepik.com/premium-photo/businesswoman-using-laptop-making-online-appointment-booking-calendar-schedule-management-concept_31965-10336.jpg"
/></div>
</>
);
}

View File

@@ -1,28 +1,38 @@
// AUTO-GENERATED shell by per-section-migrate.
// Section bodies live in ./<PageBase>/sections/<X>.tsx. Edit the section
// files directly; this shell only fixes render order.
import React from 'react';
import HomeSection from './HomePage/sections/Home';
import AboutSection from './HomePage/sections/About';
import ProductsSection from './HomePage/sections/Products';
import HowItWorksSection from './HomePage/sections/HowItWorks';
import WhyUsSection from './HomePage/sections/WhyUs';
import TestimonialsSection from './HomePage/sections/Testimonials';
import SocialProofSection from './HomePage/sections/SocialProof';
import PricingSection from './HomePage/sections/Pricing';
import FaqSection from './HomePage/sections/Faq';
import NewsletterSection from './HomePage/sections/Newsletter';
import CaseStudiesCardsSection from './HomePage/sections/CaseStudiesCards';
import ContactSection from './HomePage/sections/Contact';
{/* webild-stub @2026-06-04T15:44:44.030Z: remove all sections except hero and contact form */}
{/* webild-stub @2026-06-04T15:43:28.905Z: remove all sections except hero and contact form */}
export default function HomePage(): React.JSX.Element {
return (
<>
<HomeSection />
<AboutSection />
<ProductsSection />
<HowItWorksSection />
<WhyUsSection />
<TestimonialsSection />
<SocialProofSection />
<PricingSection />
<FaqSection />
<NewsletterSection />
<CaseStudiesCardsSection />
<ContactSection />
</>
);
}
}

View File

@@ -0,0 +1,17 @@
// Created by add_section_from_catalog (BlogSimpleCards).
import React from 'react';
import BlogSimpleCards from '@/components/sections/blog/BlogSimpleCards';
export default function CaseStudiesCardsSection(): React.JSX.Element {
return (
<div data-webild-section="case-studies-cards" id="case-studies-cards">
<BlogSimpleCards
tag="Case Studies"
items={[{"imageSrc":"https://images.unsplash.com/photo-1460925895917-afdab827c52f?auto=format&fit=crop&q=80&w=800&h=600","title":"Scaling Revenue by 300% in 6 Months","category":"E-commerce","date":"Oct 12, 2023","authorImageSrc":"https://images.unsplash.com/photo-1494790108377-be9c29b29330?auto=format&fit=crop&q=80&w=150&h=150","authorName":"Sarah Jenkins","excerpt":"Learn how we helped a boutique fashion brand optimize their conversion funnel and scale their ad spend profitably."},{"authorName":"David Chen","excerpt":"Discover the strategies we implemented to help a B2B SaaS company reduce their churn rate by 40%.","authorImageSrc":"https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?auto=format&fit=crop&q=80&w=150&h=150","date":"Nov 05, 2023","imageSrc":"https://images.unsplash.com/photo-1551288049-bebda4e38f71?auto=format&fit=crop&q=80&w=800&h=600","category":"SaaS","title":"Reducing Churn and Boosting Retention"},{"authorImageSrc":"https://images.unsplash.com/photo-1438761681033-6461ffad8d80?auto=format&fit=crop&q=80&w=150&h=150","excerpt":"See how our custom software solution reduced patient onboarding time by 60% for a regional clinic network.","authorName":"Emily Rodriguez","date":"Dec 18, 2023","title":"Streamlining Patient Onboarding","category":"Healthcare","imageSrc":"https://images.unsplash.com/photo-1576091160399-112ba8d25d1d?auto=format&fit=crop&q=80&w=800&h=600"}]}
title="Real Results from Real Clients"
description="Dive deep into how we've helped businesses achieve their goals and overcome their biggest challenges."
/>
</div>
);
}

View File

@@ -1,88 +1,61 @@
import React from 'react';
import HeroTiltedCards from '@/components/sections/hero/HeroTiltedCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
import ScrollReveal from "@/components/ui/ScrollReveal";
import Tag from "@/components/ui/Tag";
import React from "react";
import Button from "@/components/ui/Button";
import ImageOrVideo from "@/components/ui/ImageOrVideo";
import ScrollReveal from "@/components/ui/ScrollReveal";
import TextAnimation from "@/components/ui/TextAnimation";
export default function HomeSection(): React.JSX.Element {
export default function HomeSection() {
return (
<div id="home" data-webild-section="home" className="relative overflow-hidden bg-background">
{React.createElement(() => {
const [selectedImage, setSelectedImage] = React.useState<string | null>(null);
const items = [
"http://img.b2bpic.net/free-photo/top-view-challah-dish-hanukkah_23-2151129284.jpg",
"http://img.b2bpic.net/free-photo/high-angle-people-wearing-linen-clothing_23-2151030585.jpg",
"http://img.b2bpic.net/free-photo/delicious-freshly-bakery-products-wooden-background-close-up-photo-freshly-baked-bread-products_613910-6800.jpg",
"https://images.unsplash.com/photo-1509440159596-0249088772ff?q=80&w=2072&auto=format&fit=crop",
"https://images.unsplash.com/photo-1558961363-fa8fdf82db35?q=80&w=1965&auto=format&fit=crop"
];
return (
<>
<div className="container mx-auto px-4 text-center">
<div data-webild-section="home">
<section id="home" className="relative w-full overflow-hidden flex flex-col items-center justify-center text-center py-20 md:py-32">
<div className="container px-4 md:px-6 z-10">
<ScrollReveal variant="slide-up">
<Tag text="Welcome to Our Bakery" className="mb-6 mx-auto" />
<h1 className="text-5xl md:text-7xl font-bold text-foreground mb-6 tracking-tight">
Freshly Baked, Made<br />Daily, Just for You
</h1>
<p className="text-xl text-muted-foreground max-w-content-width mx-auto">
<span className="text-sm uppercase tracking-widest text-muted-foreground mb-4 block">
Welcome to Our Bakery
</span>
</ScrollReveal>
<TextAnimation
text="Start Your Day Right with Oven-Fresh Artisan Breads & Pastries"
variant="slide-up"
gradientText={false}
tag="h1"
className="text-5xl md:text-6xl lg:text-7xl font-bold tracking-tight text-foreground mb-6 max-w-content-width mx-auto"
/>
<ScrollReveal variant="slide-up" delay={0.2}>
<p className="text-lg md:text-xl text-muted-foreground mb-8 max-w-content-width mx-auto">
Handcrafted pastries, custom cakes, and artisan breads using premium ingredients. Order online or visit us today.
</p>
<div className="flex flex-wrap justify-center gap-4">
<Button text="Order Now" variant="primary" href="#contact" />
<Button text="Our Menu" variant="secondary" href="#products" />
</ScrollReveal>
<ScrollReveal variant="slide-up" delay={0.3}>
<div className="flex flex-col sm:flex-row items-center justify-center gap-4">
<Button text="Order Now" variant="primary" href="/#contact" />
<Button text="Our Menu" variant="secondary" href="/#products" />
</div>
</ScrollReveal>
<ScrollReveal variant="slide-up">
<div className="relative max-w-content-width mx-auto h-[400px] flex justify-center items-center">
{items.map((src, idx) => {
const rotations = ['-rotate-12', '-rotate-6', 'rotate-0', 'rotate-6', 'rotate-12'];
const zIndexes = ['z-10', 'z-20', 'z-30', 'z-20', 'z-10'];
const translates = ['-translate-x-40', '-translate-x-20', 'translate-x-0', 'translate-x-20', 'translate-x-40'];
return (
<div
key={idx}
className={`absolute w-48 h-64 md:w-64 md:h-80 rounded-theme overflow-hidden border-8 border-white shadow-xl cursor-pointer transition-transform hover:scale-110 hover:z-50 ${rotations[idx]} ${zIndexes[idx]} ${translates[idx]}`}
onClick={() => setSelectedImage(src)}
>
<ImageOrVideo imageSrc={src} className="w-full h-full object-cover" />
</div>
);
})}
<ScrollReveal variant="slide-up" delay={0.4}>
<div className="flex w-full max-w-content-width mx-auto h-[300px] md:h-[400px] gap-2 md:gap-4 mt-12">
<div className="group relative flex-1 hover:flex-[3] transition-all duration-500 ease-in-out overflow-hidden rounded-theme shadow-md cursor-pointer">
<img src="https://images.unsplash.com/photo-1509440159596-0249088772ff?w=800&q=80" alt="Freshly baked pastry" className="w-full h-full object-cover" />
</div>
<div className="group relative flex-1 hover:flex-[3] transition-all duration-500 ease-in-out overflow-hidden rounded-theme shadow-md cursor-pointer">
<img src="https://images.unsplash.com/photo-1483695028939-5bb13f8648b0?w=800&q=80" alt="Artisan bread loaf" className="w-full h-full object-cover" />
</div>
<div className="group relative flex-1 hover:flex-[3] transition-all duration-500 ease-in-out overflow-hidden rounded-theme shadow-md cursor-pointer">
<img src="https://images.unsplash.com/photo-1549931319-a545dcf3bc73?w=800&q=80" alt="Sourdough bread" className="w-full h-full object-cover" />
</div>
<div className="group relative flex-1 hover:flex-[3] transition-all duration-500 ease-in-out overflow-hidden rounded-theme shadow-md cursor-pointer">
<img src="https://images.unsplash.com/photo-1550617931-e17a7b70dce2?w=800&q=80" alt="Custom cake" className="w-full h-full object-cover" />
</div>
<div className="group relative flex-1 hover:flex-[3] transition-all duration-500 ease-in-out overflow-hidden rounded-theme shadow-md cursor-pointer">
<img src="https://images.unsplash.com/photo-1608198093002-ad4e005484ec?w=800&q=80" alt="Chocolate chip cookies" className="w-full h-full object-cover" />
</div>
</div>
</ScrollReveal>
</div>
{selectedImage && (
<div
className="fixed inset-0 z-[100] flex items-center justify-center bg-black/80 p-4 backdrop-blur-sm"
onClick={() => setSelectedImage(null)}
>
<button
className="absolute top-6 right-6 text-white hover:text-gray-300 transition-colors"
onClick={() => setSelectedImage(null)}
>
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg>
</button>
<div
className="relative max-w-content-width max-h-[90vh] w-full h-full flex items-center justify-center"
onClick={(e) => e.stopPropagation()}
>
<img
src={selectedImage}
alt="Expanded view"
className="max-w-full max-h-full object-contain rounded-lg shadow-2xl"
/>
</div>
</div>
)}
</>
);
})}
</div>
</section>
</div>
);
}

View File

@@ -0,0 +1,17 @@
// Created by add_section_from_catalog (FeaturesDetailedSteps).
import React from 'react';
import FeaturesDetailedSteps from '@/components/sections/features/FeaturesDetailedSteps';
export default function HowItWorksSection(): React.JSX.Element {
return (
<div data-webild-section="how-it-works" id="how-it-works">
<FeaturesDetailedSteps
title="Get started in 3 simple steps"
steps={[{"tag":"Step 1","imageSrc":"https://images.unsplash.com/photo-1551288049-bebda4e38f71?q=80&w=2070&auto=format&fit=crop","description":"Enter your details and verify your email to get instant access to our platform.","title":"Create your account","subtitle":"Sign up in seconds"},{"subtitle":"Tailor it to your needs","imageSrc":"https://images.unsplash.com/photo-1460925895917-afdab827c52f?q=80&w=2015&auto=format&fit=crop","tag":"Step 2","title":"Configure your workspace","description":"Set up your preferences, invite team members, and connect your favorite tools."},{"subtitle":"See results immediately","imageSrc":"https://images.unsplash.com/photo-1551434678-e076c223a692?q=80&w=2070&auto=format&fit=crop","tag":"Step 3","title":"Start achieving goals","description":"Launch your first project and track your progress with our intuitive dashboard."}]}
description="Our onboarding process is designed to be quick and painless so you can start seeing value immediately."
tag="How It Works"
/>
</div>
);
}

View File

@@ -0,0 +1,18 @@
// Created by add_section_from_catalog (ContactCenter).
import React from 'react';
import ContactCenter from '@/components/sections/contact/ContactCenter';
export default function NewsletterSection(): React.JSX.Element {
return (
<div data-webild-section="newsletter" id="newsletter">
<ContactCenter
inputPlaceholder="Enter your email address"
title="Stay in the Loop"
description="Join our newsletter to get the latest news, updates, and special offers delivered directly to your inbox."
tag="Newsletter"
buttonText="Subscribe"
/>
</div>
);
}

View File

@@ -0,0 +1,17 @@
// Created by add_section_from_catalog (PricingHighlightedCards).
import React from 'react';
import PricingHighlightedCards from '@/components/sections/pricing/PricingHighlightedCards';
export default function PricingSection(): React.JSX.Element {
return (
<div data-webild-section="pricing" id="pricing">
<PricingHighlightedCards
title="Simple, Transparent Pricing"
plans={[{"features":["1 Artisan Loaf per week","Choice of Sourdough or Rye","Free in-store pickup"],"tag":"Basic","primaryButton":{"href":"#","text":"Subscribe Now"},"price":"$15/wk","description":"Perfect for individuals who want fresh bread weekly."},{"highlight":"Most Popular","tag":"Family","description":"Ideal for families who love fresh baked goods.","price":"$35/wk","primaryButton":{"href":"#","text":"Subscribe Now"},"features":["3 Artisan Loaves per week","Assorted Pastries box (4 pcs)","Free local delivery"]},{"features":["Custom cake orders","Large pastry platters","Dedicated catering manager"],"description":"For parties, corporate events, and special occasions.","primaryButton":{"href":"#","text":"Contact Us"},"price":"Custom","tag":"Event"}]}
tag="Pricing"
description="Choose the perfect plan for your daily bread and pastry needs."
/>
</div>
);
}

View File

@@ -6,4 +6,5 @@ export interface Route {
export const routes: Route[] = [
{ path: '/', label: 'Home', pageFile: 'HomePage' },
{ path: '/book-now', label: 'Book Now', pageFile: 'BookNowPage' },
];