Passer au contenu principal

Étude de cas · Retail · E-commerce

Malish — marketplace locale native iOS + Android

Publié le · Mis à jour le · Par YuSMP Group Engineering

Comment nous avons livré une marketplace native Swift + Kotlin pour une chaîne physique de produits pour enfants — une inscription sans friction, un catalogue intelligent avec recherche flexible, un tunnel de paiement en deux taps, un panneau d'administration pour l'équipe métier et une synchronisation bidirectionnelle des stocks qui maintient l'alignement entre les stocks en ligne et hors ligne sans intervention manuelle, le tout conforme aux attentes des audiences américaines et européennes dans le cadre du RGPD et du CCPA.

SecteurRetail · E-commerce
Année du projet2024
Type d’engagementFixed price + support
Malish — marketplace locale native iOS et Android pour une chaîne de produits pour enfants, avec paiement en deux taps et synchronisation des stocks multi-magasins sur les marchés américains et européens

Le brief — mettre une chaîne multi-magasins en ligne sans perturber le terrain

L'équipe Malish est venue nous voir avec une chaîne physique florissante de magasins de produits pour enfants et une ambition numérique claire : proposer l'assortiment en ligne sans obliger les parents à se déplacer avec leurs enfants, et capter la demande au-delà du périmètre piéton de chaque point de vente. La contrainte n'était pas aspirationnelle, elle était opérationnelle. L'opération de gestion des stocks hors ligne fonctionne, le personnel connaît le catalogue, et l'avantage concurrentiel de la chaîne repose sur la curation de l'assortiment qui lui a valu sa réputation. La surface numérique devait prolonger cette opération, non la remplacer — et ne pouvait pas provoquer un incident de désalignement des stocks susceptible de briser la confiance des clients dans un sens ou dans l'autre. Le profil des acheteurs couvre les habitudes de consommation retail américaines et européennes pour des chaînes similaires qui s'étendent en ligne : des parents qui font leurs recherches sur leur téléphone le soir, attendent une précision prévisible des stocks et effectuent un réachat en moins de 30 secondes lorsque le produit est déjà connu. Les plateformes marketplace SaaS ont été écartées car leurs règles d'inventaire définies par le fournisseur et leurs contraintes d'intégration entrent en conflit avec la logique d'assortiment propre à la chaîne. Un MVP Flutter a été envisagé puis déprioritaire car la finition retail — retours haptiques natifs à la plateforme, accessibilité prévisible, comportement idiomatique de la plateforme — est précisément là où un acheteur de produits pour enfants remarque la différence, et la prime de confiance dans cette catégorie ne résiste pas à une interface en décalage. Le résultat est un client iOS natif en Swift, un client Android natif en Kotlin, un backend Symfony avec un panneau d'administration React, un catalogue propulsé par ElasticSearch, une synchronisation bidirectionnelle des stocks avec les magasins physiques et une livraison intégrée — le tout positionné pour les audiences américaines et européennes dans le respect des exigences RGPD et CCPA dès le lancement.

Points clés du projet

Client iOS natif Swift Client Android natif Kotlin Panneau admin Symfony + React Catalogue intelligent avec recherche flexible Tunnel de paiement en deux taps Synchronisation bidirectionnelle des stocks avec les magasins physiques Intégration du service de livraison Posture RGPD + CCPA États-Unis & UE

Chiffres clés

Un aperçu de ce que le build Malish a permis de réaliser sur iOS natif, Android natif, l'administration Symfony et la synchronisation des stocks multi-magasins au cours de son premier cycle de production.

2plateformes mobiles natives — iOS et Android, bases de code entièrement séparées et optimisées par plateforme
2taps depuis l'écran d'accueil d'un acheteur récurrent jusqu'à une commande passée sur le flux de réachat type
0chiffres d'utilisateurs, GMV ou revenus inventés dans cette étude de cas — uniquement des faits d'ingénierie
1backend Symfony typé derrière les deux clients mobiles, le panneau d'administration et la synchronisation des magasins physiques
2stores d'applications actifs — Apple App Store et Google Play avec une expérience native idiomatique
14–22 wkfenêtre de livraison typique pour un MVP de marketplace locale native iOS + Android comparable
Catalogue produit Malish — marketplace native Swift + Kotlin comparée aux alternatives Flutter et SaaS pour les chaînes de retail multi-magasins aux États-Unis et en UE

