L'acheteur potentiel
Arrive depuis une annonce sociale, souvent sur mobile, veut comprendre à qui il parle et demander une consultation en moins d'une minute, en anglais ou en français.
Étude de cas · Produit web · Ottawa, Canada
Conception et développement d'un site de conversion FR / EN relié à une base de données, à des notifications automatisées, à un espace d'administration protégé, à une analytique comportementale propriétaire et à un calendrier éditorial collaboratif.
Contexte
Un conseiller aux ventes automobile d'Ottawa disposait uniquement de pages sociales. Le trafic généré par la publicité n'aboutissait sur aucune destination capable de recueillir une demande, de la conserver, d'avertir le conseiller et de mesurer ce qui se passait réellement entre le clic et le contact.
Public visé
Arrive depuis une annonce sociale, souvent sur mobile, veut comprendre à qui il parle et demander une consultation en moins d'une minute, en anglais ou en français.
Doit recevoir la demande immédiatement par courriel, avec les coordonnées et le véhicule d'intérêt, sans avoir à consulter un outil supplémentaire.
Consulte, filtre et exporte les demandes, suit l'entonnoir de conversion et pilote le calendrier de publication.
Solution
Le visiteur clique sur une publicité sociale et atterrit sur la page.
Présentation du conseiller, processus en trois étapes, modèles et inventaire.
Formulaire court, validé, avec véhicule d'intérêt pré-rempli depuis une fiche.
Enregistrement en base, puis notification e-mail au conseiller.
Page de remerciement dédiée qui sert de point de conversion unique.
Aperçus




Captures prises dans l'application. Les vues contenant des données de contact ne sont pas reproduites ici.
Acquisition
Le mandat ne s'est pas arrêté au site : la présence sociale professionnelle, le compte publicitaire et la chaîne de mesure ont été créés et reliés à la landing page, de sorte que chaque dollar investi en publicité aboutisse à une demande traçable.
Mise en place des pages professionnelles Facebook et Instagram de la marque, avec identité visuelle, présentation du conseiller et lien direct vers la landing page comme unique destination de conversion.
Configuration du compte professionnel publicitaire et intégration du pixel Meta sur l'ensemble du site, afin que chaque campagne dispose d'une destination mesurée plutôt que d'un simple lien de profil.
La conversion est déclenchée par l'arrivée sur la page de remerciement, définie côté outil publicitaire. Le doublon initial, causé par un second événement déclenché dans le code, a été identifié et supprimé.
Gestionnaire de balises, analytique web, console de recherche et pixel publicitaire installés et vérifiés, complétés par un traceur comportemental propriétaire écrit directement en base de données.
Publications bilingues préparées, visuels attachés et validés dans le calendrier éditorial interne avant diffusion sur les comptes sociaux.
Annonce sociale → landing page → formulaire → enregistrement en base → notification au conseiller → page de confirmation comptée comme conversion. Chaque étape est observable dans le tableau de bord.

