Tous les articles

Emilia Cross : une visio facturée à la minute, de bout en bout

Étude de cas — une app de rencontre (Flutter + PWA) où la relation se noue en visio, facturée à la minute en temps réel. Architecture, décisions, et le problème le plus dur.

Emilia Cross : une visio facturée à la minute, de bout en bout

Emilia Cross, pour France Assist, est une application de rencontre la relation se noue en visio en direct. Je l'ai conçue de bout en bout : les clients Flutter (application mobile publiée + PWA) et le backend NestJS.

Le vrai défi n'était pas une brique, mais trois choses difficiles à tenir ensemble : le temps réel (la visio), la confiance (une plateforme de rencontre attire fraude et abus) et la monétisation (de l'argent qui entre, et des reversements aux hôtes).

Décision d'architecture n°1 : séparer l'API REST et le serveur WebSocket. Ils tournent sur deux processus distincts (ports et déploiements séparés), pour scaler le temps réel présence, signalisation, facturation en direct sans jamais bloquer l'API HTTP.

Décision n°2 : Agora RTC plutôt qu'une stack WebRTC maison. Monter soi-même les relais TURN et la scalabilité vidéo aurait coûté des semaines pour un résultat moins fiable. Agora gère la qualité et les relais ; je me concentre sur le produit.

Le problème le plus dur : facturer la visio à la minute, en temps réel. Après deux minutes gratuites, le backend débite des crédits à intervalle régulier via le serveur WebSocket, vérifie le solde en continu, et coupe l'appel dès qu'il n'y a plus de crédits sans jamais double-débiter. C'est le cœur du modèle économique, et ça combine temps réel, crédits, paiements et reversements.

Côté argent et confiance : paiements et reversements via Stripe, vérification d'identité (KYC) via Stripe Identity, contrôle d'accès par rôles (RBAC) et double authentification (2FA). L'idempotence est partout de l'argent circule un même événement ne peut jamais débiter ou payer deux fois.

Le backend a grandi en une vraie plateforme : une vingtaine de domaines métier (crédits, paiements, reversements, cadeaux, abonnements, parrainage, feed, notifications push Firebase, pipeline média FFmpeg/Sharp, supervision). Le tout conteneurisé (Docker) et documenté (Swagger).

Ce que j'en retiens : séparer le temps réel de l'API dès le départ, rendre idempotent tout flux d'argent, et ne pas réinventer ce qu'un service spécialisé (Agora, Stripe) fait mieux. Le mot de la fin revient au client : « Paul a pris une idée ambitieuse du streaming vidéo facturé à la minute et en a fait une plateforme stable et scalable. »

Un grand big up à celles et ceux avec qui j'ai bâti ce projet : Clavers au design, et Fresnel Aglossi, qui a mené la partie front du back-office app). Aucune œuvre solide ne se bâtit seul.

Voir Emilia Cross Le projet en ligneDiscuter d'un projet Sur LinkedIn
Partager