Statut : Pré-lancement
FasoCommerce
Une plateforme de gestion pensée pour le téléphone, où chaque commerce ou service active les modules dont son métier a besoin.
- 15modules activables
- 13profils métier
- 207tests backend
- 3rôles d’équipe

Contexte
Au Burkina Faso, beaucoup de commerces et de services gèrent ventes, stock, dettes clients et commandes WhatsApp à la main. Leur réalité : une connexion limitée, le paiement par Mobile Money et des métiers très différents.
Problème
Les logiciels existants supposent une connexion stable, un paiement par carte et un seul type de commerce. Une épicerie, un pressing, un restaurant et un garage ont pourtant des besoins différents.
Objectif
Une plateforme unique, pensée pour le téléphone, qui s’adapte au métier par modules — sans jamais bloquer une vente.
Architecture
Monolithe modulaire : un socle commun (équipe, paiements, clients, notifications) et des modules activables. Le code teste un module, jamais un métier : ajouter un métier revient à ajouter un profil, sans migration.
- InterfaceNext.js 15, React 19, TypeScript. Mobile d’abord, appels API relatifs proxifiés.
- APIFastAPI : routes minces, services partagés, une permission vérifiée par établissement.
- DonnéesPostgreSQL 16, schéma versionné par migrations Alembic.
- TâchesRedis et Celery pour les notifications et les traitements asynchrones.
- FichiersMinIO pour les images des produits.
- ProductionDocker Compose et Caddy (HTTPS automatique, en-têtes de sécurité).
Technologies
- Next.js
- React
- TypeScript
- Tailwind CSS
- zustand
- zod
- Python
- FastAPI
- SQLAlchemy 2
- Alembic
- JWT
- PostgreSQL
- Redis
- Celery
- MinIO
- Docker
- Caddy
- pytest
- Playwright
- GitHub Actions
Fonctionnalités
- Boutique en ligne et commandes par WhatsApp
- Caisse, y compris hors ligne, synchronisée au retour du réseau
- Stock, vente au carton ou à la pièce
- Carnet de dettes (vente à crédit)
- Promotions datées et carte de fidélité
- Tickets pour imprimante thermique 58 / 80 mm
- Paiement Mobile Money direct, CinetPay en option
- Modules métier : restaurant, auto-école, garage, pressing, rendez-vous
- Équipe, rôles personnalisés et journal d’activité
- Factures, avoirs, fournisseurs, achats, dépenses, export Excel
- Abonnements avec mode limité qui ne bloque jamais la caisse
Captures

Boutique en ligne 
Caisse 
Vente hors ligne 
Ticket thermique 
Module restaurant 
Module garage
Captures issues des tests automatisés, avec des données de démonstration.
Décisions techniques
Des modules, pas des métiers
Un profil (charcuterie, pressing…) n’est qu’un point de départ qui active des modules. Le commerçant peut ensuite les modifier, et un nouveau métier ne demande aucune migration.
Des permissions, pas des rôles
Chaque endpoint demande une permission précise sur un établissement. Les rôles d’équipe (gérant, caissier…) ne sont que des ensembles de permissions.
La vente n’est jamais bloquée
Réseau coupé ou abonnement impayé : la caisse continue. Une vente hors ligne est enregistrée avec son heure réelle au retour de la connexion.
Des jetons hors de portée du JavaScript
Jetons en cookies httpOnly, jamais dans le localStorage, et un en-tête anti-CSRF exigé pour les requêtes sensibles.
Difficultés
Une connexion limitée
Interface légère, pensée pour le téléphone, et caisse capable de fonctionner sans réseau.
Protéger la connexion
Tentatives limitées par numéro et par adresse IP réelle, fournie par le proxy et non par le client.
La conformité dès la conception
Pages légales, registre des traitements, aucun traceur sans consentement, et des tests d’accessibilité automatisés (WCAG 2.1 AA).
Résultat
Pré-lancement : 15 modules, 207 tests backend automatisés, tests end-to-end et d’accessibilité, intégration continue. La grille d’abonnement est définie et reste à valider auprès de commerçants.
Évolution possible
- Tests terrain avec des commerçants
- Application mobile Flutter sur la même API
- Assistant de commande sur WhatsApp
- Nouveaux profils métier
Code et démo
Dépôt privé — démonstration sur demande