19 Commits

Author SHA1 Message Date
3193faedb3 Merge version_11_1780499307993 into main
Merge version_11_1780499307993 into main
2026-06-03 15:10:13 +00:00
kudinDmitriyUp
e210255bcd Bob AI: Added an FAQ section 2026-06-03 15:09:23 +00:00
9ff4bec675 Merge version_10_1780499096077 into main
Merge version_10_1780499096077 into main
2026-06-03 15:06:40 +00:00
kudinDmitriyUp
36661602df Bob AI: Update hero section spacing to match the rest of the site 2026-06-03 15:06:02 +00:00
f1324c3acc Merge version_9_1780498852595 into main
Merge version_9_1780498852595 into main
2026-06-03 15:01:49 +00:00
kudinDmitriyUp
307f8aae69 Bob AI (stub): Increase the spacing from the side of each element on the he 2026-06-03 15:01:46 +00:00
103f1ac138 Merge version_8_1780498632449 into main
Merge version_8_1780498632449 into main
2026-06-03 14:58:26 +00:00
kudinDmitriyUp
1808eaeb59 Bob AI: Fix button styling in hero section to use standard Button co 2026-06-03 14:57:44 +00:00
0a555cebf0 Merge version_7_1780497924503 into main
Merge version_7_1780497924503 into main
2026-06-03 14:47:12 +00:00
kudinDmitriyUp
1bd975b83a Bob AI: On the hero section, fix the broken spacing from the sides o 2026-06-03 14:46:36 +00:00
070498676d Merge version_6_1780497418695 into main
Merge version_6_1780497418695 into main
2026-06-03 14:38:52 +00:00
kudinDmitriyUp
0adc67b76d Bob AI (stub): Fix the spacing and buttons on the first section. 2026-06-03 14:38:49 +00:00
bc5393893b Merge version_5_1780497112957 into main
Merge version_5_1780497112957 into main
2026-06-03 14:33:37 +00:00
kudinDmitriyUp
b0069a702f Bob AI: Changed the second section to a split layout with text and i 2026-06-03 14:32:57 +00:00
3c3c30edec Merge version_4_1780496862537 into main
Merge version_4_1780496862537 into main
2026-06-03 14:30:32 +00:00
kudinDmitriyUp
a8915a2817 Bob AI: For the image on the hero section, have it switch in between 2026-06-03 14:29:56 +00:00
3aa9469b5d Merge version_3_1780496675582 into main
Merge version_3_1780496675582 into main
2026-06-03 14:26:25 +00:00
kudinDmitriyUp
c9c7285f53 Bob AI (stub): Make the hero section smoothly switch between 4 images, with 2026-06-03 14:26:19 +00:00
eed444b7ad Merge version_2_1780496569911 into main
Merge version_2_1780496569911 into main
2026-06-03 14:23:46 +00:00
4 changed files with 170 additions and 51 deletions

View File

