4 Commits

Author SHA1 Message Date
9a4e7b3367 Merge version_2_1781623791444 into main
Merge version_2_1781623791444 into main
2026-06-16 15:41:11 +00:00
kudinDmitriyUp
5b15e82ae6 Bob AI (stub): make the website feel less static by incorporating animated 2026-06-16 15:41:05 +00:00
kudinDmitriyUp
123b2f11ab Bob AI: fix build errors (attempt 1) 2026-06-16 15:33:49 +00:00
kudinDmitriyUp
2545c2aab3 Bob AI: Added animated backgrounds and scroll reveal to all sections 2026-06-16 15:32:14 +00:00
10 changed files with 412 additions and 257 deletions

View File

@@ -1,269 +1,39 @@
import AboutTestimonial from '@/components/sections/about/AboutTestimonial';
import ContactCta from '@/components/sections/contact/ContactCta';
import FaqSimple from '@/components/sections/faq/FaqSimple';
import FeaturesDetailedSteps from '@/components/sections/features/FeaturesDetailedSteps';
import FeaturesRevealCardsBento from '@/components/sections/features/FeaturesRevealCardsBento';
import HeroTiltedCards from '@/components/sections/hero/HeroTiltedCards';
import TeamProfileCards from '@/components/sections/team/TeamProfileCards';
import TestimonialMarqueeOverlayCards from '@/components/sections/testimonial/TestimonialMarqueeOverlayCards';
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 IndustriesSection from './HomePage/sections/Industries';
import TeamSection from './HomePage/sections/Team';
import TestimonialsSection from './HomePage/sections/Testimonials';
import FaqSection from './HomePage/sections/Faq';
import ContactSection from './HomePage/sections/Contact';
{/* webild-stub @2026-06-16T15:41:04.448Z: make the website feel less static by incorporating animated backgrounds, scroll-reveal animations for all sections, and enhanced hover effects on buttons and service cards */}
export default function HomePage(): React.JSX.Element {
return (
<>
<div id="hero" data-section="hero">
<SectionErrorBoundary name="hero">
<HeroTiltedCards
tag="National Insurance-Approved"
title="Risk Managed. Emergencies Solved. Operations Restored."
description="WECOR Africa delivers 24/7 rapid response, insurance-approved risk surveying, loss adjusting, and end-to-end restoration across South Africa. One partner. National reach. Built on trust."
primaryButton={{
text: "Request Emergency Response",
href: "tel:0627871134",
}}
secondaryButton={{
text: "Request Quote",
href: "#contact",
}}
items={[
{
imageSrc: "https://storage.googleapis.com/webild/users/user_3FDwuR9HHlTkuUO5w5Mcfzo4prm/uploaded-1781623377200-657etlcd.png",
},
{
imageSrc: "https://storage.googleapis.com/webild/users/user_3FDwuR9HHlTkuUO5w5Mcfzo4prm/uploaded-1781623377206-j238zw1w.png",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/cheerful-admins-meeting-data-center-review-reports-doing-handshake_482257-120020.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/front-view-man-holding-crossed-arms_23-2149478458.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/church-reconstruction-close-up_1353-99.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<>
<HeroSection />
<div id="about" data-section="about">
<SectionErrorBoundary name="about">
<AboutTestimonial
tag="Who We Are"
quote="Prevent it. Fix it. Help you grow. We are your one partner for every stage—before, during and after an event, ensuring national standards across all sites."
author="Donavan Prinsloo"
role="CEO, WECOR Africa"
imageSrc="http://img.b2bpic.net/free-photo/businessman-smiling-looking-camera_23-2148112827.jpg"
/>
</SectionErrorBoundary>
</div>
<AboutSection />
<div id="services" data-section="services">
<SectionErrorBoundary name="services">
<FeaturesDetailedSteps
tag="Our Capabilities"
title="End-to-End Solutions"
description="Comprehensive risk management and emergency response to maintain operational continuity."
steps={[
{
tag: "Risk & Compliance",
title: "Prevention",
subtitle: "Proactive Surveys",
description: "Mitigate risk before losses occur.",
imageSrc: "http://img.b2bpic.net/free-photo/man-standing-outside-holding-notepad-grinning_23-2147657160.jpg",
},
{
tag: "Rapid Response",
title: "Fix It",
subtitle: "24/7 Deployment",
description: "Immediate incident handling to restore stability.",
imageSrc: "http://img.b2bpic.net/free-photo/paramedics-with-coffee-cups-full-shot_23-2149478504.jpg",
},
{
tag: "Restoration",
title: "Recovery",
subtitle: "Quality Assurance",
description: "Professional reinstatement for business thrive.",
imageSrc: "http://img.b2bpic.net/free-photo/portrait-person-working-construction-industry_23-2151349712.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<ServicesSection />
<div id="industries" data-section="industries">
<SectionErrorBoundary name="industries">
<FeaturesRevealCardsBento
tag="Sectors We Serve"
title="National Insurance-Approved Partner"
description="One partner for diverse industries, ensuring compliance and operational integrity."
items={[
{
title: "Schools",
description: "Health & safety compliance, maintenance, risk assessments.",
href: "#contact",
imageSrc: "http://img.b2bpic.net/free-photo/close-up-male-technician-pointing-motherboard_23-2147883856.jpg",
},
{
title: "Industries & Factories",
description: "H&S compliance, business continuity support, fire safety.",
href: "#contact",
imageSrc: "http://img.b2bpic.net/free-photo/pollution-concept-factory-emisions_23-2149094959.jpg",
},
{
title: "Mining",
description: "Compliance support, incident documentation, risk management.",
href: "#contact",
imageSrc: "http://img.b2bpic.net/free-photo/wide-shot-mining-field-with-industrial-structure_181624-15314.jpg",
},
{
title: "Agriculture",
description: "Farm risk reviews, perimeter security, insurance support.",
href: "#contact",
imageSrc: "http://img.b2bpic.net/free-photo/two-researches-man-woman-examine-greenery-with-tablet-all-white-greenhouse_8353-7150.jpg",
},
{
title: "Managing Agents",
description: "Body corporate support, maintenance, risk assessments.",
href: "#contact",
imageSrc: "http://img.b2bpic.net/free-photo/mall-america-scenes-cinematic-style_23-2151551205.jpg",
},
{
title: "Logistics",
description: "Fire safety, risk assessments, 24/7 maintenance.",
href: "#contact",
imageSrc: "http://img.b2bpic.net/free-photo/logistic-center-concept-with-storage-units_23-2148902600.jpg",
},
{
title: "Corporate Clients",
description: "Facility management, security, and insurance readiness.",
href: "#contact",
imageSrc: "http://img.b2bpic.net/free-photo/factory-management-industrial-facility-looking-data-mockup-laptop_482257-126905.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<IndustriesSection />
<div id="team" data-section="team">
<SectionErrorBoundary name="team">
<TeamProfileCards
tag="Leadership"
title="Expert Management"
description="Professional teams ready to assist you nationwide."
items={[
{
title: "Donavan Prinsloo",
description: "CEO & Lead Loss Adjuster with decades of industry experience.",
avatarSrc: "http://img.b2bpic.net/free-photo/smiling-middle-aged-business-leader-window_1262-5674.jpg",
buttonText: "Contact",
buttonHref: "tel:0627871134",
imageSrc: "http://img.b2bpic.net/free-photo/middle-age-businessman-smiling-happy-standing-city_839833-25759.jpg",
},
{
title: "Jess Barnard",
description: "Head of Business Development specializing in national account growth.",
avatarSrc: "http://img.b2bpic.net/free-photo/happy-smiling-businesswoman-looking-camera-with-arms-crossed-portrait_1163-4337.jpg",
buttonText: "Contact",
buttonHref: "tel:0637178868",
imageSrc: "http://img.b2bpic.net/free-photo/smiling-successful-middle-aged-business-leader_1262-5690.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<TeamSection />
<div id="testimonials" data-section="testimonials">
<SectionErrorBoundary name="testimonials">
<TestimonialMarqueeOverlayCards
tag="Social Proof"
title="Trusted by Leaders"
description="Join our network of satisfied partners and clients across South Africa."
testimonials={[
{
name: "Sarah M.",
role: "Facilities Director",
company: "Global Retail",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/young-attractive-black-businessman-buys-new-car-he-signs-contract-takes-keys-manager_146671-18405.jpg",
},
{
name: "James L.",
role: "Portfolio Manager",
company: "Body Corporate SA",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/professional-mature-man-standing-front-building_23-2147955272.jpg",
},
{
name: "Karen B.",
role: "Operations Manager",
company: "Heavy Industries",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/happy-businessman-greeting-african-american-steel-worker-while-visiting-industrial-facility_637285-4126.jpg",
},
{
name: "David T.",
role: "Principal",
company: "City Academy",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/man-teacher-wearing-glasses-checking-class-register-looking-aside-being-displeased-making-wry-mouth-sitting-school-desk-front-blackboard-classroom_141793-132918.jpg",
},
{
name: "Lindiwe K.",
role: "Insurance Broker",
company: "National Insurance",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/happy-insurance-agent-communicating-with-senior-clients-while-going-through-paperwork-meeting-office_637285-1182.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<TestimonialsSection />
<div id="faq" data-section="faq">
<SectionErrorBoundary name="faq">
<FaqSimple
tag="Support"
title="Frequently Asked Questions"
description="Everything you need to know about our insurance-approved services."
items={[
{
question: "Are you available 24/7?",
answer: "Yes, our rapid response teams operate 24 hours a day, 7 days a week, nationwide.",
},
{
question: "What does insurance-approved mean?",
answer: "It means our processes, documentation, and quality standards are fully aligned with insurance protocols, ensuring cleaner, faster claim outcomes.",
},
{
question: "Do you cover all of South Africa?",
answer: "Absolutely. We have strategically positioned teams ready to deploy across all regions.",
},
{
question: "Do you handle maintenance or just emergencies?",
answer: "We provide end-to-end solutions, including proactive preventative maintenance, risk surveys, and emergency repair.",
},
]}
/>
</SectionErrorBoundary>
</div>
<FaqSection />
<div id="contact" data-section="contact">
<SectionErrorBoundary name="contact">
<ContactCta
tag="Get in Touch"
text="Need professional risk management or emergency support? Contact WECOR Africa now for a national, insurance-approved partner."
primaryButton={{
text: "Emergency: 062 787 1134",
href: "tel:0627871134",
}}
secondaryButton={{
text: "WhatsApp Support",
href: "https://wa.me/27627871134",
}}
/>
</SectionErrorBoundary>
</div>
<ContactSection />
</>
);
}

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 "about" section.
import React from 'react';
import AboutTestimonial from '@/components/sections/about/AboutTestimonial';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
import ScrollReveal from "@/components/ui/ScrollReveal";
import NoiseBackground from "@/components/ui/NoiseBackground";
export default function AboutSection(): React.JSX.Element {
return (
<div id="about" data-section="about" className="relative">
<NoiseBackground position="absolute" />
<SectionErrorBoundary name="about">
<ScrollReveal>
<AboutTestimonial
tag="Who We Are"
quote="Prevent it. Fix it. Help you grow. We are your one partner for every stage—before, during and after an event, ensuring national standards across all sites."
author="Donavan Prinsloo"
role="CEO, WECOR Africa"
imageSrc="http://img.b2bpic.net/free-photo/businessman-smiling-looking-camera_23-2148112827.jpg"
/>
</ScrollReveal>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,32 @@
// 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";
import ScrollReveal from "@/components/ui/ScrollReveal";
import LightRaysCenterBackground from "@/components/ui/LightRaysCenterBackground";
export default function ContactSection(): React.JSX.Element {
return (
<div id="contact" data-section="contact" className="relative">
<LightRaysCenterBackground position="absolute" />
<SectionErrorBoundary name="contact">
<ScrollReveal>
<ContactCta
tag="Get in Touch"
text="Need professional risk management or emergency support? Contact WECOR Africa now for a national, insurance-approved partner."
primaryButton={{
text: "Emergency: 062 787 1134",
href: "tel:0627871134",
}}
secondaryButton={{
text: "WhatsApp Support",
href: "https://wa.me/27627871134",
}}
/>
</ScrollReveal>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,43 @@
// 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 FaqSimple from '@/components/sections/faq/FaqSimple';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
import ScrollReveal from "@/components/ui/ScrollReveal";
import ColumnWaveBackground from "@/components/ui/ColumnWaveBackground";
export default function FaqSection(): React.JSX.Element {
return (
<div id="faq" data-section="faq" className="relative">
<ColumnWaveBackground position="absolute" />
<SectionErrorBoundary name="faq">
<ScrollReveal>
<FaqSimple
tag="Support"
title="Frequently Asked Questions"
description="Everything you need to know about our insurance-approved services."
items={[
{
question: "Are you available 24/7?",
answer: "Yes, our rapid response teams operate 24 hours a day, 7 days a week, nationwide.",
},
{
question: "What does insurance-approved mean?",
answer: "It means our processes, documentation, and quality standards are fully aligned with insurance protocols, ensuring cleaner, faster claim outcomes.",
},
{
question: "Do you cover all of South Africa?",
answer: "Absolutely. We have strategically positioned teams ready to deploy across all regions.",
},
{
question: "Do you handle maintenance or just emergencies?",
answer: "We provide end-to-end solutions, including proactive preventative maintenance, risk surveys, and emergency repair.",
},
]}
/>
</ScrollReveal>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,50 @@
// 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 HeroTiltedCards from '@/components/sections/hero/HeroTiltedCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
import ScrollReveal from "@/components/ui/ScrollReveal";
import AuroraBackground from "@/components/ui/AuroraBackground";
export default function HeroSection(): React.JSX.Element {
return (
<div id="hero" data-section="hero" className="relative">
<AuroraBackground position="absolute" />
<SectionErrorBoundary name="hero">
<ScrollReveal>
<HeroTiltedCards
tag="National Insurance-Approved"
title="Risk Managed. Emergencies Solved. Operations Restored."
description="WECOR Africa delivers 24/7 rapid response, insurance-approved risk surveying, loss adjusting, and end-to-end restoration across South Africa. One partner. National reach. Built on trust."
primaryButton={{
text: "Request Emergency Response",
href: "tel:0627871134",
}}
secondaryButton={{
text: "Request Quote",
href: "#contact",
}}
items={[
{
imageSrc: "https://storage.googleapis.com/webild/users/user_3FDwuR9HHlTkuUO5w5Mcfzo4prm/uploaded-1781623377200-657etlcd.png",
},
{
imageSrc: "https://storage.googleapis.com/webild/users/user_3FDwuR9HHlTkuUO5w5Mcfzo4prm/uploaded-1781623377206-j238zw1w.png",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/cheerful-admins-meeting-data-center-review-reports-doing-handshake_482257-120020.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/front-view-man-holding-crossed-arms_23-2149478458.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/church-reconstruction-close-up_1353-99.jpg",
},
]}
/>
</ScrollReveal>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,69 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "industries" section.
import React from 'react';
import FeaturesRevealCardsBento from '@/components/sections/features/FeaturesRevealCardsBento';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
import ScrollReveal from "@/components/ui/ScrollReveal";
import GridLinesBackground from "@/components/ui/GridLinesBackground";
export default function IndustriesSection(): React.JSX.Element {
return (
<div id="industries" data-section="industries" className="relative">
<GridLinesBackground position="absolute" />
<SectionErrorBoundary name="industries">
<ScrollReveal>
<FeaturesRevealCardsBento
tag="Sectors We Serve"
title="National Insurance-Approved Partner"
description="One partner for diverse industries, ensuring compliance and operational integrity."
items={[
{
title: "Schools",
description: "Health & safety compliance, maintenance, risk assessments.",
href: "#contact",
imageSrc: "http://img.b2bpic.net/free-photo/close-up-male-technician-pointing-motherboard_23-2147883856.jpg",
},
{
title: "Industries & Factories",
description: "H&S compliance, business continuity support, fire safety.",
href: "#contact",
imageSrc: "http://img.b2bpic.net/free-photo/pollution-concept-factory-emisions_23-2149094959.jpg",
},
{
title: "Mining",
description: "Compliance support, incident documentation, risk management.",
href: "#contact",
imageSrc: "http://img.b2bpic.net/free-photo/wide-shot-mining-field-with-industrial-structure_181624-15314.jpg",
},
{
title: "Agriculture",
description: "Farm risk reviews, perimeter security, insurance support.",
href: "#contact",
imageSrc: "http://img.b2bpic.net/free-photo/two-researches-man-woman-examine-greenery-with-tablet-all-white-greenhouse_8353-7150.jpg",
},
{
title: "Managing Agents",
description: "Body corporate support, maintenance, risk assessments.",
href: "#contact",
imageSrc: "http://img.b2bpic.net/free-photo/mall-america-scenes-cinematic-style_23-2151551205.jpg",
},
{
title: "Logistics",
description: "Fire safety, risk assessments, 24/7 maintenance.",
href: "#contact",
imageSrc: "http://img.b2bpic.net/free-photo/logistic-center-concept-with-storage-units_23-2148902600.jpg",
},
{
title: "Corporate Clients",
description: "Facility management, security, and insurance readiness.",
href: "#contact",
imageSrc: "http://img.b2bpic.net/free-photo/factory-management-industrial-facility-looking-data-mockup-laptop_482257-126905.jpg",
},
]}
/>
</ScrollReveal>
</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 "services" section.
import React from 'react';
import FeaturesDetailedSteps from '@/components/sections/features/FeaturesDetailedSteps';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
import ScrollReveal from "@/components/ui/ScrollReveal";
import FloatingGradientBackground from "@/components/ui/FloatingGradientBackground";
export default function ServicesSection(): React.JSX.Element {
return (
<div id="services" data-section="services" className="relative">
<FloatingGradientBackground position="absolute" />
<SectionErrorBoundary name="services">
<ScrollReveal>
<FeaturesDetailedSteps
tag="Our Capabilities"
title="End-to-End Solutions"
description="Comprehensive risk management and emergency response to maintain operational continuity."
steps={[
{
tag: "Risk & Compliance",
title: "Prevention",
subtitle: "Proactive Surveys",
description: "Mitigate risk before losses occur.",
imageSrc: "http://img.b2bpic.net/free-photo/man-standing-outside-holding-notepad-grinning_23-2147657160.jpg",
},
{
tag: "Rapid Response",
title: "Fix It",
subtitle: "24/7 Deployment",
description: "Immediate incident handling to restore stability.",
imageSrc: "http://img.b2bpic.net/free-photo/paramedics-with-coffee-cups-full-shot_23-2149478504.jpg",
},
{
tag: "Restoration",
title: "Recovery",
subtitle: "Quality Assurance",
description: "Professional reinstatement for business thrive.",
imageSrc: "http://img.b2bpic.net/free-photo/portrait-person-working-construction-industry_23-2151349712.jpg",
},
]}
/>
</ScrollReveal>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,43 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "team" section.
import React from 'react';
import TeamProfileCards from '@/components/sections/team/TeamProfileCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
import ScrollReveal from "@/components/ui/ScrollReveal";
import RadialGradientBackground from "@/components/ui/RadialGradientBackground";
export default function TeamSection(): React.JSX.Element {
return (
<div id="team" data-section="team" className="relative">
<RadialGradientBackground position="absolute" />
<SectionErrorBoundary name="team">
<ScrollReveal>
<TeamProfileCards
tag="Leadership"
title="Expert Management"
description="Professional teams ready to assist you nationwide."
items={[
{
title: "Donavan Prinsloo",
description: "CEO & Lead Loss Adjuster with decades of industry experience.",
avatarSrc: "http://img.b2bpic.net/free-photo/smiling-middle-aged-business-leader-window_1262-5674.jpg",
buttonText: "Contact",
buttonHref: "tel:0627871134",
imageSrc: "http://img.b2bpic.net/free-photo/middle-age-businessman-smiling-happy-standing-city_839833-25759.jpg",
},
{
title: "Jess Barnard",
description: "Head of Business Development specializing in national account growth.",
avatarSrc: "http://img.b2bpic.net/free-photo/happy-smiling-businesswoman-looking-camera-with-arms-crossed-portrait_1163-4337.jpg",
buttonText: "Contact",
buttonHref: "tel:0637178868",
imageSrc: "http://img.b2bpic.net/free-photo/smiling-successful-middle-aged-business-leader_1262-5690.jpg",
},
]}
/>
</ScrollReveal>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,62 @@
// 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 TestimonialMarqueeOverlayCards from '@/components/sections/testimonial/TestimonialMarqueeOverlayCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
import ScrollReveal from "@/components/ui/ScrollReveal";
import HorizonGlowBackground from "@/components/ui/HorizonGlowBackground";
export default function TestimonialsSection(): React.JSX.Element {
return (
<div id="testimonials" data-section="testimonials" className="relative">
<HorizonGlowBackground position="absolute" />
<SectionErrorBoundary name="testimonials">
<ScrollReveal>
<TestimonialMarqueeOverlayCards
tag="Social Proof"
title="Trusted by Leaders"
description="Join our network of satisfied partners and clients across South Africa."
testimonials={[
{
name: "Sarah M.",
role: "Facilities Director",
company: "Global Retail",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/young-attractive-black-businessman-buys-new-car-he-signs-contract-takes-keys-manager_146671-18405.jpg",
},
{
name: "James L.",
role: "Portfolio Manager",
company: "Body Corporate SA",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/professional-mature-man-standing-front-building_23-2147955272.jpg",
},
{
name: "Karen B.",
role: "Operations Manager",
company: "Heavy Industries",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/happy-businessman-greeting-african-american-steel-worker-while-visiting-industrial-facility_637285-4126.jpg",
},
{
name: "David T.",
role: "Principal",
company: "City Academy",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/man-teacher-wearing-glasses-checking-class-register-looking-aside-being-displeased-making-wry-mouth-sitting-school-desk-front-blackboard-classroom_141793-132918.jpg",
},
{
name: "Lindiwe K.",
role: "Insurance Broker",
company: "National Insurance",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/happy-insurance-agent-communicating-with-senior-clients-while-going-through-paperwork-meeting-office_637285-1182.jpg",
},
]}
/>
</ScrollReveal>
</SectionErrorBoundary>
</div>
);
}

11
src/types/scroll-reveal.d.ts vendored Normal file
View File

@@ -0,0 +1,11 @@
import { ReactNode } from "react";
declare module "@/components/ui/ScrollReveal" {
export interface ScrollRevealProps {
children: ReactNode;
variant?: "slide-up" | "fade-blur" | "fade";
delay?: number;
className?: string;
}
export default function ScrollReveal(props: ScrollRevealProps): JSX.Element;
}