Shuba est une marketplace multi-vendeurs construite avec Django, où chaque vendeur possède sa propre boutique (organisation), et où chaque paiement transite par un mécanisme de séquestre qui protège acheteurs et vendeurs.
Vue d'ensemble des composants
Shuba repose sur quatre briques principales qui travaillent ensemble.
Django est le cœur de l'application. Il reçoit les requêtes des visiteurs, applique les règles métier et renvoie les pages HTML. Tout le code Python de l'application vit ici.
Supabase joue deux rôles distincts. D'un côté, il héberge la base de données PostgreSQL qui contient toutes les données structurées (utilisateurs, commandes, produits). De l'autre, il fournit un espace de stockage pour les fichiers (photos de produits, avatars, logos de boutiques).
Render est le serveur d'hébergement. Il exécute l'application Django et la rend accessible sur Internet. Render s'occupe aussi du certificat HTTPS, ce qui signifie que toute communication est chiffrée.
GitHub héberge le code source et déclenche automatiquement les mises en production à chaque fois qu'une nouvelle version du code est poussée sur la branche principale.
Visiteur │ │ (requête HTTPS) ▼ Render (héberge Django) │ │ │ │ (lecture/écriture données) │ ▼ │ Supabase PostgreSQL │ (base de données) │ │ (upload/lecture fichiers) ▼ Supabase Storage
Le choix du multi-tenant par organisation
Shuba est une marketplace, c'est-à-dire qu'elle accueille plusieurs vendeurs indépendants sur la même plateforme. Cette architecture s'appelle « multi-tenant ».
Concrètement, cela signifie que chaque boutique (organisation) a ses propres catégories de produits, ses propres membres d'équipe, et son propre quota selon le plan souscrit. Un vendeur ne voit jamais les données des autres vendeurs.
Cette isolation est assurée par une règle simple : chaque produit, chaque catégorie, et chaque membre est lié à une organisation via une clé étrangère. Django filtre automatiquement les données selon l'organisation de l'utilisateur connecté.
Les rôles et permissions
Il existe deux niveaux de rôles dans Shuba.
Niveau plateforme (sur toute la marketplace) :
- Administrateur : accès total, peut approuver les vendeurs
- Vendeur : peut créer une boutique et vendre
- Client : peut acheter, peut demander à devenir vendeur
Niveau boutique (au sein d'une organisation) :
- Propriétaire : tous les droits, y compris supprimer la boutique
- Administrateur : gère les membres et les paramètres
- Manager : gère les produits
- Analyste : consulte les rapports
- Staff : accès lecture seule
Le mécanisme de séquestre
Le séquestre est la fonctionnalité centrale de sécurité financière de Shuba. Son rôle est de protéger l'acheteur : les fonds ne sont jamais versés directement au vendeur.
Voici comment fonctionne le cycle complet d'un paiement :
- L'acheteur paye. Les fonds sont « bloqués » (statut PENDING_ESCROW). Ni l'acheteur ni le vendeur n'y a accès.
- Le vendeur reçoit la commande, prépare et expédie le produit.
- L'acheteur confirme la réception en saisissant son mot de passe (confirmation de sécurité).
- Les fonds sont libérés : 95% vont au vendeur, 5% restent à la plateforme (commission).
Si le vendeur n'expédie pas dans les 48 heures, l'acheteur peut demander un remboursement. Si un litige est ouvert, les fonds restent gelés jusqu'à résolution par l'équipe Shuba.