ElectroCoeur
Un tableur d’un côté, des clients sans réponse de l’autre. L’application a relié les deux.
ElectroCoeur vend et entretient des défibrillateurs pour des collectivités et des entreprises. Toutes les données du parc existaient déjà — dans un Google Sheets exporté de leur outil de maintenance. Mais un client qui voulait savoir « est-ce que mes appareils sont en règle aujourd’hui ? » n’avait aucun moyen simple de le vérifier.
- Catégorie
- Espace client multiplateforme
- Plateformes
- Web · iOS · Android
Le point de départ
L’entreprise disposait d’un espace client sous WordPress qui ne répondait plus au besoin. L’information existait, mais elle était enfermée dans un fichier interne : pour obtenir une réponse, un client devait appeler, et quelqu’un devait aller chercher la ligne correspondante dans le tableur.
Le vrai sujet n’était pas de créer des données, mais de rendre lisibles celles qui existaient déjà — sans demander à l’entreprise de changer son fonctionnement. Le tableur devait rester la référence, parce que c’est lui qui est alimenté par l’outil de maintenance utilisé sur le terrain. Il fallait aussi que chaque client ne voie que ses propres appareils, et que les rapports d’intervention au format PDF soient rattachés au bon défibrillateur.
Ce qui a été construit
L’application lit le tableur chaque nuit et met à jour la vue du parc. Le client ouvre son espace — sur son téléphone ou depuis un navigateur — et voit immédiatement l’état de ses appareils : vert quand tout va bien, orange quand un consommable arrive à expiration, rouge quand il est périmé. Une carte situe chaque appareil, les rapports d’intervention sont consultables directement dans l’application, et trois formulaires permettent de demander une intervention, l’ajout d’un appareil ou un devis.
Ce que le produit fait
État du parc en un coup d’œil
Trois couleurs, une règle simple : un appareil prend l’état du plus urgent de ses consommables. Le client sait où il en est sans lire un tableau.
Alertes avant la péremption
Un consommable qui expire dans moins de 90 jours passe en orange, avant d’être hors service. La conformité se anticipe au lieu de se constater.
Carte des appareils
Chaque défibrillateur est situé sur une carte, avec regroupement automatique quand ils sont nombreux. Utile pour les collectivités qui en gèrent des dizaines.
Rapports d’intervention rattachés
Les PDF produits après chaque intervention sont classés automatiquement sous le bon appareil et consultables dans l’application.
Demandes en trois formulaires
Intervention, ajout d’un appareil ou devis : chaque demande part vers la bonne boîte mail, sans passer par le standard.
Chaque client ne voit que son parc
Les droits sont appliqués côté serveur, appareil par appareil : un client ne peut pas accéder aux données d’un autre, même en cherchant.
Notification des nouveaux rapports
Une notification quotidienne signale les rapports nouvellement disponibles, envoyée uniquement aux personnes concernées par ces appareils.
Vue technicien et vue administrateur
Les techniciens voient l’ensemble du parc, l’administration suit l’état de la synchronisation et les comptes clients.
Les décisions qui comptent
Ne jamais écraser les données du client
La synchronisation compare chaque ligne du tableur à ce qui est déjà enregistré : les lignes inchangées sont ignorées, les lignes modifiées mises à jour, et celles qui disparaissent sont marquées comme supprimées plutôt que réellement effacées. C’est ce qui permet de relancer la synchronisation sans crainte : une erreur dans le fichier source ne détruit rien de façon irréversible.
Rattacher un PDF au bon appareil, sans intervention humaine
Les rapports d’intervention arrivent sous forme de PDF dans un dossier partagé, sans nommage exploitable. Le traitement lit le texte de chaque page pour y retrouver le numéro unique de l’appareil, puis classe le document au bon endroit. Le traitement est conçu pour pouvoir être relancé autant de fois que nécessaire sans créer de doublon.
La sécurité écrite comme un filtre, pas comme une vérification
Plutôt que de faire confiance à l’application pour ne demander que les bonnes données, le serveur refuse toute requête qui n’est pas déjà limitée à ce que le demandeur a le droit de voir. La différence est importante : une application modifiée ou un accès direct à la base ne permettent pas de contourner la règle.
Une mise à jour web qui n’arrivait jamais chez l’utilisateur
Sur la version web, les utilisateurs continuaient de voir une ancienne version malgré les mises en ligne. Le correctif détecte le cas précis « nouvelle version installée alors qu’une version tourne déjà » — qui signifie une mise à jour, pas une première visite — et recharge la page une seule fois, avec une protection contre les rechargements en boucle.
Une invitation par mail ne doit pas pouvoir partir 262 fois
La synchronisation n’envoie jamais de mail elle-même. Une fonction distincte s’en charge, sous quota horaire et journalier. Ainsi, une synchronisation qui se comporterait mal ne peut pas déclencher un envoi massif vers tous les clients — un incident dont on ne se remet pas commercialement.
Un chiffre inattendu qui n’était pas un bug
L’entreprise attendait environ 3 000 comptes clients ; la synchronisation en a produit 262. La cause n’était pas dans le traitement : plus de 3 000 lignes du tableur n’avaient pas d’adresse email renseignée. Le distinguer d’un défaut technique a évité de « corriger » un traitement qui fonctionnait correctement, et a révélé un vrai sujet de complétude des données côté client.
Comment c’est assemblé
Google Sheets
Le fichier de l’entreprise reste la référence : rien à changer dans ses habitudes
Synchronisation nocturne
Chaque nuit, seules les lignes modifiées sont reprises — jamais de doublon, jamais de perte
Cloud Firestore
Les données du parc, filtrées pour que chaque client ne voie que ses appareils
Application Flutter
Une seule base de code pour le web, iOS et Android
Les technologies utilisées
Frontend
- Flutter
- Dart
- Cubit
- go_router
- flutter_map
Backend
- Cloud Functions
- TypeScript
- Node 24
Infrastructure
- Firebase
- Cloud Firestore
- Cloud Storage
Services
- Google Sheets API
- Google Drive API
- Firebase Cloud Messaging
Ce qui a été livré
Application livrée seul et publiée sur l’App Store et Google Play, depuis une seule base de code pour le web, iOS et Android. Neuf fonctions serveur assurent la synchronisation nocturne du tableur, le classement des rapports d’intervention et les notifications. Environ 13 700 lignes de Dart et 5 800 lignes de TypeScript. Les chiffres d’usage réel ne sont pas publiés : aucune mesure d’audience n’a été mise en place sur le projet.
- Web
- iOS
- Android
Besoin d’un produit similaire ?
Parlons de ce que vous voulez construire. Je vous réponds personnellement, généralement sous 24 heures.