Pourquoi iOS + Android natif plutôt que Flutter et les plateformes marketplace SaaS

Le choix de plateforme domine toutes les autres décisions architecturales dans une marketplace retail où la confiance de l'acheteur est le produit. Nous avons choisi Swift natif sur iOS et Kotlin natif sur Android plutôt que Flutter et les plateformes marketplace SaaS, car les compromis s'alignent clairement sur l'avantage concurrentiel de la chaîne. Swift et Kotlin natifs offrent l'expérience idiomatique que l'acheteur retail ressent dès les trois premiers taps — retours haptiques précis, navigation native au système, accessibilité prévisible et un flux tap-vers-achat indiscernable des autres applications commerciales de l'acheteur. Flutter est une alternative légitime lorsque la marque accepte explicitement une légère interface en décalage et privilégie la vélocité d'une base de code unique sur le soin retail ; pour une chaîne de produits pour enfants dont la prime de confiance ne résiste pas à ce compromis, le natif l'emporte.

Les plateformes marketplace SaaS ont été écartées car leurs règles d'inventaire définies par le fournisseur et leurs contraintes d'intégration entrent en conflit avec la logique d'assortiment propre à la chaîne et l'alignement des stocks multi-magasins déjà en place. Une option Shopify avec une application mobile personnalisée a été envisagée puis déprioritaire car la surface de verrouillage s'amplifie — fournisseur de paiement, thème, modèle d'inventaire, limites d'extensions d'application — et le fossé concurrentiel de la chaîne repose précisément sur la curation qu'une marketplace standardisée aplatit. L'ensemble du stack — Swift, Kotlin, Symfony, admin React, ElasticSearch, PostgreSQL, Redis — est ouvert et justifiable de bout en bout, sans plateforme propriétaire qui enferme l'équipe opérationnelle dans un fournisseur unique.

Swift + Kotlin natif vs Flutter vs plateforme marketplace SaaS — aperçu pour une chaîne retail multi-magasins
Dimension Natif (Malish) Flutter Plateforme marketplace SaaS
Finition nativeIdiomatique à la plateforme — haptiques, navigation, accessibilitéProche, mais risque d'interface en décalage sur le retailDéfini par le fournisseur ; varie selon le modèle
Flexibilité synchronisation stocksConnecteur Symfony en propre par magasinEn propre — même backend SymfonyConnecteur fournisseur ; extension limitée
Adéquation multi-magasinsDisponibilité par magasin dans le cataloguePossible ; même backendModèle multi-magasins fournisseur — prescriptif
Verrouillage SaaS marketplaceAucun — stack entièrement maîtriséAucun — stack entièrement maîtriséÉlevé — paiement, thème, inventaire
Délai de lancement14–22 semaines pour le MVP10–18 semaines — base de code unique4–10 semaines — défini par le modèle
Adéquation App Store / Play StoreBinaires natifs de premier planAcceptable ; schémas de révision connusApplication fournisseur — enveloppe de marque
Adéquation conformité (US et UE)En propre — RGPD + CCPA intégrés dès la conceptionEn propre — même postureContrôlé par le fournisseur — varie selon la région

Références de la plateforme : Documentation Apple Swift, Documentation Kotlin, Documentation Symfony.

Application de fidélité Malish — client iOS natif Swift avec paiement en deux taps pour le retail de produits pour enfants aux États-Unis et en UE

Build iOS — Swift, catalogue intelligent, paiement en deux taps

Le client iOS est développé en Swift avec un hybride UIKit et SwiftUI pour les écrans où la vélocité de SwiftUI aide et où la prévisibilité de UIKit est essentielle. L'ensemble de la surface orientée utilisateur s'articule autour d'un catalogue intelligent avec une recherche flexible propulsée par ElasticSearch — par marque, catégorie, tranche d'âge, taille, magasin et termes en texte libre réellement utilisés par les parents — et un tunnel de paiement en deux taps qui réduit le flux de réachat à sa surface minimale crédible. Le premier tap confirme le panier avec l'adresse de livraison par défaut et le moyen de paiement enregistré ; le deuxième tap passe la commande avec une étape de révision finale. Apple Pay et les cartes enregistrées pré-remplissent la surface de paiement ; l'autocomplétion d'adresse pré-remplit la livraison.

