// ----------------------------------------------------------------------------- // Immo-Ka — Agrégateur de propriétés à vendre (province de Québec) // Auteur : Simon-Pierre Boucher — contact@spboucher.ai // App.tsx : layout global (header + ticker en direct + footer encre) et routage // ----------------------------------------------------------------------------- import { useEffect, useState } from "react"; import { NavLink, Route, Routes, useLocation } from "react-router-dom"; import { fetchFacets, fetchSources, fetchStats, registerSourceNames, sourceName } from "./api"; import Home from "./pages/Home"; import ListingPage from "./pages/Listing"; import SourcesPage from "./pages/Sources"; import StatsPage from "./pages/Stats"; function Ticker() { const [items, setItems] = useState([]); useEffect(() => { Promise.all([fetchStats(), fetchFacets(), fetchSources()]) .then(([stats, facets, src]) => { registerSourceNames(src.sources); const parts: string[] = [`${stats.total.toLocaleString("fr-CA")} propriétés à vendre`]; if (stats.cities) parts.push(`${stats.cities} villes`); if (stats.avg_price != null) parts.push(`Prix moyen ${Math.round(stats.avg_price).toLocaleString("fr-CA")} $`); for (const s of facets.sources.slice(0, 12)) parts.push(`${sourceName(s.source)} · ${s.n}`); parts.push("Mise à jour automatique"); setItems(parts); }) .catch(() => setItems(["Immo-Ka — propriétés à vendre au Québec"])); }, []); if (items.length === 0) return null; return ( ); } const NAV_LINKS = [ { to: "/", label: "Propriétés", icon: "🏠", end: true }, { to: "/?view=carte", label: "Carte", icon: "◈", end: false, force: true }, { to: "/stats", label: "Stats", icon: "📊", end: false }, { to: "/agences", label: "Agences", icon: "🗂", end: false }, ]; function Header() { const [open, setOpen] = useState(false); const location = useLocation(); useEffect(() => { setOpen(false); }, [location]); useEffect(() => { document.body.style.overflow = open ? "hidden" : ""; return () => { document.body.style.overflow = ""; }; }, [open]); return ( <>
ImmoKa Toutes les agences du Québec — toujours à jour
{NAV_LINKS.map((l, i) => ( `mm-link ${isActive && !l.force ? "active" : ""}`} onClick={() => setOpen(false)} > {l.label} ))}
Agrégateur indépendant — mis à jour automatiquement, chaque fiche renvoie à l'annonce originale de l'agence.
{open &&
setOpen(false)} aria-hidden="true" />} ); } function Footer() { return (
ImmoKa
Agrégateur indépendant des propriétés à vendre dans la province de Québec. Les annonces proviennent des sites publics des agences de courtage (RE/MAX, Sutton, Via Capitale, Proprio Direct, Barnes, M Immobilier…) et sont rafraîchies automatiquement — chaque fiche renvoie vers l'annonce originale.
© {new Date().getFullYear()} Simon-Pierre Boucher — contact@spboucher.ai
); } export default function App() { return ( <>
} /> } /> } /> } />
🧭

Page introuvable

Le lien demandé n'existe pas.

} />