À propos du projet
Une plateforme de suivi de flotte GPS en marque blanche sur Firebase, où un revendeur sert ses propres clients sous sa marque et son sous domaine, sans serveur à administrer.
Mon rôle: Architecte et développeur full stack, de l'endpoint d'ingestion des traceurs à l'interface cartographique et aux règles multi-tenant.
J'ai construit cette plateforme pour qu'un revendeur puisse entrer sur le marché du suivi de flotte sans exploiter la moindre infrastructure. Le modèle classique impose un serveur en fonctionnement permanent pour ingérer les trames GPS, une couche websocket pour pousser les positions et une base dimensionnée pour le pire cas. Pour un revendeur avec une poignée de clients, ce coût fixe arrive bien avant la première recette.
J'ai supprimé le serveur. Toute l'API REST et l'endpoint d'ingestion des traceurs tiennent dans une seule Cloud Function exécutant Express 5 avec une concurrence de quatre vingts, si bien qu'une instance absorbe un grand nombre de véhicules avant qu'une seconde démarre. Le temps réel passe par les listeners Firestore plutôt que par une couche websocket : le navigateur s'abonne directement aux données, et l'infrastructure de push que j'aurais dû construire puis maintenir en vie n'existe tout simplement pas.
Le front est en React 19 sur Vite, avec une carte Leaflet sur OpenStreetMap, installable en application web progressive, et un petit store Zustand alimenté par les listeners Firestore. Le multi-tenant repose sur les claims Firebase Auth portant le locataire et le rôle, avec des règles Firestore qui imposent l'isolation au niveau de la base plutôt que dans le code applicatif. Les traceurs se connectent via le protocole OsmAnd, que tout smartphone ou boîtier GPS standard parle déjà, si bien qu'ajouter un véhicule ne demande aucun matériel propriétaire. Un revendeur tunisien exploite aujourd'hui la plateforme en production, au service de ses propres clients de flotte et sous sa propre marque, ce qui est exactement le modèle dans lequel un second revendeur viendrait s'installer.
Fonctionnalités principales
- 🗺️ Carte de flotte en direct : Les positions se mettent à jour sur une carte Leaflet alimentée directement par les listeners Firestore, sans couche websocket à exploiter.
- 🏷️ Revente en marque blanche : Chaque revendeur sert ses clients sous sa propre marque sur son sous domaine, depuis un déploiement unique partagé.
- 📡 Protocole traceur standard : Les appareils se connectent via OsmAnd, que smartphones et boîtiers GPS courants parlent déjà, sans matériel propriétaire.
- ☁️ Une seule Cloud Function pour toute l'API : Express 5 avec une concurrence de quatre vingts garde le coût proportionnel à l'usage réel.
- 🔒 Isolation imposée dans la base : Les règles Firestore appliquent la séparation des locataires directement, si bien qu'un bug applicatif ne peut pas exposer la flotte d'un autre client.
- 📲 Application web progressive installable : Les gestionnaires ouvrent la flotte depuis l'écran d'accueil du téléphone, sans store où publier.
- 🎬 Flotte de démonstration intégrée : Une fonction planifiée anime des véhicules réalistes, si bien qu'un prospect voit une flotte en mouvement avant d'installer le moindre traceur.
- 🚦 État actuel : Un revendeur l'exploite en production. En accueillir un second, c'est un locataire à créer et un sous domaine à pointer, pas un déploiement à refaire.
Problèmes et solutions
Problème: Le suivi de flotte impose normalement un serveur en fonctionnement permanent pour ingérer les trames GPS et une couche websocket pour pousser les positions. Un revendeur qui démarre avec quelques clients paie ce coût fixe bien avant d'en tirer le moindre revenu.
Solution: Toute l'API et l'endpoint d'ingestion tiennent dans une seule Cloud Function à forte concurrence, et les listeners Firestore remplacent entièrement la couche websocket. Le coût d'infrastructure suit désormais l'usage réel au lieu de le précéder, ce qui rend le modèle de revente viable dès le premier client.
Problème: Un revendeur ne peut pas apposer son nom sur une plateforme qui affiche celui d'un autre. Et dès que plusieurs revendeurs partagent un déploiement, garder les véhicules de chacun invisibles aux autres dépend d'ordinaire de la justesse de chaque requête applicative.
Solution: La marque et le sous domaine relèvent de la configuration du locataire, si bien qu'un revendeur installe son identité sans toucher au code. L'isolation est imposée par les règles Firestore au niveau de la base, pas par les requêtes applicatives, si bien qu'une erreur côté front ne peut pas exposer la flotte d'un autre revendeur.


