MadBeauty — Marketplace de réservation beauté afro
App iOS, Android et Web qui relie clientes et prestataires : découverte, Reels, réservation, acompte, messagerie temps réel et abonnement Pro.
Une marketplace mobile + web avec paiements
01 — Contexte
Contexte
MadBeauty est une marketplace de production, pas un prototype : trois espaces (cliente, prestataire, admin) dans une même app Flutter, déployée iOS, Android et Flutter Web (Netlify, https://madbeauty.pro). Niche : coiffure afro (tresses, locks, cheveux crépus et bouclés), manucure, maquillage, pédicure. Positionnement : trouver un prestataire, réserver un créneau, payer, discuter, fidéliser. Rôle tenu en solo : cadrage produit, UX, architecture Flutter, backend Supabase, paiements Stripe, notifications et préparation stores.
02 — Problème
Problème
Les prestataires spécialisés (tresses, locks, etc.) gèrent trop souvent les rendez-vous par Instagram ou WhatsApp : pas d'agenda fiable, pas d'acompte, pas de vitrine pro, beaucoup de no-shows. Les clientes peinent à trouver quelqu'un de disponible, au bon style, au bon endroit, avec avis et photos réelles.
03 — Solution
Solution
Une seule application, deux rôles métier plus un espace admin : découverte (liste, filtres, carte, fiche, feed Reels), réservation (créneaux, statuts, acomptes, litiges), messagerie temps réel liée aux RDV et chat devis, fidélisation (points, VIP salon, parrainage), et monétisation (frais cliente, abonnement prestataire, Stripe Connect). Version 1.0.0 : parcours client et prestataire crédibles, paiements Stripe branchés.
04 — Résultats
Résultats
- Marketplace 2 faces + admin, sur iOS, Android et Web, avec parcours d'achat et d'encaissement réels
- Règles de pricing partagées entre l'app et les Edge Functions (acompte, frais, remises empilées)
- Stripe Connect Express pour les acomptes, Stripe Billing pour l'abonnement Pro prestataire
- Web en production sur madbeauty.pro ; app 1.0.0 aboutie, stores (Apple Organization / Play) encore côté ops
05 — Fonctionnalités
Fonctionnalités
Cliente
- Auth e-mail, Google, Sign in with Apple (iOS), biométrie optionnelle, suppression de compte
- Découverte : liste, filtres, carte (géoloc), fiche prestataire partageable
- Feed Reels (photos / vidéos) : likes, commentaires, favoris, galerie, enregistrement au profil
- Réservation : créneaux, statuts, export calendrier (.ics et liens Google / Apple)
- Acompte 20 % via Stripe Connect, ou 100 % sur place ; 2 premières résa sans frais, puis 1 € dans l'app
- Messagerie Realtime liée aux RDV, chat devis, rendus avant/après, avis, litiges, favoris et wishlist
- Parrainage (−10 % une fois), fidélité (acompte +2 pts, 200 pts = séance offerte max 50 €), VIP salon (−5 % dès 3 RDV terminés chez le même presta)
- Rappels rebook 4 / 6 semaines, aftercare push J+1, dark mode, UI mobile et web
Prestataire
- Hub profil et onboarding, catalogue de services, horaires, publication Reels
- Agenda : accepter, refuser ou terminer une réservation
- Dashboard et analytics
- Stripe Connect Express : onboarding et encaissement des acomptes
- Abonnement Pro : 18 €/mois ou 180 €/an (1 service) ; 24,99 €/mois ou 250 €/an (2 services et plus)
Admin
- Médiation des litiges, modération, catalogues — côté app Flutter et web-admin
06 — Modèle économique
Modèle économique
- Cliente : 2 premières réservations sans frais plateforme ; ensuite 1 € par résa (prélevé dans l'app si confirmation avec paiement)
- Prestation : acompte 20 % en ligne (Connect) + 80 % sur place, ou 100 % sur place
- Prestataire : abonnement Pro pour publier et rester visible
- Remises appliquées dans cet ordre : parrainage → VIP salon → fidélité
07 — Stack & architecture
Stack & architecture
Frontend Flutter 3 / Dart 3.8+, Riverpod 3, go_router (gardes d'auth, deep links, shells client / prestataire / admin), Freezed et json_serializable. Thème AppArea (vert cliente / bleu prestataire), dark mode, layout unique du téléphone au desktop (rail dès 600 px, contenu max 1280 px). Backend Supabase : PostgreSQL, Auth, Storage, Realtime, Edge Functions Deno/TypeScript, RLS et migrations SQL. Paiements : Stripe Connect Express (PaymentIntent, webhooks, idempotence) et Stripe Billing / Checkout pour l'abonnement prestataire — Stripe prioritaire sur le Web en V1 native pour rester hors IAP Apple/Google. Push FCM et notifications locales. Tests unitaires sur l'auth, le domaine et les providers clés.
Presentation
Écrans et widgets par feature. Trio screens / widgets / providers. Pas de logique métier lourde dans les widgets.
Application
Controllers et notifiers Riverpod (AsyncNotifier, Notifier, StreamProvider, autoDispose).
Domain
Modèles Freezed et règles pures : pricing, réservation, remises. Les mêmes règles tournent côté app et Edge Functions.
Infrastructure
Services Supabase, Stripe, FCM et cache. Secrets hors du client Flutter. RLS sur les tables métier.
08 — Défis
Défis
- Marketplace 2 faces + admin dans une seule codebase Flutter (mobile et web)
- Pricing complexe (acompte, 1 € dès la 3e résa, remises empilées) aligné app et Edge Functions
- Stripe Connect Express (onboarding, PaymentIntent, webhooks, idempotence) et abonnements Billing
- Temps réel (chat, statuts de résa) avec Row Level Security
- UX production : loading / empty / error / retry, timeout réseau 10 s, cache images, saisie conservée
- Contraintes App Store / Play : paiements in-app vs Stripe Web
- Responsive unique téléphone, tablette et desktop web
- Push métier : réservations, messages, rebook, aftercare planifiés
09 — Livrables
Livrables
- App iOS, Android et Web
- Backend Supabase (schéma, RLS, Edge Functions, Storage)
- Intégration Stripe (Connect, abonnements, webhooks)
- Notifications push FCM
- Espace admin
- Documentation produit, architecture, paiements et stores
10 — Statut
Statut
Version 1.0.0 : application aboutie. Le web est en ligne sur madbeauty.pro. Clés live, comptes Apple Organization / Play et conformité store restent côté ops. Boutique produits et packs en roadmap.
Une question sur ce projet ?
Posez une question précise (technique, choix d'architecture, résultats...) et obtenez une réponse générée à partir du contenu de ce projet.
