Compare commits
2 Commits
version_1_
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 59d5895505 | |||
|
|
5e4c431621 |
@@ -1,229 +1,32 @@
|
||||
import ContactCta from '@/components/sections/contact/ContactCta';
|
||||
import FaqTwoColumn from '@/components/sections/faq/FaqTwoColumn';
|
||||
import FeaturesImageBento from '@/components/sections/features/FeaturesImageBento';
|
||||
import FeaturesMediaCarousel from '@/components/sections/features/FeaturesMediaCarousel';
|
||||
import HeroBillboardCarousel from '@/components/sections/hero/HeroBillboardCarousel';
|
||||
import MetricsFeatureCards from '@/components/sections/metrics/MetricsFeatureCards';
|
||||
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 ServicesSection from './HomePage/sections/Services';
|
||||
import CoverageSection from './HomePage/sections/Coverage';
|
||||
import StatsSection from './HomePage/sections/Stats';
|
||||
import ComplianceSection from './HomePage/sections/Compliance';
|
||||
import ContactSection from './HomePage/sections/Contact';
|
||||
|
||||
|
||||
import ClientsSection from './HomePage/sections/Clients';export default function HomePage(): React.JSX.Element {
|
||||
return (
|
||||
<>
|
||||
<div id="hero" data-section="hero">
|
||||
<SectionErrorBoundary name="hero">
|
||||
<HeroBillboardCarousel
|
||||
tag="PSA Licence 14579"
|
||||
title="Static Security. Engineered Precision."
|
||||
description="Vision1Security provides advanced, technology-driven static guarding solutions for Dublin and Leinster. Your assets, secured by design."
|
||||
primaryButton={{
|
||||
text: "Request a Quote",
|
||||
href: "#contact",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Learn More",
|
||||
href: "#services",
|
||||
}}
|
||||
items={[
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/artistic-background-wallpaper-with-color-halftone-effect_58702-8909.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/3d-low-poly-plexus-connections-networking-background_1048-12580.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/blue-background-with-bright-lines_1160-203.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/abstract-green-background-from-brilliant-mosaic-pattern-generative-ai_169016-30204.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/flat-lay-circuit-board-close-up_23-2149174361.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/3d-digital-landscape-with-space-sky-nebula_1048-10755.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<>
|
||||
<HeroSection />
|
||||
|
||||
<div id="services" data-section="services">
|
||||
<SectionErrorBoundary name="services">
|
||||
<FeaturesMediaCarousel
|
||||
tag="Our Expertise"
|
||||
title="Engineered Protection"
|
||||
description="Comprehensive security solutions tailored to modern threats."
|
||||
items={[
|
||||
{
|
||||
title: "Static Guarding",
|
||||
description: "Highly trained personnel for stationary asset protection.",
|
||||
buttonIcon: "Shield",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/stylish-casual-african-american-man-black-beret-overcoat-fitting-room-clothes-store-making-photo-mirror-his-phone-camera_627829-1635.jpg",
|
||||
},
|
||||
{
|
||||
title: "Corporate Security",
|
||||
description: "High-level protection for sensitive business environments.",
|
||||
buttonIcon: "Building",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/team-programmers-high-tech-data-center-troubleshooting-issues_482257-124845.jpg",
|
||||
},
|
||||
{
|
||||
title: "Retail Loss Prevention",
|
||||
description: "Deterrence-focused guarding for high-footfall retail spaces.",
|
||||
buttonIcon: "ShoppingBag",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/security-guards-workspace_23-2150321656.jpg",
|
||||
},
|
||||
{
|
||||
title: "Event Security",
|
||||
description: "Professional presence for high-profile gatherings.",
|
||||
buttonIcon: "Calendar",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/business-male-talking-phone_23-2148479562.jpg",
|
||||
},
|
||||
{
|
||||
title: "Construction Site Security",
|
||||
description: "Proactive protection against theft and unauthorized access.",
|
||||
buttonIcon: "HardHat",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-man-wearing-headphones_23-2148902563.jpg",
|
||||
},
|
||||
{
|
||||
title: "Mobile Patrols",
|
||||
description: "Dynamic response and key holding services.",
|
||||
buttonIcon: "Car",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-woman-holding-keys_23-2148819890.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<ServicesSection />
|
||||
|
||||
<div id="coverage" data-section="coverage">
|
||||
<SectionErrorBoundary name="coverage">
|
||||
<FeaturesImageBento
|
||||
tag="Geographic Reach"
|
||||
title="Dublin & Leinster Radar"
|
||||
description="Rapid response capabilities spanning the Greater Dublin Area and Leinster."
|
||||
items={[
|
||||
{
|
||||
title: "Dublin Central",
|
||||
description: "High-density urban security coverage.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/military-command-center-with-futuristic-interface_23-2152000839.jpg",
|
||||
},
|
||||
{
|
||||
title: "County Kildare",
|
||||
description: "Logistical and industrial security hubs.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/panoramic-view-dubai-city-illuminated-neon-spectrum_23-2151305279.jpg",
|
||||
},
|
||||
{
|
||||
title: "County Wicklow",
|
||||
description: "Specialized asset protection.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/army-telecommunication-systems-operator-using-satellite-software-tablet_482257-107447.jpg",
|
||||
},
|
||||
{
|
||||
title: "County Louth",
|
||||
description: "Strategic northern patrol sectors.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/digital-tablet-online-learning_53876-97299.jpg",
|
||||
},
|
||||
{
|
||||
title: "County Meath",
|
||||
description: "Commercial site monitoring.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/digital-art-old-map-with-terrain-locations_23-2151445172.jpg",
|
||||
},
|
||||
{
|
||||
title: "County Carlow",
|
||||
description: "Southern operational reach.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/abstract-geometric-wavy-folds-background_1048-16078.jpg",
|
||||
},
|
||||
{
|
||||
title: "County Wexford",
|
||||
description: "Expanded key holding reach.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/map-comoros-polygonal-mesh-line-map-flag-map_559531-11149.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<CoverageSection />
|
||||
|
||||
<div id="stats" data-section="stats">
|
||||
<SectionErrorBoundary name="stats">
|
||||
<MetricsFeatureCards
|
||||
tag="Performance Metrics"
|
||||
title="Engineered Trust"
|
||||
description="Data-driven performance metrics for mission-critical security."
|
||||
metrics={[
|
||||
{
|
||||
value: "250+",
|
||||
title: "Guards Deployed",
|
||||
features: [
|
||||
"Vetted",
|
||||
"Trained",
|
||||
"Equipped",
|
||||
],
|
||||
},
|
||||
{
|
||||
value: "120+",
|
||||
title: "Sites Secured",
|
||||
features: [
|
||||
"Construction",
|
||||
"Corporate",
|
||||
"Retail",
|
||||
],
|
||||
},
|
||||
{
|
||||
value: "15m",
|
||||
title: "Response Time",
|
||||
features: [
|
||||
"Mobile Patrol",
|
||||
"Key Holding",
|
||||
],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<StatsSection />
|
||||
|
||||
<div id="compliance" data-section="compliance">
|
||||
<SectionErrorBoundary name="compliance">
|
||||
<FaqTwoColumn
|
||||
tag="Compliance"
|
||||
title="Licensed & Assured"
|
||||
description="Vision1Security holds full PSA licensure and comprehensive liability coverage."
|
||||
items={[
|
||||
{
|
||||
question: "Are you PSA Licensed?",
|
||||
answer: "Yes, we are fully PSA licensed under Licence 14579.",
|
||||
},
|
||||
{
|
||||
question: "What areas do you cover?",
|
||||
answer: "Our operations cover the entirety of Dublin and the wider Leinster region.",
|
||||
},
|
||||
{
|
||||
question: "How are guards vetted?",
|
||||
answer: "Rigorous background checks and ongoing training protocols are mandatory.",
|
||||
},
|
||||
{
|
||||
question: "Is insurance included?",
|
||||
answer: "We maintain full employer and public liability insurance coverage.",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<ComplianceSection />
|
||||
<ClientsSection />
|
||||
|
||||
<div id="contact" data-section="contact">
|
||||
<SectionErrorBoundary name="contact">
|
||||
<ContactCta
|
||||
tag="Connect Now"
|
||||
text="Secure your assets today. Contact our Dublin operations center."
|
||||
primaryButton={{
|
||||
text: "Call Operations: 01 234 5678",
|
||||
href: "tel:012345678",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Email for Quote",
|
||||
href: "mailto:info@vision1security.ie",
|
||||
}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<ContactSection />
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
57
src/pages/HomePage/sections/Clients.tsx
Normal file
57
src/pages/HomePage/sections/Clients.tsx
Normal file
@@ -0,0 +1,57 @@
|
||||
import ScrollReveal from '@/components/ui/ScrollReveal';
|
||||
import TextAnimation from '@/components/ui/TextAnimation';
|
||||
import LoopCarousel from '@/components/ui/LoopCarousel';
|
||||
import Tag from '@/components/ui/Tag';
|
||||
|
||||
export default function ClientsSection() {
|
||||
const clients = [
|
||||
"TechCorp Dublin",
|
||||
"Leinster Retail Group",
|
||||
"Dublin City Events",
|
||||
"Irish Construction Co.",
|
||||
"Global Logistics IE",
|
||||
"Trinity Corporate Park",
|
||||
"Silicon Docks Tech",
|
||||
"Grafton Street Retailers"
|
||||
];
|
||||
|
||||
return (
|
||||
<section data-webild-section="clients" id="clients" className="relative w-full py-24 bg-background overflow-hidden">
|
||||
<div className="w-content-width mx-auto mb-12 text-center flex flex-col items-center">
|
||||
<ScrollReveal variant="fade">
|
||||
<Tag text="Trusted Partners" className="mb-4" />
|
||||
</ScrollReveal>
|
||||
<TextAnimation
|
||||
text="Securing Dublin's Leading Businesses"
|
||||
variant="fade-blur"
|
||||
tag="h2"
|
||||
className="text-3xl md:text-4xl font-bold text-foreground mb-4"
|
||||
gradientText={false}
|
||||
/>
|
||||
<ScrollReveal variant="fade" delay={0.2}>
|
||||
<p className="text-lg text-accent max-w-2xl mx-auto">
|
||||
Trusted by leading enterprises, retail chains, and event organizers across Dublin and Leinster to maintain secure, compliant, and uninterrupted operations.
|
||||
</p>
|
||||
</ScrollReveal>
|
||||
</div>
|
||||
|
||||
<div className="w-full relative">
|
||||
<div className="absolute left-0 top-0 bottom-0 w-32 bg-gradient-to-r from-background to-transparent z-10 pointer-events-none" />
|
||||
<div className="absolute right-0 top-0 bottom-0 w-32 bg-gradient-to-l from-background to-transparent z-10 pointer-events-none" />
|
||||
|
||||
<LoopCarousel>
|
||||
<div className="flex items-center gap-16 py-8 px-8">
|
||||
{clients.map((client, index) => (
|
||||
<div
|
||||
key={index}
|
||||
className="flex items-center justify-center whitespace-nowrap text-xl md:text-2xl font-bold text-foreground/50 uppercase tracking-widest font-mono"
|
||||
>
|
||||
{client}
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</LoopCarousel>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
38
src/pages/HomePage/sections/Compliance.tsx
Normal file
38
src/pages/HomePage/sections/Compliance.tsx
Normal file
@@ -0,0 +1,38 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "compliance" section.
|
||||
|
||||
import React from 'react';
|
||||
import FaqTwoColumn from '@/components/sections/faq/FaqTwoColumn';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function ComplianceSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="compliance" data-section="compliance">
|
||||
<SectionErrorBoundary name="compliance">
|
||||
<FaqTwoColumn
|
||||
tag="Compliance"
|
||||
title="Licensed & Assured"
|
||||
description="Vision1Security holds full PSA licensure and comprehensive liability coverage."
|
||||
items={[
|
||||
{
|
||||
question: "Are you PSA Licensed?",
|
||||
answer: "Yes, we are fully PSA licensed under Licence 14579.",
|
||||
},
|
||||
{
|
||||
question: "What areas do you cover?",
|
||||
answer: "Our operations cover the entirety of Dublin and the wider Leinster region.",
|
||||
},
|
||||
{
|
||||
question: "How are guards vetted?",
|
||||
answer: "Rigorous background checks and ongoing training protocols are mandatory.",
|
||||
},
|
||||
{
|
||||
question: "Is insurance included?",
|
||||
answer: "We maintain full employer and public liability insurance coverage.",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
27
src/pages/HomePage/sections/Contact.tsx
Normal file
27
src/pages/HomePage/sections/Contact.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 "contact" section.
|
||||
|
||||
import React from 'react';
|
||||
import ContactCta from '@/components/sections/contact/ContactCta';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function ContactSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="contact" data-section="contact">
|
||||
<SectionErrorBoundary name="contact">
|
||||
<ContactCta
|
||||
tag="Connect Now"
|
||||
text="Secure your assets today. Contact our Dublin operations center."
|
||||
primaryButton={{
|
||||
text: "Call Operations: 01 234 5678",
|
||||
href: "tel:012345678",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Email for Quote",
|
||||
href: "mailto:info@vision1security.ie",
|
||||
}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
57
src/pages/HomePage/sections/Coverage.tsx
Normal file
57
src/pages/HomePage/sections/Coverage.tsx
Normal file
@@ -0,0 +1,57 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "coverage" section.
|
||||
|
||||
import React from 'react';
|
||||
import FeaturesImageBento from '@/components/sections/features/FeaturesImageBento';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function CoverageSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="coverage" data-section="coverage">
|
||||
<SectionErrorBoundary name="coverage">
|
||||
<FeaturesImageBento
|
||||
tag="Geographic Reach"
|
||||
title="Dublin & Leinster Radar"
|
||||
description="Rapid response capabilities spanning the Greater Dublin Area and Leinster."
|
||||
items={[
|
||||
{
|
||||
title: "Dublin Central",
|
||||
description: "High-density urban security coverage.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/military-command-center-with-futuristic-interface_23-2152000839.jpg",
|
||||
},
|
||||
{
|
||||
title: "County Kildare",
|
||||
description: "Logistical and industrial security hubs.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/panoramic-view-dubai-city-illuminated-neon-spectrum_23-2151305279.jpg",
|
||||
},
|
||||
{
|
||||
title: "County Wicklow",
|
||||
description: "Specialized asset protection.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/army-telecommunication-systems-operator-using-satellite-software-tablet_482257-107447.jpg",
|
||||
},
|
||||
{
|
||||
title: "County Louth",
|
||||
description: "Strategic northern patrol sectors.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/digital-tablet-online-learning_53876-97299.jpg",
|
||||
},
|
||||
{
|
||||
title: "County Meath",
|
||||
description: "Commercial site monitoring.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/digital-art-old-map-with-terrain-locations_23-2151445172.jpg",
|
||||
},
|
||||
{
|
||||
title: "County Carlow",
|
||||
description: "Southern operational reach.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/abstract-geometric-wavy-folds-background_1048-16078.jpg",
|
||||
},
|
||||
{
|
||||
title: "County Wexford",
|
||||
description: "Expanded key holding reach.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/map-comoros-polygonal-mesh-line-map-flag-map_559531-11149.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
48
src/pages/HomePage/sections/Hero.tsx
Normal file
48
src/pages/HomePage/sections/Hero.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 "hero" section.
|
||||
|
||||
import React from 'react';
|
||||
import HeroBillboardCarousel from '@/components/sections/hero/HeroBillboardCarousel';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function HeroSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="hero" data-section="hero">
|
||||
<SectionErrorBoundary name="hero">
|
||||
<HeroBillboardCarousel
|
||||
tag="PSA Licence 14579"
|
||||
title="Static Security. Engineered Precision."
|
||||
description="Vision1Security provides advanced, technology-driven static guarding solutions for Dublin and Leinster. Your assets, secured by design."
|
||||
primaryButton={{
|
||||
text: "Request a Quote",
|
||||
href: "#contact",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Learn More",
|
||||
href: "#services",
|
||||
}}
|
||||
items={[
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/artistic-background-wallpaper-with-color-halftone-effect_58702-8909.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/3d-low-poly-plexus-connections-networking-background_1048-12580.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/blue-background-with-bright-lines_1160-203.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/abstract-green-background-from-brilliant-mosaic-pattern-generative-ai_169016-30204.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/flat-lay-circuit-board-close-up_23-2149174361.jpg",
|
||||
},
|
||||
{
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/3d-digital-landscape-with-space-sky-nebula_1048-10755.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
58
src/pages/HomePage/sections/Services.tsx
Normal file
58
src/pages/HomePage/sections/Services.tsx
Normal file
@@ -0,0 +1,58 @@
|
||||
// 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 FeaturesMediaCarousel from '@/components/sections/features/FeaturesMediaCarousel';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function ServicesSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="services" data-section="services">
|
||||
<SectionErrorBoundary name="services">
|
||||
<FeaturesMediaCarousel
|
||||
tag="Our Expertise"
|
||||
title="Engineered Protection"
|
||||
description="Comprehensive security solutions tailored to modern threats."
|
||||
items={[
|
||||
{
|
||||
title: "Static Guarding",
|
||||
description: "Highly trained personnel for stationary asset protection.",
|
||||
buttonIcon: "Shield",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/stylish-casual-african-american-man-black-beret-overcoat-fitting-room-clothes-store-making-photo-mirror-his-phone-camera_627829-1635.jpg",
|
||||
},
|
||||
{
|
||||
title: "Corporate Security",
|
||||
description: "High-level protection for sensitive business environments.",
|
||||
buttonIcon: "Building",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/team-programmers-high-tech-data-center-troubleshooting-issues_482257-124845.jpg",
|
||||
},
|
||||
{
|
||||
title: "Retail Loss Prevention",
|
||||
description: "Deterrence-focused guarding for high-footfall retail spaces.",
|
||||
buttonIcon: "ShoppingBag",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/security-guards-workspace_23-2150321656.jpg",
|
||||
},
|
||||
{
|
||||
title: "Event Security",
|
||||
description: "Professional presence for high-profile gatherings.",
|
||||
buttonIcon: "Calendar",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/business-male-talking-phone_23-2148479562.jpg",
|
||||
},
|
||||
{
|
||||
title: "Construction Site Security",
|
||||
description: "Proactive protection against theft and unauthorized access.",
|
||||
buttonIcon: "HardHat",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-man-wearing-headphones_23-2148902563.jpg",
|
||||
},
|
||||
{
|
||||
title: "Mobile Patrols",
|
||||
description: "Dynamic response and key holding services.",
|
||||
buttonIcon: "Car",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/medium-shot-woman-holding-keys_23-2148819890.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
48
src/pages/HomePage/sections/Stats.tsx
Normal file
48
src/pages/HomePage/sections/Stats.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 "stats" section.
|
||||
|
||||
import React from 'react';
|
||||
import MetricsFeatureCards from '@/components/sections/metrics/MetricsFeatureCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function StatsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="stats" data-section="stats">
|
||||
<SectionErrorBoundary name="stats">
|
||||
<MetricsFeatureCards
|
||||
tag="Performance Metrics"
|
||||
title="Engineered Trust"
|
||||
description="Data-driven performance metrics for mission-critical security."
|
||||
metrics={[
|
||||
{
|
||||
value: "250+",
|
||||
title: "Guards Deployed",
|
||||
features: [
|
||||
"Vetted",
|
||||
"Trained",
|
||||
"Equipped",
|
||||
],
|
||||
},
|
||||
{
|
||||
value: "120+",
|
||||
title: "Sites Secured",
|
||||
features: [
|
||||
"Construction",
|
||||
"Corporate",
|
||||
"Retail",
|
||||
],
|
||||
},
|
||||
{
|
||||
value: "15m",
|
||||
title: "Response Time",
|
||||
features: [
|
||||
"Mobile Patrol",
|
||||
"Key Holding",
|
||||
],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user