Tout marchait. Un lien, un clic, une conversation. Et puis un jour, plus rien. Les invitations Duo ne fonctionnaient plus. Pas d'erreur visible, pas de crash. Juste… rien. L'invité cliquait, et atterrissait sur la page d'accueil. Sans conversation, sans message, sans explication. On s'est dit que c'était un problème de déploiement.

Ce n'était pas un problème de déploiement.

Le symptôme

Le scénario était simple. Un créateur envoie une invitation Duo. L'invité reçoit un email, clique sur le lien, et… rien. Pas de conversation, pas de message d'erreur. Juste un retour silencieux sur la page d'accueil.

On a d'abord pensé à un cache mal vidé, un token expiré, un problème de redirection. On a debugé pendant des heures. Le code semblait correct. Les tokens étaient générés, les liens étaient construits, les emails partaient. Tout était en place, sauf que ça ne marchait pas.

La piste technique

En creusant les logs, on a compris. Notre lien d'invitation contenait un token d'authentification à usage unique. Un OTP : One-Time Password. Le principe est simple : chaque token ne peut être utilisé qu'une seule fois. Le problème, c'est qu'entre le moment où l'email est envoyé et celui où l'invité clique, ce token était déjà consommé.

Consommé par qui ? Par l'infrastructure email elle-même. Notre service d'envoi encapsule les liens dans des redirections de suivi. Le client email de l'invité (Apple Mail, Gmail, Outlook) précharge les liens pour afficher un aperçu. Le token était consommé avant même que l'invité ne touche quoi que ce soit.

On aurait pu patcher. Désactiver le suivi des liens. Générer des tokens multi-usage. Ajouter un mécanisme de retry. Mais quelque chose nous a arrêtés.

La vraie question

On s'est demandé : combien de situations différentes ce lien doit-il gérer ?

L'invité peut avoir un compte Moderato ou pas. Il peut être connecté ou pas. Il peut être sur un ordinateur, un iPhone ou un Android. Il peut avoir l'app mobile ou pas. En comptant toutes les combinaisons, on arrive à plus de quinze scénarios. Et un seul lien doit tous les couvrir.

Mais surtout, on avait oublié l'essentiel : qui est cet invité ?

Quand quelqu'un utilise Moderato pour inviter une autre personne à une conversation protégée, c'est rarement pour échanger des banalités. Si le créateur passe par un email au lieu d'envoyer le lien par messagerie instantanée, c'est peut-être que la situation est tendue. L'invité reçoit un email d'un service qu'il ne connaît pas, envoyé par quelqu'un avec qui la communication est difficile. Il est potentiellement méfiant. Sur la défensive.

Et nous, on lui envoyait un lien technique qui ne marchait même pas.

Penser l'expérience avant la technique

On a tout repris à zéro. Pas le code. La réflexion.

Le lien. Il doit marcher à chaque clic. Pas une fois sur trois. Pas « sauf si votre client email précharge les liens ». À chaque fois. La solution : séparer complètement l'authentification de l'invitation. Le lien contient seulement le token d'invitation, qui est réutilisable pendant sept jours. L'authentification se fait ensuite, sur la page, au rythme de l'invité.

L'email. Il doit parler à deux profils. L'initié, qui connaît déjà Moderato et veut juste rejoindre la conversation. Et le profane, qui découvre le service et a besoin de comprendre de quoi il s'agit avant de cliquer.

La page d'accueil. C'est là que l'idée la plus inattendue est arrivée. Au lieu d'une page classique avec un formulaire, on s'est demandé : et si c'était Moderato lui-même qui accueillait l'invité ? Pas une page, une conversation.

Et puis l'idée s'est affinée. Si c'est un script, pourquoi faire semblant que ça n'en est pas un ? On a créé Moderato Scripté, le portier, pas le maître des lieux. « Le vrai est à l'intérieur, moi je suis juste là pour vous accompagner jusqu'à la porte. » Un personnage qui sait qu'il n'est qu'un script, qui le dit avec humour, et qui donne envie d'aller rencontrer le vrai.

Le premier contact avec Moderato est devenu un dialogue honnête. Un accueil qui ne prétend pas être ce qu'il n'est pas. Parce que Moderato, c'est la communication sincère, alors l'accueil aussi doit l'être.

L'arrivée dans la conversation. Un message de bienvenue pour l'invité. Une notification pour le créateur. Pas un atterrissage silencieux dans une interface inconnue.

Ce qu'un bug nous a appris

Ce qui ressemblait à un problème technique était en réalité un problème de design. On avait pensé l'invitation comme un problème d'ingénierie : générer un lien, vérifier un token, créer une session. On avait oublié qu'à l'autre bout de ce lien, il y a une personne qui hésite peut-être à cliquer.

La réponse n'était pas un retry, un fallback, ou un token plus robuste. C'était un dialogue. Le premier contact avec Moderato est devenu… Moderato. Un chat d'accueil qui prend l'invité par la main, avec humour et transparence.

La robustesse technique n'est pas qu'une question de code. C'est aussi une question de respect : respecter le temps de l'utilisateur, son contexte émotionnel, et sa liberté de ne pas comprendre immédiatement ce qu'on attend de lui.

Moderato Duo, c'est un espace de dialogue protégé pour les conversations qui comptent.