L'inscription est conçue pour être sans friction — un parent avec un enfant en bas âge n'a aucune patience pour une intégration multi-écrans. La sélection du magasin au premier lancement est géolocalisée avec une option de substitution manuelle ; les lancements suivants reviennent par défaut au dernier magasin sélectionné. Les notifications push pour les promotions, le statut des commandes et les signaux de disponibilité en retrait fonctionnent via le service Apple Push Notification avec un consentement explicite lors de la première autorisation. La surface iOS est livrée dans le cadre de notre pratique de développement d'applications mobiles et partage son système de design avec le client Android via une spécification de design-tokens partagée plutôt qu'une base de code commune.

Localisateur de magasins Malish — client Android natif Kotlin avec catalogue multi-magasins couvrant les Pays-Bas, l'Allemagne, l'Irlande et les régions Est des États-Unis

Build Android — Kotlin, catalogue multi-magasins, tableau de bord commandes

Le client Android est développé en Kotlin avec Jetpack Compose pour la couche UI et le même catalogue propulsé par ElasticSearch que consomme le client iOS. Le catalogue calcule la disponibilité par magasin plutôt qu'un chiffre unique pour toute la chaîne, de sorte qu'un acheteur qui retire en magasin voit le stock de ce magasin, et qu'un acheteur en livraison voit le stock du magasin d'exécution le plus proche. L'adéquation multi-magasins était la contrainte de conception dominante — une chaîne de produits pour enfants dont les magasins portent des assortiments qui se chevauchent sans être identiques ne peut pas survivre à un chiffre de stock unique pour toute la chaîne qui trompe l'acheteur dans un sens ou dans l'autre.

Derrière le catalogue, le moteur de workflow de commandes sur le backend Symfony gère les transitions d'état — passée, préparée, prête, expédiée, livrée — avec des événements webhook vers les terminaux du personnel des magasins physiques et des notifications push vers l'acheteur. Google Play Billing gère les achats intégrés ; l'intégration de l'API du prestataire de livraison prend en charge la passation au livreur afin que la chaîne n'ait pas à coordonner les coursiers manuellement. La même équipe d'ingénierie assure iOS et Android en parallèle dans le cadre de notre pratique d'ingénierie iOS et Android, et le panneau d'administration React — une surface séparée mais co-conçue — réside dans le même déploiement Symfony pour l'équipe opérationnelle.

Paiement Malish — posture de confidentialité et registre de consentement pour le RGPD et le CCPA auprès des audiences retail américaines et européennes

Posture de confidentialité, synchronisation bidirectionnelle des stocks et journaux prêts à l'audit

La posture de confidentialité de Malish était une décision d'architecture avant d'être une bannière. Les données personnelles sur les clients mobiles sont limitées à ce qui est nécessaire pour le paiement, la livraison et le réachat ; le modèle de données encode des fenêtres de conservation par entité, de sorte qu'un enregistrement de commande livrée est purgé selon un calendrier plutôt que de s'accumuler indéfiniment. Les données des enfants ne sont intentionnellement pas collectées — l'acheteur est le parent, le catalogue concerne des produits pour enfants, mais l'application ne sollicite aucune information identifiant les enfants au-delà d'un filtre générique de tranche d'âge sur le catalogue.

La synchronisation bidirectionnelle des stocks est la colonne vertébrale opérationnelle. Chaque magasin physique dispose d'un connecteur typé qui émet des mises à jour webhook lors des changements de stock — ventes, réapprovisionnements, corrections manuelles — et le backend Symfony ingère, réconcilie et propage vers le catalogue mobile. Le journal de réconciliation est exposé dans le panneau d'administration React afin qu'un opérateur puisse résoudre une divergence en quelques minutes plutôt que de réconcilier deux systèmes manuellement. Les journaux d'accès sont structurés et rotatifs ; chaque modification du catalogue, chaque transition d'état de commande et chaque décision de consentement est enregistrée dans une piste d'audit immuable. La posture est conçue pour s'aligner sur les obligations du RGPD pour les utilisateurs de l'Union européenne et sur les obligations du CCPA / CPRA pour les utilisateurs en Californie et dans l'ensemble des États-Unis.

