← Hub Phases · 01 Wireframes 02 Design System 03 Prototype 04 Documentation
Phase 04 · Documentation technique

Du design
au développement.

Le pont entre le prototype abouti et la mise en production. Cahier des charges, architecture, modèle de données, API, sécurité et déploiement, réunis en un document de référence.

Version · 1.0 Statut · Prêt développement Cible · Équipe technique Date · Juin MMXXVI
01

Cahier des charges

Ce que la plateforme doit faire, pour qui, et avec quelles contraintes. Le contrat fonctionnel.

Objectif

Frank'line est une maison de polos et de maille. La plateforme doit permettre de vendre en ligne (boutique e-commerce), de raconter la marque (magazine éditorial), et de gérer l'activité (back-office). Le polo est le cœur du catalogue ; les compléments (L'Atelier) et la Maison sont secondaires.

Périmètre fonctionnel

ModuleFonctions attenduesPriorité
CatalogueCollections, fiches produit, filtres, recherche, variantes (couleur/taille)Indispensable
Panier & commandePanier persistant, checkout, paiement, confirmation, suiviIndispensable
Compte clientInscription, commandes, traçabilité, factures, favoris, adresses, fidélitéIndispensable
PersonnalisationMonogrammage (1 à 3 initiales), coffret signatureImportante
MagazineJournal, articles, catégoriesImportante
ServicesCarte-cadeau, rendez-vous sur-mesureSouhaitable
Back-officeTableau de bord, commandes, stock/appro, clients, contenu, stats, équipeIndispensable
RéseauxWhatsApp, Instagram, Facebook, TikTokSouhaitable

Exigences non fonctionnelles

  • Performance · LCP < 2,5 s, CLS < 0,1, images < 120 Ko
  • Accessibilité · WCAG 2.1 niveau AA, navigation clavier, focus visible
  • Responsive · mobile d'abord, 4 breakpoints (≤720 / ≤1000 / ≤1440 / +)
  • Sécurité · paiement 3D Secure, données chiffrées, RGPD
  • Marque · palette Heritage, zéro vert, zéro cadratin, apostrophe rouge, inspiration Tommy
  • International · FR primaire + EN, multi-devises (EUR d'abord)
02

Stack technique

Recommandation de pile technologique. Le front actuel est statique : il sert de référence visuelle exacte à reproduire dans le framework choisi.

CoucheRecommandationAlternative
Front boutiqueNext.js (React) · SSR/SSG pour le SEONuxt (Vue), Astro
StyleReprendre frankline.css · tokens en CSS variablesTailwind mappé sur les tokens
Back-officeApp React séparée (sous-domaine admin.)Admin intégré protégé
APINode.js (NestJS/Express) REST · ou GraphQLDjango REST, Laravel
Base de donnéesPostgreSQLMySQL
PaiementStripe (carte, Apple Pay, 4×)Adyen, Mollie
MédiasCDN + stockage objet (S3)Cloudinary
HébergementConteneurs (Docker) · CI/CD GitLabVercel + base managée
Le prototype statique (phase 03) est la source de vérité visuelle : chaque page HTML correspond à un écran à reproduire à l'identique. Le frankline.css contient déjà tous les tokens et composants.
03

Architecture générale

Vue en couches. Le client et l'admin sont deux applications distinctes consommant la même API.

Clients
BoutiqueNext.js · public · SEO
Back-officeReact · admin. · authentifié
Mobile / PWAresponsive · installable
▼ HTTPS / REST · JSON
Services
API Gatewayauth · rate-limit · routage
Métier
Catalogueproduits · stock
Commandespanier · checkout
Clientscomptes · fidélité
Contenujournal · pages
Données
PostgreSQLdonnées métier
Objet / S3images · médias
CacheRedis · sessions
▼ webhooks / API externes
Tiers
Stripepaiement
Transporteurlivraison · suivi
E-mailtransactionnel
RéseauxWhatsApp · IG · Meta
04

Base de données

Modèle relationnel (schéma conceptuel). clé primaire · clé étrangère.

· product
  • iduuid
  • namevarchar
  • slugvarchar
  • categoryenum
  • price_centsint
  • descriptiontext
  • statusenum
· variant
  • iduuid
  • product_idfk
  • colorvarchar
  • sizevarchar
  • skuvarchar
  • stock_qtyint
· customer
  • iduuid
  • emailvarchar
  • first_namevarchar
  • last_namevarchar
  • loyalty_tierenum
  • created_atts
· order
  • iduuid
  • refvarchar
  • customer_idfk
  • statusenum
  • total_centsint
  • shippingjsonb
  • created_atts
· order_item
  • iduuid
  • order_idfk
  • variant_idfk
  • qtyint
  • unit_centsint
  • monogramvarchar
· address
  • iduuid
  • customer_idfk
  • line1 / line2varchar
  • zip / cityvarchar
  • countryvarchar
  • is_defaultbool
· article (journal)
  • iduuid
  • title / slugvarchar
  • categoryenum
  • bodyrichtext
  • statusenum
  • published_atts
· user (admin)
  • iduuid
  • emailvarchar
  • roleenum
  • password_hashvarchar
  • last_logints
· wishlist
  • iduuid
  • customer_idfk
  • variant_idfk
  • added_atts
Relations clés
  • product 1 ··· N variant (un polo a plusieurs couleurs/tailles)
  • customer 1 ··· N order 1 ··· N order_item N ··· 1 variant
  • customer 1 ··· N address et 1 ··· N wishlist
  • user (admin) isolé des customer · table et authentification séparées
05

API · endpoints

REST, réponses JSON. Préfixe /api/v1. Authentification par jeton (Bearer) pour les routes privées.

Catalogue · public
MéthodeCheminRôle
GET/products?category=&sort=&page=Liste filtrée & paginée
GET/products/:slugFiche produit + variantes
GET/search?q=Recherche
GET/articles · /articles/:slugMagazine
Panier & commande
MéthodeCheminRôle
GET/cartPanier courant (session)
POST/cart/itemsAjouter (variant + qty + monogramme)
PUT/cart/items/:idModifier quantité
DEL/cart/items/:idRetirer
POST/checkoutCréer commande + intent paiement
POST/webhooks/stripeConfirmation paiement (signé)
Compte client · privé
MéthodeCheminRôle
POST/auth/register · /auth/loginCompte client
GET/me/orders · /me/orders/:refCommandes + traçabilité
GET/me/orders/:ref/invoiceFacture PDF
GET/me/wishlistFavoris
PUT/me/addresses/:idCarnet d'adresses
Back-office · rôle admin/éditeur
MéthodeCheminRôle
GET/admin/statsKPI, ventes, acquisition
PUT/admin/orders/:id/statusAvancer une commande
POST/admin/productsCréer produit + variantes
PUT/admin/stock/:skuAjuster le stock
POST/admin/team/inviteInviter un collaborateur
Exemple de réponse · GET /products/polo-colette
// 200 OK
{
  "id": "a3f…",
  "name": "Polo Colette",
  "category": "femme",
  "price_cents": 8900,
  "variants": [
    { "sku": "COL-BLU-S", "color": "Blush", "size": "S", "stock": 4 },
    { "sku": "COL-BLU-M", "color": "Blush", "size": "M", "stock": 11 }
  ],
  "monogram_available": true
}
06

Paiement · Afrique & International

Frank'line se déploie en Côte d'Ivoire, en Afrique de l'Ouest puis à l'international. Le système de paiement est donc multi-canal : mobile money local, cartes, et agrégateurs régionaux, branchés derrière une couche d'abstraction unique.

Couche d'abstraction paiement

L'application ne parle jamais directement à un opérateur. Elle passe par un service Paiement interne qui expose une interface unique (createPayment, confirmPayment, refund) et route vers le bon fournisseur selon le pays, la devise et le moyen choisi. On peut ainsi ajouter/retirer un opérateur sans toucher au checkout.

Checkoutchoix du moyen
Service Paiementabstraction · routage
Agrégateur / PSPCinetPay · Stripe…
OpérateurOrange · Wave · Visa

Mobile money Afrique de l'Ouest

MoyenZoneIntégration
Orange MoneyCI, SN, ML, BF…API Orange / via agrégateur
MTN Mobile MoneyCI, autresMTN MoMo API / agrégateur
Moov MoneyCI, zone UEMOAAPI Moov / agrégateur
WaveCI, SNAPI Wave (paiement & QR)
Carte prépayée / GIM-UEMOAUEMOAVia agrégateur régional

Agrégateurs recommandés

Plutôt que d'intégrer chaque opérateur un par un, on s'appuie sur un agrégateur qui réunit Orange/MTN/Moov/Wave + cartes en une seule API. Choix recommandé selon couverture :

AgrégateurCouvertureMoyens réunis
CinetPayCI & Afrique de l'Ouest/CentraleOrange, MTN, Moov, Wave, Visa/MC
PayDunyaUEMOAMobile money + cartes
PaystackAfrique anglophone + expansionCartes, mobile money, virement
FlutterwavePan-africain + internationalMobile money, cartes, USSD
StripeInternational (Europe, US…)Cartes, Apple/Google Pay, paiement 4×
Stratégie recommandée : un agrégateur africain (CinetPay ou Flutterwave) pour la CI/Afrique + Stripe pour l'international. Le Service Paiement choisit automatiquement selon le pays de livraison et la devise.

International

  • Cartes · Visa, Mastercard, Amex (3D Secure)
  • Wallets · Apple Pay, Google Pay, PayPal
  • Paiement fractionné · 3× / 4× (selon marché)

Devises & tarification

MarchéDeviseFormat
Côte d'Ivoire / UEMOAFranc CFA (XOF)52 000 FCFA · sans décimale
Zone euroEuro (EUR)89 €
InternationalUSD & autresselon localisation
Le prix est stocké en plus petite unité (centime / franc entier) avec le code devise. La conversion d'affichage et la devise de débit sont gérées par le Service Paiement. Le XOF n'a pas de décimale : à prévoir dans le formatage.

Flux mobile money (ex. Orange Money / Wave)

Clientchoisit Orange Money
Saisie n°+ déclenche push USSD
Validationcode PIN sur le mobile
Webhookconfirme · valide commande

Le paiement mobile money est asynchrone : la commande reste en attente de paiement jusqu'au webhook de confirmation. L'écran de checkout affiche un état « en attente de validation sur votre téléphone » avec compte à rebours et reprise possible.

Endpoints paiement
MéthodeCheminRôle
GET/payment/methods?country=CIMoyens disponibles selon pays
POST/payment/intentCréer un paiement (moyen + montant)
GET/payment/:id/statusPolling de l'état (mobile money)
POST/webhooks/payment/:providerConfirmation signée par l'agrégateur
POST/payment/:id/refundRemboursement (admin)
Côté écrans : le checkout du prototype (étape paiement) doit présenter d'abord les moyens locaux (Orange, MTN, Moov, Wave) quand le pays est la CI, puis les cartes ; et l'inverse à l'international. C'est un ajustement à intégrer lors du développement du sélecteur de paiement.
07

Authentification & rôles

Deux mondes séparés : les clients (boutique) et les utilisateurs internes (back-office). Jamais la même table, jamais le même jeton.

RôleAccèsPeut faire
CLIENTBoutiqueCommander, suivre, favoris, compte
ADMINBack-office completTout · produits, stock, équipe, réglages, paiements
ÉDITEURBack-office partielCommandes, stock, produits, contenu · pas l'équipe ni les réglages
LECTUREBack-office lectureVoir commandes & stats · aucune modification
Mécanisme
  • Jetons JWT courte durée + refresh token httpOnly
  • Double authentification (2FA) obligatoire pour ADMIN
  • Journal des accès back-office (qui, quoi, quand)
  • Invitation collaborateur par e-mail avec rôle pré-assigné, expiration 72h
Le back-office est servi sur un sous-domaine dédié (admin.frank-line.com), isolé de la boutique : cookies séparés, politique CORS stricte, jamais exposé au client.
08

Flux métier

Les parcours critiques, étape par étape.

Commande + paiement

Paniervariant + monogramme
Checkoutadresse · livraison
Stripe3D Secure
Webhookconfirme · décrémente stock
Confirmatione-mail + suivi

Cycle de vie d'une commande

confirméeen préparation (atelier, +5j si monogramme) → expédiée (n° suivi transporteur) → en livraisonlivrée. Chaque transition notifie le client et s'affiche dans la traçabilité (côté client) et le back-office (côté admin).

Réapprovisionnement

Quand stock_qty passe sous un seuil défini par variante, une alerte apparaît au tableau de bord et un bon de commande fournisseur peut être généré. La chaîne d'appro (filature → tissage → coupe → broderie → contrôle) est suivie par étapes.

09

Intégrations externes

Services tiers, branchés via API/webhooks depuis le back-office.

ServiceUsageMécanisme
StripePaiement carte, Apple Pay, paiement en 4×SDK + webhooks signés
TransporteurÉtiquettes, numéros de suivi, statutsAPI REST + callback
E-mail transactionnelConfirmation, expédition, réinitialisationAPI (templates)
WhatsApp BusinessMessagerie client, confirmationsCloud API Meta
Instagram ShoppingCatalogue taggable, DM unifiésGraph API Meta
Facebook / MetaBoutique Meta, publicités, MessengerGraph API
TikTok ShopCatalogue, vidéos shoppablesTikTok Business API
Les connexions réseaux se gèrent depuis Admin · Intégrations (toggles déjà maquettés). Chaque canal pousse le catalogue et remonte les messages dans la messagerie unifiée.
10

Services transverses

Les briques techniques partagées par toute la plateforme, au-delà du métier.

ServiceRôleTechno recommandée
RechercheRecherche produit instantanée, filtres, suggestionsMeilisearch / Algolia
Cache & sessionsPanier invité, sessions, file d'attenteRedis
Stockage médiaImages produit, optimisation, CDNS3 + CDN (responsive)
E-mail / SMSTransactionnel (commande, expédition) + SMS mobile moneyAPI e-mail + passerelle SMS locale
File de tâchesBroderie, génération facture PDF, exportsWorker + file (BullMQ)
InternationalisationFR / EN, devises XOF / EUR / USDi18n + table de devises
JournalisationLogs applicatifs, journal d'audit adminLogs centralisés
Le panier doit survivre sans compte (cookie + Redis) puis fusionner avec le compte à la connexion. Les images sont servies en plusieurs tailles via le CDN pour tenir l'objectif de performance mobile en zone à connexion lente (Afrique de l'Ouest).
11

Déploiement CI/CD

Le prototype se déploie déjà en statique via GitLab Pages. En production, le même pipeline build les apps et l'API.

Pipeline cible
# .gitlab-ci.yml (production)
stages: [ lint, test, build, deploy ]

lint:    # eslint + stylelint + prettier
test:    # unitaires (jest) + e2e (playwright)
build:   # build front boutique + admin + api (docker)
deploy:  # push images → registre → orchestrateur
  environment: production
  only: [ main ]
Environnements
EnvBrancheURL
Développementfeature/*local · review apps
Recettedevelopstaging.frank-line.com
Productionmainfrank-line.com · admin.frank-line.com
Variables d'environnement (secrets)
DATABASE_URL=postgres://…
STRIPE_SECRET_KEY=sk_live_…
STRIPE_WEBHOOK_SECRET=whsec_…
JWT_SECRET=
S3_BUCKET / S3_KEY / S3_SECRET=
MAIL_API_KEY=
META_APP_ID / META_APP_SECRET=
12

Sécurité & RGPD

Sécurité
  • HTTPS partout · HSTS
  • Paiement 3D Secure · PCI géré par Stripe (aucune carte stockée)
  • Mots de passe hachés (bcrypt/argon2)
  • 2FA admin · journal des accès
  • Rate-limiting · protection CSRF/XSS · en-têtes CSP
  • Sauvegardes BDD quotidiennes chiffrées
RGPD
  • Consentement cookies (bandeau)
  • Droit d'accès, rectification, effacement, portabilité
  • Données minimisées · durées de conservation définies
  • Sous-traitants conformes (paiement, e-mail, hébergement)
  • Registre des traitements · DPO désignable
  • Pages légales déjà rédigées (CGV, Mentions, Confidentialité)
13

Monitoring & SEO

Surveiller la santé de la plateforme et garantir sa visibilité dès la mise en ligne.

Monitoring & performance
  • Suivi des erreurs (Sentry) · alertes temps réel
  • Disponibilité (uptime) · sondes par environnement
  • Cœur web vitaux · LCP, CLS, INP suivis en continu
  • Tableau de bord technique · latence API, taux d'erreur
  • Alertes paiement · échecs mobile money / carte
SEO & analytics
  • Rendu serveur (SSR/SSG) · pages produit indexables
  • Métadonnées · Open Graph, données structurées Product
  • sitemap.xml · robots.txt · URLs propres (slug)
  • Analytics respectueux RGPD · tunnel de conversion
  • Balises hreflang · FR / EN multi-marchés
Le rendu serveur (Next.js) est indispensable pour le SEO des fiches produit et articles : chaque page doit être servie complète aux moteurs, pas seulement montée côté client.
14

Roadmap de mise en œuvre

Séquence recommandée pour passer du prototype à la production.

JalonContenuSortie
J1 · SocleRepo, CI/CD, BDD, auth, API catalogueCatalogue navigable connecté
J2 · AchatPanier, checkout, Stripe, commandes, e-mailsPremier paiement de bout en bout
J3 · CompteInscription, traçabilité, factures, favoris, fidélitéEspace client complet
J4 · Back-officeCommandes, stock/appro, produits, stats, équipeGestion autonome
J5 · Contenu & servicesJournal, carte-cadeau, sur-mesure, monogrammePlateforme complète
J6 · Réseaux & lancementWhatsApp/IG/Meta/TikTok, SEO, perf, recetteMise en production
Chaque écran à construire existe déjà en haute fidélité dans 03-prototype/ : le développement consiste à reproduire ces écrans en les branchant à l'API décrite ici. Aucun écran n'est à inventer.