project· maintenu
BA111OD · App commerciale
PWA interne sur invitation pour l'équipe BA111OD (catalogue, partenaires, commandes, PDF brandés, agenda salon et statistiques). Posée sur Next.js 15 et Cloudflare Workers.
Résultat
L’outil remplace un flux Excel + email + PDF à la main par un seul écran de travail. Le MVP est utilisé quotidiennement par l’équipe ; l’agenda salon, les statistiques, la page profil, le rôle PR et le feedback en équipe se sont greffés au fil des retours. Les ajouts post-PRD viennent de l’usage, ce qui est, honnêtement, le meilleur indicateur qu’on a shippé la bonne première version.
Contexte
BA111OD Sales est une Progressive Web App interne sur invitation, utilisée par les équipes BA111OD pour préparer les commandes des détaillants, piloter l’agenda commercial des salons et suivre l’activité. Pas d’inscription libre, équipe restreinte, desktop-first, interface en anglais. Un PRD initial a posé les fondations ; depuis, l’app a continué d’évoluer en suivant l’usage réel de l’équipe.
Le problème de départ : l’équipe commerciale jonglait avec un catalogue complexe, une liste de partenaires aux tarifs différenciés par pays, et des confirmations de commande produites à la main. Aucun outil du marché ne rentrait dans les contraintes sans compromis sur la personnalisation ou le coût.
Rôles
L’app distingue trois rôles, appliqués côté serveur sur chaque route.
Admin. Accès complet, import du catalogue, gestion des utilisateurs, des partenaires, des commandes, des PDF, de l’agenda, des statistiques.
Sales. Identique à l’admin sans l’import et sans la gestion d’équipe. C’est le rôle de production quotidien.
PR. Rôle restreint à l’agenda. Pensé pour les profils relations presse / VIP qui pilotent les créneaux salon sans toucher aux flux commerciaux.
Ce qui a été développé
Auth & accès. Login-first, pas d’inscription libre. Toutes les routes sont protégées par rôle, pas de page commerciale exposée publiquement.
Partenaires de revente. Création, édition, désactivation. Pour chaque partenaire, un pays et un paramétrage tarifaire dédié.
Import catalogue depuis Shopify. L’admin dépose un export CSV, l’app prévisualise, signale les erreurs et les warnings, puis synchronise. Les SKUs absents du fichier sont désactivés (jamais supprimés), les commandes passées restent intactes.
Catalogue & fiche produit. Cartes produit avec image, prix
payable en CHF et prix retail informatif (devise commutable selon
le pays du partenaire). Recherche par SKU ou nom, filtres par
chapitre (Chapter 3 à Chapter Δ), ajout direct à la commande.
Au clic, la carte flashe « ✓ Added » et la barre de commande pulse
avec un badge +N, retour visuel direct sur l’action.

Commandes. Création et édition, historique cherchable, réouverture toujours possible. Une commande peut être amorcée avant qu’un partenaire ne soit attribué, puis complétée plus tard à mesure que les détails se confirment.
Génération PDF. Récap brandé BA111OD, détails partenaire, lignes, totaux. Téléchargeable et partageable directement depuis l’app (Web Share natif sur mobile), réutilisable depuis l’historique.
Architecture
Next.js 15 (App Router) en TypeScript, déployé sur Cloudflare Workers via OpenNext, avec Postgres managé pour les données et stockage objet pour les PDF.
Sécurité ancrée en base. Les autorisations s’appliquent au plus près des données plutôt qu’au seul niveau applicatif. La sécurité est une règle de base, pas une convention de code.
Au-delà du PRD
Le PRD cadrait le MVP. Depuis, l’usage réel de l’équipe a fait émerger un second cercle de fonctionnalités, livrées itérativement.
Agenda salon. Le module le plus dense des ajouts. Calendrier en vue semaine, création / édition d’événements avec date-picker et time-picker custom, drag-drop pour reprogrammer un créneau, statuts (confirmé, à confirmer, no-show), couleurs par type de rendez-vous avec surcharge par participant et mise en avant visuelle des créneaux à enjeu.

Statistics. Graphiques d’activité avec filtres par type de document. Lecture rapide de l’activité par période et par partenaire.
Page profil. Photo et nom modifiables, raccourcis vers Admin, Statistics et Feedback (admin uniquement), tout depuis un écran unique.

Feedback en équipe. Un onglet à deux volets, un changelog intégré (l’équipe voit ce qui a changé sans quitter l’app) et un fil de notes partagé pour remonter les retours d’usage.
Audit de sécurité. Revue interne couvrant code applicatif, déploiement, auth et dépendances, intégrée au cycle de livraison.




