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.
Contexte
BA111OD Sales est une Progressive Web App interne sur invitation, utilisée chaque jour par l’équipe pour préparer les commandes des détaillants, piloter l’agenda des salons et suivre l’activité. Équipe restreinte, desktop-first, interface en anglais.
Le point de départ : un catalogue complexe, des partenaires aux tarifs différenciés par pays, et des confirmations de commande produites à la main dans un flux Excel + email + PDF. Aucun outil du marché ne rentrait dans les contraintes sans compromis sur la personnalisation ou le coût.
Un seul écran de travail
Trois rôles appliqués côté serveur sur chaque route (admin, sales, et un rôle PR limité à l’agenda), pas d’inscription libre, aucune page commerciale exposée publiquement.
Le catalogue s’importe depuis un export CSV Shopify : prévisualisation, erreurs et warnings, puis synchronisation. Les SKUs absents sont désactivés, jamais supprimés, et les commandes passées restent intactes. Les fiches affichent le prix payable en CHF et le prix retail selon le pays du partenaire, avec recherche par SKU ou nom et filtres par chapitre.

Une commande peut être amorcée avant qu’un partenaire soit attribué, complétée plus tard, réouverte à tout moment. Elle sort en PDF brandé BA111OD, partageable directement depuis l’app.
Ce que l’usage a ajouté
Le PRD cadrait le MVP. Depuis, l’usage réel de l’équipe a fait émerger un second cercle, livré itérativement : un agenda salon en vue semaine (créneaux reprogrammables au drag-drop, statuts confirmé / à confirmer / no-show, couleurs par type de rendez-vous), des statistiques d’activité par période et par partenaire, et un onglet feedback avec changelog intégré et fil de notes partagé.

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.
Architecture
Next.js 15 (App Router) en TypeScript, déployé sur Cloudflare Workers via OpenNext, Postgres managé pour les données, stockage objet pour les PDF. Les autorisations s’appliquent au plus près des données, pas seulement dans le code applicatif. Une revue de sécurité interne (code, déploiement, auth, dépendances) fait partie du cycle de livraison.