← Tous les projets
commerce · mobile

MamaShop

Une app mobile de gestion pour petits commerces d'Afrique de l'Ouest — pensée pour fonctionner même sans réseau.

9:41▮▮ 100%
MamaShop
A
Awa M.
Gérante · En direct
Aujourd'hui
84k
Ventes F
12k
Crédit F
2
Critique
23%
Marge
Ventes — 7 jours
Alertes actives
!
Tomate — stock critique : 3 cuvettes
Seuil : 5 · Commander maintenant
$
45 000 F d'impayés en cours
Vérifier les clients avec dettes
Top produits aujourd'hui
🍅
Tomate
9 cuvettes vendues
31 500 F
🌶️
Piment
6 paniers vendus
18 000 F
🧅
Oignon
4 sacs vendus
14 000 F
+ Vente
rôleDéveloppeur full-stack (mobile)
année2026
stack
React NativeExpoTypeScriptSupabasePostgreSQLAsyncStorage

Contexte

Application mobile (React Native / Expo) de gestion de commerce, avec trois espaces de travail isolés selon le rôle : Gérant, Agent de terrain et Diaspora.

Le problème

Les petits commerces suivent leur stock, leurs ventes et leurs crédits clients de tête ou sur papier. La connexion internet est instable sur le terrain, et plusieurs personnes (le gérant, l'agent qui vend, le proche à l'étranger qui finance) ont besoin de vues très différentes sur la même activité.

L'approche

  • Une seule app, trois espaces séparés par rôle (groupes de routes Expo Router + tiroir animé persistant).
  • Backend Supabase (PostgreSQL, Realtime, Auth) avec une couche services unique — aucun appel base dans les composants.
  • Conception offline-first : l'app reste utilisable sans réseau et se synchronise à la reconnexion.

Décisions techniques

Offline-first par file d'attente

Les actions (vente, ajout de stock…) sont écrites localement dans une file AsyncStorage, puis rejouées vers Supabase à la reconnexion. La détection réseau passe par NetInfo, jamais par navigator.onLine.

Écritures atomiques côté base

Les opérations sensibles (create_sale, increment_stock, apply_credit_payment) sont des fonctions RPC PostgreSQL. Le stock reste cohérent même en cas de double envoi ou de sync différée.

Architecture par rôles

Chaque rôle a son propre groupe de routes et ses écrans ; les composants partagés restent agnostiques du rôle. TypeScript strict et types partagés centralisés.

Résultat

  • Le gérant suit finances, marges et historique de ventes en temps réel.
  • Les agents de terrain continuent de vendre et d'enregistrer, même hors-ligne.
  • Base de code typée, testable (jest-expo) et organisée par responsabilités.
← Tous les projetsMe contacter →