Posture de conformité : Conforme RGPD · prêt ISO 27001 · SOC 2 Type II en cours · compatible HIPAA · CCPA reconnu.

Méthodologie de livraison

Un build en cinq phases qui a conduit Malish d'une chaîne retail exclusivement physique à une marketplace native iOS + Android avec synchronisation des stocks multi-magasins et livraison intégrée.

Phase 1

Découverte & modèle de données

Audit de l'opération hors ligne, modèle d'inventaire par magasin, parcours client pour les parents aux États-Unis et en UE, cadrage RGPD et CCPA, planification de la soumission App Store et Google Play.

Phase 2

Backend Symfony & catalogue

Squelette Symfony, REST API typée, catalogue ElasticSearch, modèle de disponibilité par magasin, moteur de workflow de commandes, cache Redis, squelette de synchronisation bidirectionnelle des stocks.

Phase 3

Builds iOS + Android natifs

Client iOS Swift et client Android Kotlin développés en parallèle, UX catalogue intelligent, paiement en deux taps, notifications push, intégration Apple Pay et Google Play Billing.

Phase 4

Panneau admin & livraison

Panneau d'administration React avec contrôle d'accès par rôle, tableau de bord commandes, intégration API prestataire de livraison, journal de réconciliation, durcissement prêt pour l'audit, échafaudage de préparation tierce.

Phase 5

Lancement & croissance

Soumission App Store + Google Play sur les storefronts américains et européens, déploiement des connecteurs d'inventaire dans les magasins physiques, intégration de l'équipe opérationnelle, tableaux de bord analytiques.

Workflow commandes, intégration livraison et le panneau admin

Le workflow de commandes de Malish est la partie du build qui se capitalise opérationnellement. Le backend Symfony héberge un moteur de workflow qui fait progresser les commandes à travers les états passée, préparée, prête, expédiée et livrée, avec des garde-fous de transition explicites et une diffusion webhook vers les terminaux du personnel des magasins physiques et le canal push de l'acheteur. L'intégration de l'API du prestataire de livraison assure la passation au livreur : lorsqu'une commande entre dans l'état « prête », le backend demande un livreur au prestataire intégré, transmet le payload d'adresse et écoute les mises à jour de statut qui se propagent vers l'acheteur en quasi-temps réel. Les flux paiement à la livraison en espèces et par carte sont pris en charge aux côtés du paiement intégré pour les profils d'acheteurs où ce choix reste pertinent. Le panneau d'administration React encapsule le workflow avec un modèle de contrôle d'accès par rôle — associé de magasin, responsable de magasin, opérations centrales, finance — et une piste d'audit qui survit aux changements d'équipe. La gestion flexible des produits et des catégories permet à l'équipe métier d'ajouter une marque, une catégorie, une tranche d'âge ou une collection saisonnière sans faire appel à un développeur ; la même surface d'administration porte les campagnes promotionnelles, la programmation des bannières et la vue acheteur de type CRM que l'équipe opérationnelle utilise pour les actions de réachat. L'ajout d'un nouveau magasin à la chaîne représente une modification de configuration d'une page dans ce même panneau d'administration : une ligne, un connecteur d'inventaire, un polygone de zone de livraison, et le magasin apparaît dans le catalogue multi-magasins sans déploiement.

Lancement aux États-Unis et dans l’Union européenne

