Fiche
- Rôle
- Conception et développement
- Équipe
- Seul, pour l’équipe commerciale de Circul’Egg
- Période
- Février à juin 2026
- Statut
- En service sur les salons depuis Vitafoods Europe 2026
- Code
- Privé
- Captures
- Version de démonstration compilée depuis le code, avec des contacts et des cartes de visite fictifs.
En bref
Une application mobile de prise de contacts, que j’ai conçue et développée seul pour que l’équipe commerciale de Circul’Egg aborde le salon Vitafoods Europe 2026 dans de bonnes conditions ; elle a servi depuis sur d’autres salons. Le commercial photographie la carte de visite, résume l’échange à voix haute et qualifie le contact ; la carte et le mémo sont lus par Gemini, puis la fiche part dans Airtable. Tout s’enregistre sans réseau, et la synchronisation ne crée jamais de doublon.
Point de départ
Sur un salon, un contact se résume souvent à une carte de visite et à quelques mots notés à la hâte. Le temps de rentrer, le contexte est perdu, et la fiche n’est saisie que des jours plus tard.
Contraintes
- Un réseau de salon saturé : tout doit s’enregistrer hors ligne.
- Des contacts qui s’enchaînent sur le stand : chaque fiche doit se remplir en quelques gestes.
- Une même application pour le web, iOS et Android, alors que l’accès à la caméra et au micro diffère d’une plateforme à l’autre.
- Aucun accès direct à Airtable depuis l’application : tout passe par le serveur.
Livrables
- L’application Flutter, utilisable sur le web et compilable pour iOS et Android.
- La lecture des cartes de visite par Gemini 2.5 Flash.
- Les mémos vocaux, transcrits et rattachés au contact.
- La qualification commerciale et la file de synchronisation hors ligne.
- Une fonction serveur qui envoie les fiches vers Airtable et garantit qu’aucune n’y est créée deux fois.
- Les comptes des commerciaux et leur carte de visite numérique publique.
Architecture
L’application enregistre chaque contact dans Hive, sur le téléphone, puis le synchronise vers Firestore et Firebase Storage. Gemini lit la carte et transcrit le mémo. Une Cloud Function en Node.js pousse les fiches vers Airtable : l’application n’appelle jamais Airtable directement.
L’enregistrement audio passe par une interface commune, avec une version pour le navigateur et une pour le mobile, choisie à la compilation. L’état de l’application est géré avec Riverpod.
Stack technique
- Langages
- Interface
- Serveur
- Données et stockage
- IA
- Authentification
Décisions
-
Gemini complète la fiche après coup
Le commercial photographie la carte de visite et résume l’échange à voix haute. La fiche est enregistrée aussitôt, en attente ; dès que le réseau le permet, Gemini lit la carte et transcrit le mémo.

Le scanner : photo de la carte de visite, ou saisie manuelle. -
Une qualification qui suit le contact jusqu’à Airtable
Provenance, température, profil et action souhaitée se choisissent d’un geste. Les mêmes valeurs servent de filtres dans la liste et de colonnes dans Airtable.

La fiche d’un contact : sa qualification et les notes de l’échange. -
La saisie n’attend jamais le réseau
Chaque contact est d’abord enregistré sur le téléphone, sans attendre le serveur. Une file retente ensuite l’envoi toutes les dix secondes, et à chaque retour du réseau, jusqu’à ce que la fiche existe dans Airtable.
-
Une fiche n’est jamais créée deux fois
Vérifier dans Airtable qu’une fiche n’existe pas avant de la créer ne suffit pas : deux envois proches font tous deux la vérification avant que le premier ait écrit, et une fiche fraîchement créée n’apparaît pas tout de suite dans les recherches. Avec les renvois de la file hors ligne, cela aurait produit des doublons.
Le serveur pose donc un verrou atomique dans Firestore : le premier envoi l’obtient et crée la fiche, les suivants attendent son identifiant et le réutilisent. Si une fiche a été supprimée à la main dans Airtable, le verrou la marque comme supprimée, et un envoi tardif ne la recrée jamais.
-
Une carte de visite numérique pour chaque commercial
Le QR code de la carte ouvre une page publique, d’où le visiteur du stand enregistre les coordonnées du commercial dans son propre téléphone.

La carte du commercial et son QR code.
Résultats
- 14 030
- lignes de Dart, réparties en 68 fichiers
- 4
- champs de qualification envoyés en colonnes dans Airtable
- 10 s
- entre deux tentatives d’envoi quand le réseau manque
Sur les salons, à commencer par Vitafoods Europe 2026, l’équipe saisit et qualifie plus d’une centaine de contacts par jour. Leurs données arrivent dans Airtable au format attendu par le CRM, prêtes pour l’envoi des échantillons, des relances et des newsletters.