Capture d'un environnement de démonstration : les chiffres affichés proviennent de sessions de test et ne représentent pas les performances commerciales du client, qui restent confidentielles.
Périmètre vérifié
Page unique structurée en sections (hero, confiance, processus 1-2-3, modèles, inventaire, à propos, formulaire, FAQ) avec bascule FR / EN, préférence mémorisée et barre d'action fixe sur mobile.
Validation Zod côté serveur (nom, téléphone, courriel, intérêt, message, langue, source). La demande est d'abord enregistrée en base, puis la notification est envoyée : aucune demande n'est perdue si le service e-mail échoue.
Envoi via l'API Resend avec gabarit HTML échappé, adresse de réponse pointant vers le client, et journalisation du statut (email_sent, email_error) directement sur l'enregistrement du lead.
Jeu de données de véhicules typé en TypeScript, grille d'images, fenêtre de détail au clic et redirection vers le formulaire avec le modèle pré-sélectionné.
Routes sous un garde d'authentification, contrôle de rôle serveur (fonction has_role, rôles stockés dans une table dédiée user_roles), consultation, filtrage et export CSV des demandes.
Sessions anonymes, sections réellement vues, profondeur de défilement, clics CTA, rage clicks, intention de sortie, abandon de formulaire champ par champ. Événements mis en file d'attente et envoyés par lots (sendBeacon à la fermeture).
Vue protégée qui reconstitue le parcours Visites → Formulaire vu → Formulaire commencé → Envoi tenté → Demande envoyée, avec filtres 24 h / 7 / 30 / 90 jours, répartition par appareil et par source.
Vue hebdomadaire filtrable des publications sociales, statuts (brouillon, planifié, approuvé), actions rapides, visuels attachés, journal d'activité signé et mises à jour en temps réel.
Page de remerciement dédiée servant de point de conversion unique pour la publicité, et politique de confidentialité bilingue couvrant collecte, usage, conservation et droits.
Technique
Navigateur (React 19, SSR)
│ formulaire → validation Zod
▼
Server function (TanStack Start)
├─► PostgreSQL : insertion du lead (source de vérité)
├─► API e-mail : notification conseiller (statut journalisé)
└─► réponse → redirection /thank-you (conversion)
Traceur comportemental
└─► table analytics_events (insertion anonyme, lecture admin)
└─► tableau de bord protégé /analyticsleads — demandes entrantes et statut d'envoi de la notificationuser_roles — rôles applicatifs, séparés des profilsanalytics_events — événements comportementaux anonymeseditorial_posts — publications planifiées, statuts et visuelseditorial_activity — journal des actions de collaborationRésolution de problèmes
L'insertion en base précède l'appel au fournisseur d'e-mail. Une panne du service de messagerie n'entraîne plus de perte commerciale : l'échec est enregistré sur la ligne du lead et reste rattrapable.
L'événement de conversion est déclenché par l'arrivée sur la page de remerciement plutôt que par un événement dupliqué dans le code, ce qui a supprimé le double comptage observé côté régie publicitaire.
Les rôles vivent dans user_roles et sont vérifiés par une fonction SQL security definer appelée côté serveur, ce qui évite l'escalade de privilèges depuis le navigateur.
Les outils publicitaires indiquent combien de personnes cliquent ; ils n'expliquent pas où les visiteurs décrochent. Un traceur maison écrit dans une table dédiée répond à la question « pourquoi peu de formulaires malgré le trafic ».
La langue affichée par défaut a été alignée sur l'audience principale, tout en conservant une bascule persistante et un contenu français complet.
Statistiques, témoignages et années d'expérience non prouvés ont été retirés du site à la demande du client. Le contenu public ne présente que des éléments vérifiables.
Impact attendu
Le budget publicitaire aboutit désormais sur une page conçue pour une seule action : demander une consultation.
La persistance précède la notification, et les échecs d'envoi restent visibles et rattrapables.
Le conseiller reçoit chaque demande par courriel, avec réponse directe vers le client.
L'entonnoir et les abandons de formulaire indiquent où agir plutôt que de deviner.
Une même page sert les publics anglophone et francophone d'Ottawa, sans site dupliqué.
Le calendrier éditorial partagé remplace les échanges dispersés par un flux de validation traçable.
Contribution
J'ai porté le projet de bout en bout, du cadrage au produit en ligne : définition du parcours de conversion, conception de l'interface et du système visuel, développement front-end et serveur, modélisation de la base de données et de ses règles d'accès, automatisation des notifications, intégration des outils de mesure, mise en place du back-office et de l'analytique, puis itérations à partir des retours du client et des données observées.
Parcours de conversion, hiérarchie de l'information, mobile d'abord.
Système de couleurs, typographie et composants cohérents sur toutes les pages.
React, TypeScript, rendu serveur, routage typé, fonctions serveur.
Schéma relationnel, politiques d'accès, séparation des rôles.
Notifications transactionnelles, balises de mesure, événements de conversion.
Correction d'un double comptage de conversion et d'une erreur d'hydratation côté client.