Fitofan
Plateforme sportive : web, applications mobiles et le backend derrière elles
Une seule plateforme pour les athlètes, entraîneurs, clubs et fans : une application web en 11 langues, des applications iOS et Android et un seul backend dont je porte la responsabilité de bout en bout.
- Rôle
- Senior Full-Stack & Mobile Engineer
- Période
- 2024 – 2026


Contexte
Fitofan s’adresse aux athlètes, entraîneurs, parents, clubs et ligues avec une application web Next.js, des applications Flutter pour iOS et Android et un backend NestJS. J’assure la livraison sur toute la stack : architecture, API, données, infrastructure et releases, et depuis 2026 je maintiens seul l’application mobile.
Le défi
Garder un produit cohérent sur trois bases de code et 11 langues tout en ajoutant données sportives en direct, paiements, publication sociale et fonctions IA sans ralentir les releases.
Construit sur toutes les couches
- Application web Next.js 16 en Feature-Sliced Design : plus de 140 pages, 11 locales, environ 10 000 clés de traduction avec parité vérifiée en CI
- Backend NestJS de plus de 90 modules, PostgreSQL et plus de 290 migrations, Swagger et health checks
- Synchronisation événementielle via RabbitMQ avec consommateurs idempotents, dead-letter queue et identifiants de corrélation
- Cache Redis avec invalidation pilotée par décorateurs ; passerelles Socket.IO pour les commentaires et les sessions en direct
- Calendriers, résultats et cotes en direct depuis Sportmonks et API-Football ; publication sociale vers Meta, TikTok, LinkedIn et YouTube
- Abonnements Finix plus vérificateurs de paiement pour Stripe, Square, PayPal, LiqPay, Mercado Pago, GCash et Monopay
- Assistant OpenAI avec appel d’outils, transcription Whisper et génération d’images Replicate
- Application Flutter : BLoC, cache hors ligne Hive, Socket.IO, notifications push, AdMob, Live Activities iOS, 12 locales, plus de 360 tests
- CI/CD : contrôles lint et i18n, Jest, Docker multi-étapes, registre de conteneurs, déploiement SSH ; web sur Vercel
- Packages d’inscription et de création de club partagés, réutilisés par GymTeam via un contrat d’hôte injectable
- R&D IA et vision dans le même écosystème : une application d’évaluation sportive pour enfants avec estimation de pose sur l’appareil en Flutter et abonnements intégrés, et une analyse de technique de taekwondo dans le navigateur avec MediaPipe et TensorFlow.js
Points d’ingénierie
- Consommateurs d’événements idempotents : chaque message est enregistré avant d’être acquitté, donc les retries et les rejeux ne s’appliquent jamais deux fois
- Architecture imposée par l’outillage : règles de couches, une baseline lint figée qui ne peut que rétrécir, détection des cycles de dépendances et parité i18n sur chaque pull request
- Live Activities iOS natives pilotées depuis Flutter via un pont method channel
- Un seul parcours d’inscription packagé derrière un contrat d’hôte et consommé par deux produits
Ce que cela permet
Les fonctionnalités sortent sur le web, le mobile et le backend en un seul changement, et la plateforme échange les données de clubs avec GymTeam en temps réel.