Compare commits
4 Commits
version_1_
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 9a4e7b3367 | |||
|
|
5b15e82ae6 | ||
|
|
123b2f11ab | ||
|
|
2545c2aab3 |
@@ -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 />
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
27
src/pages/HomePage/sections/About.tsx
Normal file
27
src/pages/HomePage/sections/About.tsx
Normal 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>
|
||||
);
|
||||
}
|
||||
32
src/pages/HomePage/sections/Contact.tsx
Normal file
32
src/pages/HomePage/sections/Contact.tsx
Normal 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>
|
||||
);
|
||||
}
|
||||
43
src/pages/HomePage/sections/Faq.tsx
Normal file
43
src/pages/HomePage/sections/Faq.tsx
Normal 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>
|
||||
);
|
||||
}
|
||||
50
src/pages/HomePage/sections/Hero.tsx
Normal file
50
src/pages/HomePage/sections/Hero.tsx
Normal 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>
|
||||
);
|
||||
}
|
||||
69
src/pages/HomePage/sections/Industries.tsx
Normal file
69
src/pages/HomePage/sections/Industries.tsx
Normal 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>
|
||||
);
|
||||
}
|
||||
48
src/pages/HomePage/sections/Services.tsx
Normal file
48
src/pages/HomePage/sections/Services.tsx
Normal 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>
|
||||
);
|
||||
}
|
||||
43
src/pages/HomePage/sections/Team.tsx
Normal file
43
src/pages/HomePage/sections/Team.tsx
Normal 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>
|
||||
);
|
||||
}
|
||||
62
src/pages/HomePage/sections/Testimonials.tsx
Normal file
62
src/pages/HomePage/sections/Testimonials.tsx
Normal 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
11
src/types/scroll-reveal.d.ts
vendored
Normal 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;
|
||||
}
|
||||
Reference in New Issue
Block a user