Malish a été lancé sur l'App Store d'Apple et Google Play avec des storefronts actifs aux États-Unis et dans l'Union européenne pour les chaînes retail qui s'étendent en ligne. La même architecture sert une chaîne de produits pour enfants multi-magasins en Californie, New York, Texas, Floride ou Washington aux États-Unis, et aux Pays-Bas, en Allemagne, en France, en Irlande ou en Suède dans l'UE, sans dupliquer la base de code par région. Les flux de consentement sont adaptés par région au niveau du client : les acheteurs de l'UE et de l'EEE reçoivent un écran de consentement granulaire de type RGPD avec des interrupteurs séparés pour toute analytique produit optionnelle ; les acheteurs de Californie reçoivent une divulgation de type CCPA « Ne pas vendre ou partager mes informations personnelles » dans le même flux. Les pratiques de traitement des données sont alignées sur le RGPD pour les utilisateurs européens et sur le patchwork de confidentialité des États américains — CCPA / CPRA (Californie), VCDPA (Virginie), CPA (Colorado), CTDPA (Connecticut), UCPA (Utah), TDPSA (Texas) et Oregon CPA. Étant donné que le modèle de données minimise les données personnelles par conception et ne sollicite explicitement aucune information identifiant les enfants, la conformité régionale se réduit à une divulgation honnête et un flux de consentement clair plutôt qu'à une ségrégation des données par juridiction.

L'infrastructure a été déployée en parallèle dans les régions UE et États-Unis — Pays-Bas, Allemagne, France, Suède et Irlande pour la couverture UE ; Est et Ouest des États-Unis pour l'Amérique du Nord — afin que les applications servent les deux marchés avec une faible latence dès le lancement. La classification d'âge App Store et la classification de contenu Google Play ont toutes deux été calibrées pour le jeu de fonctionnalités retail de produits pour enfants, et la politique de confidentialité intégrée a été rédigée pour documenter l'architecture ci-dessus, en citant directement les obligations RGPD et les obligations CCPA californien. L'équipe d'ingénierie derrière ce build est répartie sur le fuseau CET et travaille en journée CET avec un chevauchement côte Est des États-Unis (9h–13h ET) pour les stand-ups, la chorégraphie des révisions de stores et la réponse aux incidents — le fuseau horaire qui permet à un opérateur retail américain et à une équipe d'ingénierie européenne de partager quatre heures de chevauchement en direct chaque jour. La marketplace sert les audiences américaines et européennes comme une surface unifiée.

Stack technique et feuille de route

Swift Kotlin PHP Symfony React PostgreSQL Redis REST API Webhook ingestion Inventory sync Order workflow engine Push notifications Apple StoreKit Google Play Billing Image pipeline ElasticSearch product search Admin role-based access Delivery-provider API

La feuille de route active de développement logiciel sur mesure pour Malish comprend un sous-système de fidélité avec une hiérarchisation par magasin et un portefeuille de récompenses accessible aux parents, une surface de localisation de magasins avec les horaires en temps réel et la réservation de créneaux de retrait, un modèle de zone de livraison élargi pour l'exécution inter-magasins et un niveau grossiste pour les clients B2B dans le segment américain et européen de la petite enfance. Une surface web complémentaire est prévue comme extension de la deuxième phase — partageant le backend Symfony et la spécification de design-tokens avec les clients natifs — pour capter le trafic de recherche sur ordinateur sans obliger les parents à quitter le mobile. Les plans d'infrastructure incluent une automatisation plus poussée du journal de réconciliation, un système d'alerte interne pour les désalignements de stocks et une future évaluation d'aptitude indépendante intégrée à la feuille de route cloud & DevOps.

Créer une marketplace similaire — parlons-en

Si vous planifiez une marketplace native iOS + Android, une chaîne retail multi-magasins qui passe en ligne, ou tout produit de consommation où la synchronisation des stocks et la finition de la plateforme doivent s'articuler ensemble pour des audiences aux États-Unis et en UE, nous avons livré ce stack de bout en bout et pouvons réduire significativement le délai de build. L'équipe d'ingénierie derrière ce projet est au sein d'YuSMP Group. Nous travaillons à prix fixe pour les MVP bien cadrés et sur des équipes de développement dédiées pour la livraison continue, avec une journée de travail CET et une fenêtre garantie de chevauchement côte Est des États-Unis (9h–13h ET) pour les stand-ups, démonstrations et réponses aux incidents.

Réserver un appel découverte Voir les services de développement mobile

