J'avais mis MultiChat de côté il y a quelques mois. Une messagerie qui traduit chaque message dans la langue de son destinataire, en adaptant le registre — décontracté entre amis, soutenu pour un échange professionnel. L'interface était là, le backend aussi, le dépôt avait sept étoiles.
Je suis revenu dessus cette semaine en pensant finir deux ou trois détails.
Ce que j'ai trouvé en ouvrant le capot
Le backend ne démarrait pas. Pas « mal » : pas du tout. Il tentait de joindre une base Postgres qui n'existait nulle part, et abandonnait avant de servir la moindre requête.
Une fois démarré, envoyer un message levait une exception — à chaque fois. Une requête écrite avec l'API d'une ancienne version de SQLAlchemy, qui n'existe plus dans la version utilisée. L'erreur était attrapée par un except et transformée en « traduction échouée ». Silencieusement, depuis le début.
Côté interface, deux écrans entiers — l'inscription, le mot de passe oublié — étaient écrits, complets, soignés… et injoignables. Ni exportés, ni reliés à une route.
Et surtout : il n'existait aucun moyen de démarrer une conversation. Pas de liste des échanges, pas de recherche d'utilisateur. Pour écrire à quelqu'un, il aurait fallu connaître son identifiant interne. Une messagerie dans laquelle on ne peut parler à personne.
Le compilateur TypeScript signalait 22 erreurs. Le build passait quand même : un commit avait remplacé tsc && vite build par vite build. La vérification de types retirée, au lieu des erreurs corrigées.
Le plus gênant
L'adaptation du registre — l'argument central du projet — était cassée par conception.
Le code préfixait "Hey, " au message avant de le faire traduire, puis tentait de retirer ce préfixe du résultat. Sauf que le traducteur traduit aussi le préfixe. Le texte revenait avec un « Salut, » que le code ne reconnaissait pas, et laissait donc dans le message final.
Ça ne pouvait pas marcher. Ça n'avait jamais marché.
Ce que ça m'a appris
Un projet peut paraître fini de l'extérieur et ne fonctionner sur aucun de ses axes. Ce qui m'a trompé, c'est que tout compilait, que tout semblait démarrer, et que l'interface était jolie. Trois signaux qui ne disent rien de ce que l'application fait réellement.
Les sept étoiles n'ont rien changé au code. Elles m'ont juste obligé à le relire.
Où ça en est
MultiChat fonctionne maintenant, et c'est vérifiable.
La traduction couvre neuf langues, avec trois registres réellement distincts. La même phrase française, envoyée à trois personnes : « Hey, can you send me the file by tonight? », « Hi, can you send me the file before tonight? », « Hello, could you please send me the file before this evening? »
S'y ajoutent les messages en temps réel avec indicateur de frappe et accusés de lecture, l'appel vidéo en pair-à-pair dont la signalisation passe par le WebSocket existant, une interface qui suit la langue du compte, un mode sombre, et une recherche pour — enfin — trouver quelqu'un à qui écrire.
Et 89 tests : 31 unitaires côté serveur, 42 côté interface, 16 de fumée qui s'exécutent aussi bien en local que contre la production.
C'est en ligne sur multichat-app.vercel.app, le code est sur GitHub.
Si vous voulez l'essayer, prenez deux comptes — un en français, un en anglais. C'est là que l'intérêt se voit.