Merge version_2_1782313537096 into main #1

Merged
bender merged 1 commits from version_2_1782313537096 into main 2026-06-24 15:07:56 +00:00
7 changed files with 287 additions and 175 deletions

View File

@@ -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 />
</>
);
}

View 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>
);
}

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 "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>
);
}

View 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>
);
}

View 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>
);
}

View 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>
);
}

View 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>
);
}