Foire aux questions

Quel est le coût de développement d'une marketplace locale native iOS + Android ?

Une marketplace locale native iOS + Android avec un backend Symfony, un catalogue ElasticSearch, un paiement en deux taps et un panneau d'administration de base coûte généralement entre 140 000 € et 310 000 € pour un MVP. L'ajout d'une synchronisation bidirectionnelle des stocks avec les magasins physiques, de l'intégration d'un service de livraison, d'un accès admin par rôle, d'une recherche flexible propulsée par ElasticSearch et d'une console d'administration de niveau CRM durcie porte un produit complet entre 360 000 € et 680 000 €. Les principaux postes de coût sont la couche de synchronisation des stocks, la logique de catalogue multi-magasins et la chorégraphie de soumission et de révision sur l'App Store et Google Play.

Pourquoi utiliser iOS + Android natif plutôt que Flutter ou une plateforme marketplace SaaS ?

Swift natif sur iOS et Kotlin sur Android offrent l'expérience idiomatique à la plateforme qu'un acheteur retail ressent dès les trois premiers taps — retours haptiques précis, navigation native au système, accessibilité prévisible. Flutter est une alternative légitime lorsque la marque accepte explicitement une légère interface en décalage et privilégie la vélocité d'une base de code unique. Les plateformes marketplace SaaS enferment la marque dans des règles d'inventaire définies par le fournisseur et des contraintes d'intégration — fatal pour une chaîne dont l'avantage concurrentiel repose sur le réseau de magasins physiques et son propre assortiment. Pour Malish, le natif l'a emporté sur la finition retail et la flexibilité d'intégration.

Comment maintenir l'alignement des stocks en ligne et hors ligne pour une chaîne multi-magasins ?

Une synchronisation bidirectionnelle des stocks robuste est une décision d'architecture. Chaque magasin physique dispose d'un connecteur typé qui émet des mises à jour webhook lors des changements de stock ; le backend Symfony ingère, réconcilie et propage vers le catalogue mobile. Le catalogue calcule la disponibilité par magasin plutôt qu'un chiffre unique pour toute la chaîne, de sorte qu'un acheteur qui retire en magasin voit le stock de ce magasin. Le panneau d'administration expose le journal de réconciliation afin qu'un opérateur puisse résoudre une divergence en quelques minutes plutôt que de réconcilier deux systèmes manuellement.

À quoi ressemble un tunnel de paiement en deux taps dans une application marketplace ?

Un tunnel de paiement en deux taps réduit les décisions de l'acheteur à la surface minimale crédible : le premier tap confirme le panier avec l'adresse de livraison par défaut et le moyen de paiement enregistré ; le deuxième tap passe la commande avec une étape de révision finale. Les cartes enregistrées, Apple Pay et Google Play Billing pré-remplissent la surface de paiement ; l'autocomplétion d'adresse pré-remplit la surface de livraison ; et un interrupteur de substitution permet à l'acheteur de pré-autoriser un échange pour un article en rupture de stock. Ce flux est la référence absolue pour les applications retail à réachat répété.

Combien de temps faut-il pour livrer une marketplace locale native iOS + Android ?

Un MVP ciblé avec des clients natifs Swift et Kotlin, un backend Symfony, une recherche ElasticSearch, un paiement en deux taps et des outils d'administration de base prend généralement 14 à 22 semaines. L'ajout d'une synchronisation bidirectionnelle des stocks avec les magasins physiques, de l'intégration d'un service de livraison, d'un accès admin par rôle, d'un tableau de bord analytique et d'un sous-système de fidélité ajoute 8 à 14 semaines. La phase de durcissement prête pour l'audit — soumission App Store et Google Play, passation KYC pour les paiements, révision d'aptitude tierce — devrait être budgétée à 3 à 5 semaines de travail dédié.

Partager cette étude

LinkedIn X

Planifier un projet similaire

Réserver un appel découverte

Demander une proposition

Partagez quelques détails et un consultant senior vous répondra dans un délai d’un jour ouvrable.

Préférez-vous discuter directement ? ☎ Call +374 44 871 811 ✉ sales@yusmpgroup.com