// ----------------------------------------------------------------------------- // Immo-Ka — Agrégateur de propriétés à vendre (province de Québec) // pages/Inspecteurs.tsx : annuaire complet des inspecteurs en bâtiment de la // province (17 régions), filtrable par région et par texte — /api/inspecteurs. // ----------------------------------------------------------------------------- import { useEffect, useMemo, useState } from "react"; type Inspecteur = { id: string; name: string; city: string; region: string; address: string; phone: string; website: string; rating: number | null; reviews: number | null; category: string; }; type Doc = { generated: string | null; total: number; count: number; regions: { region: string; n: number }[]; movers: Inspecteur[]; }; const telHref = (p: string) => "tel:+1" + p.replace(/\D/g, "").slice(-10); const host = (u: string) => { try { return new URL(u).hostname.replace(/^www\./, ""); } catch { return u; } }; export default function InspecteursPage() { const [doc, setDoc] = useState(null); const [error, setError] = useState(null); const [q, setQ] = useState(""); const [region, setRegion] = useState(""); useEffect(() => { fetch("/api/inspecteurs") .then((r) => { if (!r.ok) throw new Error("HTTP " + r.status); return r.json(); }) .then(setDoc) .catch((e) => setError(String(e))); }, []); const filtered = useMemo(() => { if (!doc) return []; const needle = q.trim().toLowerCase(); return doc.movers.filter( (m) => (!region || m.region === region) && (!needle || (m.name + " " + m.city).toLowerCase().includes(needle)), ); }, [doc, q, region]); const groups = useMemo(() => { const order = (doc?.regions ?? []).map((r) => r.region); const by: Record = {}; for (const m of filtered) (by[m.region] ??= []).push(m); return order .filter((r) => by[r]?.length) .map((r) => ({ region: r, movers: by[r] })); }, [doc, filtered]); const filtering = q.trim() !== "" || region !== ""; return (
Annuaire — inspection de bâtiment

Inspecteurs en bâtiment du Québec

L'annuaire le plus complet des inspecteurs en bâtiment de la province :{" "} {doc ? doc.total : "…"} entreprises d'inspection (préachat, prévente, préréception) répertoriées dans les 17 régions administratives du Québec, avec téléphone, site web et note Google. Recensement continu par le Groupe KA {doc?.generated ? ` — mis à jour le ${doc.generated}` : ""}.

{error &&
⚠️ {error}
} {!doc && !error &&
Chargement…
} {doc && ( <>
setQ(e.target.value)} placeholder="Rechercher un inspecteur ou une ville…" aria-label="Rechercher un inspecteur ou une ville" style={{ flex: "1 1 240px", maxWidth: 380, padding: "10px 14px", border: "1.5px solid var(--line)", borderRadius: 10, font: "inherit", background: "var(--surface)", color: "inherit", }} /> {filtering && ( {filtered.length} résultat{filtered.length > 1 ? "s" : ""} )}
{filtered.length === 0 && (
Aucun inspecteur ne correspond à cette recherche.
)} {groups.map((g) => (

{g.region}{" "} ({g.movers.length})

{g.movers.map((m) => ( ))}
Entreprise Ville Téléphone Site web Note Google
{m.name} {m.category && (
{m.category}
)}
{m.city} {m.phone ? ( {m.phone} ) : ( "—" )} {m.website ? ( {host(m.website)} ) : ( "—" )} {m.rating ? `★ ${m.rating.toFixed(1)} (${m.reviews ?? 0})` : "—"}
))}

Annuaire informatif compilé à partir des fiches publiques Google. Avant de mandater un inspecteur en bâtiment, vérifiez son adhésion à une association reconnue (AIBQ, InterNACHI Québec…), sa formation, son assurance responsabilité professionnelle (erreurs et omissions) et exigez une convention de service ainsi qu'un rapport écrit conforme à une norme de pratique. Le Groupe KA n'a aucun lien d'affaires avec les entreprises listées.

)}
); }