Merge version_2_1782313537096 into main #1
@@ -1,185 +1,30 @@
|
||||
import AboutFeaturesSplit from '@/components/sections/about/AboutFeaturesSplit';
|
||||
import ContactCta from '@/components/sections/contact/ContactCta';
|
||||
import FaqSimple from '@/components/sections/faq/FaqSimple';
|
||||
import FeaturesRevealCardsBento from '@/components/sections/features/FeaturesRevealCardsBento';
|
||||
import HeroBillboardBrand from '@/components/sections/hero/HeroBillboardBrand';
|
||||
import MetricsMediaCards from '@/components/sections/metrics/MetricsMediaCards';
|
||||
import { Award, CheckCircle, Shield } from "lucide-react";
|
||||
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 MetricsSection from './HomePage/sections/Metrics';
|
||||
import FaqSection from './HomePage/sections/Faq';
|
||||
import ContactSection from './HomePage/sections/Contact';
|
||||
|
||||
export default function HomePage(): React.JSX.Element {
|
||||
return (
|
||||
<>
|
||||
<div id="hero" data-section="hero">
|
||||
<SectionErrorBoundary name="hero">
|
||||
<HeroBillboardBrand
|
||||
brand="Terradiag Consultants Inc."
|
||||
description="Votre partenaire en environnement au Québec. Expertise rigoureuse en évaluations environnementales pour courtiers, promoteurs et institutions."
|
||||
primaryButton={{
|
||||
text: "Nous contacter",
|
||||
href: "#contact",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "Nos services",
|
||||
href: "#services",
|
||||
}}
|
||||
imageSrc="http://img.b2bpic.net/free-photo/man-with-blueprints-talking-phone_23-2147710783.jpg"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<>
|
||||
<HeroSection />
|
||||
|
||||
<div id="about" data-section="about">
|
||||
<SectionErrorBoundary name="about">
|
||||
<AboutFeaturesSplit
|
||||
tag="À propos"
|
||||
title="Une expertise environnementale pointue à Montréal"
|
||||
description="Fondée par Samy, M.Ing, notre firme accompagne ses clients avec rigueur dans toutes leurs démarches d'évaluation environnementale de site au Québec. Nous garantissons la conformité au MELCCFP."
|
||||
items={[
|
||||
{
|
||||
icon: CheckCircle,
|
||||
title: "Expertise certifiée",
|
||||
description: "Ingénieurs qualifiés avec une maîtrise approfondie des normes québécoises.",
|
||||
},
|
||||
{
|
||||
icon: Shield,
|
||||
title: "Conformité totale",
|
||||
description: "Respect rigoureux du MELCCFP et des exigences environnementales.",
|
||||
},
|
||||
{
|
||||
icon: Award,
|
||||
title: "Approche rigoureuse",
|
||||
description: "Analyses précises pour sécuriser vos transactions immobilières et financières.",
|
||||
},
|
||||
]}
|
||||
imageSrc="https://storage.googleapis.com/webild/users/user_3FaUOyRCLrhwfaU9mCJ9fZNyZKT/uploaded-1782313197890-22lqm3c8.png"
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<AboutSection />
|
||||
|
||||
<div id="services" data-section="services">
|
||||
<SectionErrorBoundary name="services">
|
||||
<FeaturesRevealCardsBento
|
||||
tag="Nos Services"
|
||||
title="Solutions environnementales complètes"
|
||||
description="De l'évaluation préliminaire à la réhabilitation complète, nous accompagnons vos projets avec professionnalisme."
|
||||
items={[
|
||||
{
|
||||
title: "Phase I",
|
||||
description: "Évaluation environnementale de site – étude historique.",
|
||||
href: "#contact",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/gardener-reading_23-2148013517.jpg",
|
||||
},
|
||||
{
|
||||
title: "Phase II",
|
||||
description: "Caractérisation environnementale – échantillonnage terrain.",
|
||||
href: "#contact",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/man-white-shirt-works-with-cement_1157-37380.jpg",
|
||||
},
|
||||
{
|
||||
title: "Phase III",
|
||||
description: "Évaluation détaillée des risques environnementaux.",
|
||||
href: "#contact",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/young-man-kicking-leaves-train-tracks_23-2148232358.jpg",
|
||||
},
|
||||
{
|
||||
title: "Réhabilitation",
|
||||
description: "Suivi et décontamination des sites.",
|
||||
href: "#contact",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/man-gloves-with-plastic-bottle-his-hands-cleans-forest_169016-23282.jpg",
|
||||
},
|
||||
{
|
||||
title: "Conseil Expert",
|
||||
description: "Expertise technique pour courtiers.",
|
||||
href: "#contact",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/kid-learning-how-plant-tree_23-2148943276.jpg",
|
||||
},
|
||||
{
|
||||
title: "Études terrains",
|
||||
description: "Analyse rigoureuse de vos sols.",
|
||||
href: "#contact",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/research-worker-laboratory-breeding-new-kinds-vegetation_273609-13435.jpg",
|
||||
},
|
||||
{
|
||||
title: "Conformité",
|
||||
description: "Soutien aux institutions financières.",
|
||||
href: "#contact",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/people-doing-community-service-by-collecting-trash-outdoors_23-2149109149.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<ServicesSection />
|
||||
|
||||
<div id="metrics" data-section="metrics">
|
||||
<SectionErrorBoundary name="metrics">
|
||||
<MetricsMediaCards
|
||||
tag="Impact et Rigueur"
|
||||
title="Chiffres clés"
|
||||
description="Nous garantissons des résultats fiables pour sécuriser vos investissements immobiliers."
|
||||
metrics={[
|
||||
{
|
||||
value: "100%",
|
||||
title: "Conformité",
|
||||
description: "Respect des normes du MELCCFP.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/high-angle-plant-microscope-arrangement_23-2148785056.jpg",
|
||||
},
|
||||
{
|
||||
value: "24h",
|
||||
title: "Réactivité",
|
||||
description: "Réponse rapide pour vos courtiers.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/flat-lay-plants-study-items-arrangement_23-2148785106.jpg",
|
||||
},
|
||||
{
|
||||
value: "1000+",
|
||||
title: "Sites analysés",
|
||||
description: "Une vaste expérience de terrain.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/close-up-isolated-screen-device-used-by-workers-adjusting-server-room-configurations_482257-117886.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<MetricsSection />
|
||||
|
||||
<div id="faq" data-section="faq">
|
||||
<SectionErrorBoundary name="faq">
|
||||
<FaqSimple
|
||||
tag="Questions fréquentes"
|
||||
title="Besoin d'éclaircissements ?"
|
||||
description="Voici les réponses aux questions les plus couramment posées concernant nos évaluations."
|
||||
items={[
|
||||
{
|
||||
question: "Quelle est la durée d'une Phase I ?",
|
||||
answer: "La Phase I est généralement rapide, dépendant de l'historique du site et des données disponibles.",
|
||||
},
|
||||
{
|
||||
question: "Serviez-vous les municipalités ?",
|
||||
answer: "Oui, nous accompagnons les organismes publics dans leurs évaluations environnementales.",
|
||||
},
|
||||
{
|
||||
question: "Comment prendre rendez-vous ?",
|
||||
answer: "Contactez-nous par téléphone au 514 929-0289 ou via notre formulaire.",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<FaqSection />
|
||||
|
||||
<div id="contact" data-section="contact">
|
||||
<SectionErrorBoundary name="contact">
|
||||
<ContactCta
|
||||
tag="Prêt à démarrer ?"
|
||||
text="Contactez Terradiag Consultants Inc. à Montréal. Notre équipe est disponible du lundi au vendredi, de 9h à 17h."
|
||||
primaryButton={{
|
||||
text: "514 929-0289",
|
||||
href: "tel:+15149290289",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "info@terradiag.ca",
|
||||
href: "mailto:info@terradiag.ca",
|
||||
}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
<ContactSection />
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
39
src/pages/HomePage/sections/About.tsx
Normal file
39
src/pages/HomePage/sections/About.tsx
Normal file
@@ -0,0 +1,39 @@
|
||||
// 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 AboutFeaturesSplit from '@/components/sections/about/AboutFeaturesSplit';
|
||||
import { Award, CheckCircle, Shield } from "lucide-react";
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function AboutSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="about" data-section="about">
|
||||
<SectionErrorBoundary name="about">
|
||||
<AboutFeaturesSplit
|
||||
tag="À propos"
|
||||
title="Une expertise environnementale pointue à Montréal"
|
||||
description="Fondée par Samy, M.Ing, notre firme accompagne ses clients avec rigueur dans toutes leurs démarches d'évaluation environnementale de site au Québec. Nous garantissons la conformité au MELCCFP."
|
||||
items={[
|
||||
{
|
||||
icon: CheckCircle,
|
||||
title: "Expertise certifiée",
|
||||
description: "Ingénieurs qualifiés avec une maîtrise approfondie des normes québécoises.",
|
||||
},
|
||||
{
|
||||
icon: Shield,
|
||||
title: "Conformité totale",
|
||||
description: "Respect rigoureux du MELCCFP et des exigences environnementales.",
|
||||
},
|
||||
{
|
||||
icon: Award,
|
||||
title: "Approche rigoureuse",
|
||||
description: "Analyses précises pour sécuriser vos transactions immobilières et financières.",
|
||||
},
|
||||
]}
|
||||
imageSrc="https://storage.googleapis.com/webild/users/user_3FaUOyRCLrhwfaU9mCJ9fZNyZKT/uploaded-1782313197890-22lqm3c8.png"
|
||||
/>
|
||||
</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="Prêt à démarrer ?"
|
||||
text="Contactez Terradiag Consultants Inc. à Montréal. Notre équipe est disponible du lundi au vendredi, de 9h à 17h."
|
||||
primaryButton={{
|
||||
text: "514 929-0289",
|
||||
href: "tel:+15149290289",
|
||||
}}
|
||||
secondaryButton={{
|
||||
text: "info@terradiag.ca",
|
||||
href: "mailto:info@terradiag.ca",
|
||||
}}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
34
src/pages/HomePage/sections/Faq.tsx
Normal file
34
src/pages/HomePage/sections/Faq.tsx
Normal file
@@ -0,0 +1,34 @@
|
||||
// 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";
|
||||
|
||||
export default function FaqSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="faq" data-section="faq">
|
||||
<SectionErrorBoundary name="faq">
|
||||
<FaqSimple
|
||||
tag="Questions fréquentes"
|
||||
title="Besoin d'éclaircissements ?"
|
||||
description="Voici les réponses aux questions les plus couramment posées concernant nos évaluations."
|
||||
items={[
|
||||
{
|
||||
question: "Quelle est la durée d'une Phase I ?",
|
||||
answer: "La Phase I est généralement rapide, dépendant de l'historique du site et des données disponibles.",
|
||||
},
|
||||
{
|
||||
question: "Serviez-vous les municipalités ?",
|
||||
answer: "Oui, nous accompagnons les organismes publics dans leurs évaluations environnementales.",
|
||||
},
|
||||
{
|
||||
question: "Comment prendre rendez-vous ?",
|
||||
answer: "Contactez-nous par téléphone au 514 929-0289 ou via notre formulaire.",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
63
src/pages/HomePage/sections/Hero.tsx
Normal file
63
src/pages/HomePage/sections/Hero.tsx
Normal file
@@ -0,0 +1,63 @@
|
||||
/* eslint-disable */
|
||||
// @ts-nocheck — generated by catalog-eject; runtime-correct but TS strict-mode false-positives on inlined catalog body
|
||||
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 AutoFillText from "@/components/ui/AutoFillText";
|
||||
import ScrollReveal from "@/components/ui/ScrollReveal";
|
||||
|
||||
const primaryButton = {
|
||||
text: "Nous contacter",
|
||||
href: "#contact"
|
||||
};
|
||||
const secondaryButton = {
|
||||
text: "Nos services",
|
||||
href: "#services"
|
||||
};
|
||||
|
||||
type HeroBillboardBrandProps = {
|
||||
brand: string;
|
||||
description: string;
|
||||
primaryButton: { text: string; href: string };
|
||||
secondaryButton: { text: string; href: string };
|
||||
} & ({ imageSrc: string; videoSrc?: never } | { videoSrc: string; imageSrc?: never });
|
||||
|
||||
const HeroInline = () => {
|
||||
return (
|
||||
<section aria-label="Hero section" className="relative pt-25 pb-20 md:pt-30">
|
||||
<HeroBackgroundSlot />
|
||||
<div className="flex flex-col gap-10 md:gap-12 w-content-width mx-auto">
|
||||
<div className="flex flex-col items-center text-center gap-5">
|
||||
<ImageOrVideo imageSrc="https://images.unsplash.com/photo-1599305445671-ac291c95aaa9?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.0.3" className="h-32 md:h-48 w-auto object-contain" />
|
||||
<AutoFillText className="w-full font-semibold" paddingY="">{"Terradiag Consultants Inc."}</AutoFillText>
|
||||
|
||||
<TextAnimation
|
||||
text={"Votre partenaire en environnement au Québec. Expertise rigoureuse en évaluations environnementales pour courtiers, promoteurs et institutions."}
|
||||
variant="fade"
|
||||
gradientText={false}
|
||||
tag="p"
|
||||
className="w-full md:w-3/4 text-lg md:text-2xl leading-snug text-balance text-center"
|
||||
/>
|
||||
|
||||
<div className="flex flex-wrap justify-center gap-3 mt-1 md:mt-2">
|
||||
<Button text={primaryButton.text} href={primaryButton.href} variant="primary"/>
|
||||
<Button text={secondaryButton.text} href={secondaryButton.href} variant="secondary"animationDelay={0.1} />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<ScrollReveal variant="fade-blur" delay={0.2} className="w-full p-2 xl:p-3 2xl:p-4 card rounded overflow-hidden">
|
||||
<ImageOrVideo imageSrc={"http://img.b2bpic.net/free-photo/man-with-blueprints-talking-phone_23-2147710783.jpg"} className="aspect-4/5 md:aspect-video" />
|
||||
</ScrollReveal>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
};
|
||||
|
||||
export default function HeroSection() {
|
||||
return (
|
||||
<div data-webild-section="hero" id="hero">
|
||||
<HeroInline />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
40
src/pages/HomePage/sections/Metrics.tsx
Normal file
40
src/pages/HomePage/sections/Metrics.tsx
Normal file
@@ -0,0 +1,40 @@
|
||||
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
|
||||
// file as the canonical source for the "metrics" section.
|
||||
|
||||
import React from 'react';
|
||||
import MetricsMediaCards from '@/components/sections/metrics/MetricsMediaCards';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function MetricsSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="metrics" data-section="metrics">
|
||||
<SectionErrorBoundary name="metrics">
|
||||
<MetricsMediaCards
|
||||
tag="Impact et Rigueur"
|
||||
title="Chiffres clés"
|
||||
description="Nous garantissons des résultats fiables pour sécuriser vos investissements immobiliers."
|
||||
metrics={[
|
||||
{
|
||||
value: "100%",
|
||||
title: "Conformité",
|
||||
description: "Respect des normes du MELCCFP.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/high-angle-plant-microscope-arrangement_23-2148785056.jpg",
|
||||
},
|
||||
{
|
||||
value: "24h",
|
||||
title: "Réactivité",
|
||||
description: "Réponse rapide pour vos courtiers.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/flat-lay-plants-study-items-arrangement_23-2148785106.jpg",
|
||||
},
|
||||
{
|
||||
value: "1000+",
|
||||
title: "Sites analysés",
|
||||
description: "Une vaste expérience de terrain.",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/close-up-isolated-screen-device-used-by-workers-adjusting-server-room-configurations_482257-117886.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
64
src/pages/HomePage/sections/Services.tsx
Normal file
64
src/pages/HomePage/sections/Services.tsx
Normal file
@@ -0,0 +1,64 @@
|
||||
// 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 FeaturesRevealCardsBento from '@/components/sections/features/FeaturesRevealCardsBento';
|
||||
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
|
||||
|
||||
export default function ServicesSection(): React.JSX.Element {
|
||||
return (
|
||||
<div id="services" data-section="services">
|
||||
<SectionErrorBoundary name="services">
|
||||
<FeaturesRevealCardsBento
|
||||
tag="Nos Services"
|
||||
title="Solutions environnementales complètes"
|
||||
description="De l'évaluation préliminaire à la réhabilitation complète, nous accompagnons vos projets avec professionnalisme."
|
||||
items={[
|
||||
{
|
||||
title: "Phase I",
|
||||
description: "Évaluation environnementale de site – étude historique.",
|
||||
href: "#contact",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/gardener-reading_23-2148013517.jpg",
|
||||
},
|
||||
{
|
||||
title: "Phase II",
|
||||
description: "Caractérisation environnementale – échantillonnage terrain.",
|
||||
href: "#contact",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/man-white-shirt-works-with-cement_1157-37380.jpg",
|
||||
},
|
||||
{
|
||||
title: "Phase III",
|
||||
description: "Évaluation détaillée des risques environnementaux.",
|
||||
href: "#contact",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/young-man-kicking-leaves-train-tracks_23-2148232358.jpg",
|
||||
},
|
||||
{
|
||||
title: "Réhabilitation",
|
||||
description: "Suivi et décontamination des sites.",
|
||||
href: "#contact",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/man-gloves-with-plastic-bottle-his-hands-cleans-forest_169016-23282.jpg",
|
||||
},
|
||||
{
|
||||
title: "Conseil Expert",
|
||||
description: "Expertise technique pour courtiers.",
|
||||
href: "#contact",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/kid-learning-how-plant-tree_23-2148943276.jpg",
|
||||
},
|
||||
{
|
||||
title: "Études terrains",
|
||||
description: "Analyse rigoureuse de vos sols.",
|
||||
href: "#contact",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/research-worker-laboratory-breeding-new-kinds-vegetation_273609-13435.jpg",
|
||||
},
|
||||
{
|
||||
title: "Conformité",
|
||||
description: "Soutien aux institutions financières.",
|
||||
href: "#contact",
|
||||
imageSrc: "http://img.b2bpic.net/free-photo/people-doing-community-service-by-collecting-trash-outdoors_23-2149109149.jpg",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</SectionErrorBoundary>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user