Sommaire
L'essentiel
- Une seule application iOS et Android pour deux publics : clients et couturiers.
- Un parcours complet dans l'app : demande, offre, rendez-vous, mission, paiement, avis.
- Offres et rendez-vous synchronisés en temps réel entre les deux téléphones avec Firestore.
- Paiement Stripe et Apple Pay, commission et TVA réglables, facture PDF envoyée par email.
- Back-office React pour gérer utilisateurs, paiements, catégories, avis et signalements.
Zzigs est une application mobile iOS et Android qui met en relation des particuliers ou des professionnels avec des couturiers et retoucheurs. Le client publie sa demande, les couturiers proches lui envoient une offre avec un prix, et tout le reste se passe dans l'application : discussion, rendez-vous, suivi de la mission, paiement par carte et avis. Ahmed Sanoko a conçu et développé l'ensemble : l'application, l'API de paiement et le back-office d'administration.
Le besoin : trouver un couturier sans chercher
Faire reprendre un ourlet, ajuster une veste ou faire réaliser une pièce sur mesure demande souvent de chercher un artisan, de l'appeler, de comparer les prix et de régler en espèces. Zzigs inverse le parcours : le client décrit son projet une seule fois et ce sont les couturiers qui viennent à lui.
L'application sert deux publics très différents avec un seul code :
- Les clients, particuliers ou professionnels, qui publient une demande de retouche, de création sur mesure ou de réparation.
- Les couturiers et retoucheurs, qui parcourent les demandes autour d'eux et proposent leurs services.
Le rôle se choisit à l'inscription, sur des cartes descriptives. Ce choix n'est pas un détail : des couturiers s'inscrivaient comme clients et publiaient leur profil à la place d'une demande. L'écran d'inscription a donc été repensé, et un court parcours d'introduction en trois étapes explique le fonctionnement après la première connexion.
Le parcours, de la demande au paiement
Chaque mission suit un fil précis, que l'application rend visible à chaque instant :
- Le client publie son projet : type de prestation (catégories gérées depuis l'administration), description détaillée, budget et jusqu'à 10 photos.
- Les couturiers voient la demande dans leur fil, avec la distance et le temps de trajet estimé, puis envoient une offre avec leur prix et un message de présentation.
- Le client accepte ou refuse l'offre. Le couturier peut aussi modifier son prix dans la conversation.
- Une fois l'offre acceptée, le client propose un créneau de rendez-vous, que le couturier confirme ou refuse.
- Le couturier démarre la mission, puis la déclare terminée.
- Le client paie dans l'application, reçoit sa facture par email et peut laisser un avis noté de 1 à 5 étoiles.


Les fonctionnalités
Pour le client
- Publication, modification et suppression de projets, avec photos compressées avant l'envoi.
- Réception des offres dans une messagerie dédiée, avec filtres par statut.
- Acceptation ou refus d'une offre en un geste, avec un message système dans la conversation.
- Proposition de rendez-vous et annulation avec un motif obligatoire.
- Paiement par carte via Stripe, et Apple Pay sur les appareils compatibles.
- Avis sur le couturier à la fin de la mission.
Pour le couturier
- Fil des demandes disponibles, filtrable par catégorie et par code postal.
- Fiche projet avec carte, distance en kilomètres et temps de trajet estimé.
- Envoi d'une offre avec prix et message de 20 à 400 caractères.
- Modification du prix pendant la discussion.
- Calendrier des rendez-vous avec leur statut : en attente, confirmé, en cours, paiement, terminé.
- Saisie de ses coordonnées bancaires (IBAN vérifié et mis en forme) pour être payé.
Pour tous
- Profils publics avec note moyenne et avis récents.
- Signalement d'un utilisateur ou d'un projet, de façon anonyme.
- Notifications push à chaque étape, également enregistrées dans la base.
- Connexion par email et mot de passe ou par numéro de téléphone avec code SMS à 6 chiffres.
- Application disponible en 5 langues : français, anglais, allemand, espagnol et italien.
- Suppression du compte depuis l'application.
Les défis techniques
Une machine à états partagée en temps réel
La vraie difficulté de Zzigs n'est pas un écran en particulier. C'est que deux personnes agissent sur la même mission, chacune sur son téléphone, et que chacune doit voir immédiatement ce que l'autre vient de faire.
Une offre passe par plusieurs états (en attente, acceptée, refusée), puis le rendez-vous qui en découle par d'autres (proposé, confirmé, refusé, annulé, en cours, paiement attendu, payé). Chaque transition n'est permise qu'à l'un des deux acteurs. Le client accepte l'offre, le couturier confirme le créneau, le couturier démarre et termine la mission, le client paie.
La solution repose sur Firebase Firestore et ses écouteurs en temps réel. La conversation, l'offre et le rendez-vous sont suivis en direct : quand le couturier confirme un créneau, le bandeau en haut de la discussion du client change aussitôt, le bon bouton apparaît (« Payer », « Laisser un avis »…) et un message système s'ajoute au fil. Le client sait toujours ce qu'on attend de lui, et le couturier aussi.
L'en-tête de l'application écoute lui aussi les offres en temps réel, pour afficher le nombre d'actions en attente sans recharger l'écran.



Géolocalisation sans suivre l'utilisateur
Un couturier veut savoir si une demande vaut le déplacement. Plutôt que de demander en permanence la position du téléphone, l'application part des adresses et codes postaux des deux utilisateurs. Ils sont convertis en coordonnées via le service de géocodage d'OpenStreetMap, puis la distance est calculée avec la formule de haversine. Un temps de trajet est estimé à partir de cette distance, et une carte affiche les deux positions.
Le fil du couturier peut aussi être filtré par code postal, grâce à une table locale de plus de 35 000 communes françaises avec leur code postal.
Paiement, commission et facture
Le paiement se fait uniquement dans l'application. Au moment de payer, l'application lit le prix de l'offre et les réglages de paiement, puis calcule le total : prix de la prestation, TVA et commission de la plateforme. Les deux taux se règlent depuis le back-office, sans nouvelle version de l'app.
Une petite API PHP crée l'intention de paiement Stripe côté serveur, pour que la clé secrète ne soit jamais dans l'application. Le client paie avec la feuille de paiement Stripe ou avec Apple Pay. Un webhook Stripe signé reçoit la confirmation côté serveur.
Une fois le paiement validé, le rendez-vous passe à l'état payé, le paiement est enregistré, et l'API envoie trois emails : une facture au format PDF au client (générée avec mPDF), un avis de paiement au couturier et un récapitulatif à l'administrateur.

Fiabilité, sécurité et mises à jour
- Coupure réseau : l'application détecte la perte de connexion, affiche un écran dédié et recharge les données dès le retour du réseau.
- Blocage de compte : un compte désactivé depuis l'administration est bloqué immédiatement dans l'application, grâce à un écouteur sur la fiche utilisateur, sans attendre une reconnexion.
- Profil complet avant d'agir : un couturier doit renseigner nom, adresse, code postal et téléphone avant d'accéder aux demandes.
- Mises à jour à distance : les correctifs passent par Expo Updates, sans repasser par les stores.
- Version minimale : au démarrage, l'application compare sa version à celle exigée par l'API et invite à mettre à jour depuis l'App Store ou Google Play si besoin.
Le back-office
L'équipe de Zzigs pilote la plateforme depuis une interface web en React, branchée sur la même base Firebase :
- tableau de bord avec graphiques (inscriptions, répartition) ;
- gestion des utilisateurs, projets, offres et rendez-vous ;
- suivi des paiements par statut (en attente, effectué, remboursé, échoué) ;
- réglage du taux de commission et de la TVA ;
- gestion des catégories de prestations ;
- modération des avis et des signalements ;
- envoi de notifications push à une sélection d'utilisateurs ;
- édition des conditions d'utilisation, de la politique de confidentialité et des mentions légales.
La pile technique
- Application : React Native avec Expo, une seule base de code pour iOS et Android, navigation React Navigation, cartes react-native-maps, traductions i18next.
- Données et comptes : Firebase Firestore, Firebase Authentication (email et téléphone) et Firebase Storage pour les photos.
- API : PHP avec le SDK Stripe, PHPMailer pour les emails et mPDF pour les factures.
- Notifications : service de notifications push d'Expo.
- Back-office : React avec Recharts pour les graphiques.
Zzigs est publiée sur l'App Store et sur Google Play. Ahmed a mené le projet de bout en bout en tant que développeur fullstack principal : conception des parcours, application mobile, API, administration et publication sur les deux stores.
Un projet de mise en relation ?
Zzigs montre comment faire tenir dans une application une négociation, un rendez-vous et un paiement entre deux personnes, avec un suivi clair à chaque étape. Si vous avez un projet de place de marché ou de service à la demande, me contacter est le plus simple. Vous pouvez aussi voir toutes les captures de l'application.
Questions fréquentes
Peut-on développer une application de mise en relation pour iOS et Android en une seule fois ?
Oui. Zzigs utilise React Native avec Expo : une seule base de code produit les deux applications, publiées sur l'App Store et Google Play.
Comment la plateforme se rémunère-t-elle sur chaque mission ?
Le total payé par le client comprend le prix de la prestation, la TVA et une commission de la plateforme. Les deux taux se règlent dans le back-office, sans publier de nouvelle version de l'application.
Peut-on corriger l'application sans attendre la validation des stores ?
Oui pour le code JavaScript : Zzigs reçoit ses correctifs à distance via Expo Updates. Une version minimale peut aussi être imposée depuis l'API pour inviter les utilisateurs à mettre à jour.