SaaS · En développement
La décision
L'origine du lien de connexion ne se déduit jamais d'un en-tête de requête
Whos se connecte par lien magique. La tentation est de construire ce lien depuis l'en-tête « Host » de la requête, comme le fait la moitié des tutoriels. Or un en-tête est falsifiable : il suffit d'appeler l'API avec un « Host » choisi pour que le lien de connexion parte vers un domaine attaquant, et l'utilisateur s'authentifie chez quelqu'un d'autre sans rien remarquer. L'origine vient donc d'une variable d'environnement explicite, et la liste des URL de redirection autorisées côté Supabase forme la dernière barrière. La conséquence est assumée : un déploiement dont l'origine n'est pas configurée ne fonctionne pas. Il ferme, il n'ouvre pas.
Le problème
Prospecter à la main, c'est quatre tâches distinctes qu'on mélange et qu'on fait mal : trouver qui contacter, vérifier que le point de contact est réellement public, formuler un angle qui ne ressemble pas à un publipostage, puis relancer au bon moment sans harceler. Les outils d'envoi en masse résolvent la quatrième en ignorant les trois premières. C'est ce qui produit les messages que tout le monde supprime.
Mon rôle
Seul, de bout en bout : modèle de données, authentification, pipeline de génération, interface, facturation, déploiement.
Ce qui a été difficile
La partie coûteuse n'a pas été d'écrire le code, mais de décider ce qui était un vrai défaut. Une revue adversariale du projet a produit une longue liste de constats ; la majorité n'a pas survécu à la question « montre-moi l'entrée qui casse ». Ceux qui ont survécu ont été corrigés. Ce tri est plus difficile qu'il en a l'air : un constat plausible et bien rédigé se corrige très vite par réflexe, et on finit par complexifier du code qui allait bien. Le critère retenu : tant qu'on ne sait pas écrire le scénario d'échec concret, ce n'est pas un défaut, c'est une inquiétude.
Où ça en est
En ligne et opérationnel. Authentification, génération, envoi et facturation sont en place ; le produit continue d'évoluer.