@@ -12,6 +12,16 @@ import TeamSection from './HomePage/sections/Team';
import TestimonialsSection from './HomePage/sections/Testimonials';
import ContactSection from './HomePage/sections/Contact';
import FaqSection from './HomePage/sections/Faq';{/* webild-stub @2026-06-03T15:01:45.386Z: Increase the spacing from the side of each element on the hero section like the rest of the site */}
{/* webild-stub @2026-06-03T14:38:48.425Z: Fix the spacing and buttons on the first section. */}
{/* webild-stub @2026-06-03T14:26:17.945Z: Make the hero section smoothly switch between 4 images, with a loading animation in between each image transition. */}
export default function HomePage(): React.JSX.Element {
return (
<>
@@ -22,6 +32,7 @@ export default function HomePage(): React.JSX.Element {
<ClientsSection />
<TeamSection />
<TestimonialsSection />
<FaqSection />
<ContactSection />
</>
);

View File

@@ -4,19 +4,47 @@
import React from 'react';
import AboutTestimonial from '@/components/sections/about/AboutTestimonial';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
import Tag from "@/components/ui/Tag";
import Button from "@/components/ui/Button";
export default function AboutSection(): React.JSX.Element {
return (
<div id="about" data-section="about">
<SectionErrorBoundary name="about">
<AboutTestimonial
tag="About Us"
quote="Our mission is to empower businesses with innovative marketing solutions that connect, engage, and convert. We believe in transparent partnerships and sustainable growth."
author="Jane Doe"
role="Founder & CEO, Innovate Marketing"
imageSrc="http://img.b2bpic.net/free-photo/joyful-business-woman-with-coffee-cup_23-2148095746.jpg"
/>
</SectionErrorBoundary>
</div>
<div id="about" data-webild-section="about" className="py-24 bg-background">
<SectionErrorBoundary name="about">
<div className="container mx-auto px-4 sm:px-6 lg:px-8">
<div className="grid grid-cols-1 lg:grid-cols-2 gap-12 items-center">
<div>
<Tag text="About Us" className="mb-6" />
<h2 className="text-4xl font-bold tracking-tight text-foreground sm:text-5xl mb-6">
We are a team of passionate marketers.
</h2>
<p className="text-lg text-muted-foreground mb-8">
Our mission is to empower businesses with innovative marketing solutions that connect, engage, and convert. We believe in transparent partnerships and sustainable growth.
</p>
<div className="flex gap-4">
<Button text="Learn More" variant="primary" />
<Button text="Meet the Team" variant="secondary" />
</div>
</div>
<div className="relative h-[500px] rounded-2xl overflow-hidden">
<img
src="https://images.unsplash.com/photo-1522071820081-009f0129c71c?auto=format&fit=crop&q=80"
alt="Team working"
className="absolute inset-0 w-full h-full object-cover"
/>
</div>
</div>
</div>
<div className="hidden">
<AboutTestimonial
tag="About Us"
quote="Our mission is to empower businesses with innovative marketing solutions that connect, engage, and convert. We believe in transparent partnerships and sustainable growth."
author="Jane Doe"
role="Founder & CEO, Innovate Marketing"
imageSrc="http://img.b2bpic.net/free-photo/joyful-business-woman-with-coffee-cup_23-2148095746.jpg"
/>
</div>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,47 @@
// Created by create_section tool.
import React from 'react';
import Tag from '@/components/ui/Tag';
export default function FaqSection(): React.JSX.Element {
return (
<div data-webild-section="faq" className="py-24 px-6 md:px-12 lg:px-24 bg-background">
<div className="max-w-4xl mx-auto">
<div className="text-center mb-16 flex flex-col items-center">
<Tag text="FAQ" className="mb-6" />
<h2 className="text-4xl md:text-5xl font-bold text-foreground mb-6 tracking-tight">
Frequently Asked Questions
</h2>
<p className="text-xl text-muted-foreground max-w-2xl mx-auto">
Find answers to common questions about our services, process, and how we can help your business grow.
</p>
</div>
<div className="space-y-6">
{[
{
q: "What services do you offer?",
a: "We offer a comprehensive suite of digital marketing services including SEO, PPC advertising, social media management, content marketing, and email marketing. Our strategies are tailored to meet your specific business goals."
},
{
q: "How do you measure success?",
a: "We use a data-driven approach, tracking key performance indicators (KPIs) such as website traffic, conversion rates, cost per acquisition (CPA), and return on investment (ROI). We provide regular, transparent reports so you can see exactly how your campaigns are performing."
},
{
q: "Do you work with businesses in my industry?",
a: "We have experience working with a wide range of industries, from e-commerce and technology to healthcare and professional services. Our team takes the time to understand your unique market and audience to develop effective strategies."
},
{
q: "How long does it take to see results?",
a: "The timeline for results varies depending on the specific services and your current digital presence. While some tactics like PPC can yield immediate traffic, strategies like SEO typically take 3-6 months to show significant impact. We focus on sustainable, long-term growth."
}
].map((faq, i) => (
<div key={i} className="border border-border rounded-xl p-6 bg-card">
<h3 className="text-xl font-semibold text-foreground mb-3">{faq.q}</h3>
<p className="text-muted-foreground">{faq.a}</p>
</div>
))}
</div>
</div>
</div>
);
}

View File

@@ -6,6 +6,7 @@
import React, { useState, useEffect } from 'react';
import HeroBillboardBrand from '@/components/sections/hero/HeroBillboardBrand';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
import Button from "@/components/ui/Button";
const IMAGES = [
"http://img.b2bpic.net/free-photo/group-friends-planning-trip-cafe_23-2148952344.jpg",
@@ -16,53 +17,85 @@ const IMAGES = [
export default function HeroSection(): React.JSX.Element {
const [currentImageIndex, setCurrentImageIndex] = useState(0);
const [isLoading, setIsLoading] = useState(true);
const [currentImage, setCurrentImage] = useState(IMAGES[0]);
const [progress, setProgress] = useState(0);
useEffect(() => {
const interval = setInterval(() => {
setIsLoading(true);
setCurrentImageIndex((prevIndex) => (prevIndex + 1) % IMAGES.length);
}, 5000); // Change image every 5 seconds
const duration = 5000; // 5 seconds per image
const interval = 50; // update progress every 50ms
const step = (interval / duration) * 100;
return () => clearInterval(interval);
const timer = setInterval(() => {
setProgress((prev) => {
if (prev >= 100) {
setCurrentImageIndex((prevIndex) => (prevIndex + 1) % IMAGES.length);
return 0;
}
return prev + step;
});
}, interval);
return () => clearInterval(timer);
}, []);
useEffect(() => {
const image = new Image();
image.src = IMAGES[currentImageIndex];
image.onload = () => {
setCurrentImage(IMAGES[currentImageIndex]);
setIsLoading(false);
};
image.onerror = () => {
console.error("Failed to load image:", IMAGES[currentImageIndex]);
setIsLoading(false);
};
}, [currentImageIndex]);
return (
<div id="hero" data-section="hero" className="relative">
{isLoading && (
<div className="absolute inset-0 flex items-center justify-center bg-background/80 z-10">
<div className="animate-spin rounded-full h-12 w-12 border-t-2 border-b-2 border-foreground"></div>
<div id="hero" data-webild-section="hero" className="relative w-full pt-24 pb-12 px-4 sm:px-6 lg:px-8">
<div className="container mx-auto mb-12">
<h1 className="text-6xl md:text-8xl font-bold tracking-tight mb-8 text-center">
Innovate Marketing
</h1>
<div className="flex flex-col md:flex-row justify-end items-end gap-6">
<div className="max-w-md text-right">
<p className="text-base md:text-lg text-muted-foreground mb-6">
Your Vision, Amplified. We craft data-driven strategies and compelling narratives to elevate your brand and drive measurable results. Let's grow together.
</p>
<div className="flex items-center justify-end gap-4">
<Button href="#services" text="Our Services" variant="primary" />
<Button href="#contact" text="Contact Us" variant="secondary" />
</div>
</div>
)}
<SectionErrorBoundary name="hero">
<HeroBillboardBrand
brand="Innovate Marketing"
description="Your Vision, Amplified. We craft data-driven strategies and compelling narratives to elevate your brand and drive measurable results. Let's grow together."
primaryButton={{
text: "Our Services",
href: "#services",
}}
secondaryButton={{
text: "Contact Us",
href: "#contact",
}}
imageSrc={currentImage}
/>
</SectionErrorBoundary>
</div>
</div>
<div className="w-full container mx-auto relative rounded-3xl overflow-hidden aspect-[16/9] md:aspect-[21/9] shadow-2xl bg-muted">
{IMAGES.map((src, index) => (
<div
key={src}
className={`absolute inset-0 transition-opacity duration-1000 ease-in-out ${
index === currentImageIndex ? 'opacity-100 z-10' : 'opacity-0 z-0'
}`}
>
<img
src={src}
alt={`Slide ${index + 1}`}
className="w-full h-full object-cover"
/>
</div>
))}
{/* Progress Bars Overlay */}
<div className="absolute bottom-6 left-0 right-0 z-20 flex justify-center gap-3 px-6">
{IMAGES.map((_, index) => (
<div
key={index}
className="h-1.5 w-16 sm:w-24 bg-white/30 rounded-full overflow-hidden backdrop-blur-sm cursor-pointer"
onClick={() => {
setCurrentImageIndex(index);
setProgress(0);
}}
>
<div
className="h-full bg-white transition-all duration-75 ease-linear"
style={{
width: index === currentImageIndex
? `${progress}%`
: index < currentImageIndex ? '100%' : '0%'
}}
/>
</div>
))}
</div>
</div>
</div>
);
}