M.A.D. Marketing lançait PrevenFit, un service destiné aux gérants de salles de sport. Le site vitrine existait déjà sous WordPress, mais l'espace abonné avait été prototypé à côté et ne tenait pas. Nous avons été sollicités pour le concevoir proprement, et c'est devenu une application Django autonome.
En images
Le projet en détail
La conception a été guidée par une contrainte que j'ai posée dès le départ : l'outil manipule des données nominatives, donc il doit en révéler le moins possible. La recherche n'accepte pas de résultat approchant. Elle exige le prénom, le nom et la date de naissance, et ne répond que sur une correspondance exacte des trois. On ne peut donc pas parcourir le fichier, ni le lister, ni le deviner par tâtonnements : on peut seulement confirmer un dossier que l'on a déjà en main. Le modèle impose en outre l'unicité du triplet, ce qui empêche les doublons de s'accumuler.
La connexion est unique pour tous les comptes. Le rôle inscrit en base décide de ce qui s'affiche après l'authentification, l'interface de l'abonné ou celle de l'administrateur, plutôt que d'exposer deux portes d'entrée différentes. L'espace abonné tient sur une seule page : l'en-tête, le formulaire de recherche à trois champs, la zone de résultats. Rien d'autre, parce que rien d'autre n'était utile.
L'administration est séparée en deux volets, la gestion des comptes abonnés et celle des données. Chaque ligne porte ses actions : modifier, supprimer, activer ou désactiver un compte, afficher ou masquer un enregistrement dans les résultats de recherche. L'ajout se fait une entrée à la fois ou par import d'un fichier suivant une trame que nous fournissions, parce qu'un client qui doit saisir plusieurs centaines de lignes à la main ne le fera pas.
Côté industrialisation, l'application est partie d'un squelette Django éprouvé plutôt que d'une page blanche : configuration par variables d'environnement, dépendances séparées entre développement, test et production, conteneurs Docker pour les trois environnements, serveur gunicorn en production, tests sous pytest avec mesure de couverture et chaîne gulp pour les feuilles de style. Pour une application de cette taille, c'est ce qui fait la différence entre un prototype et quelque chose qu'on peut exploiter.
L'image de cette fiche est le formulaire vide, et c'est le seul état de cet outil qui puisse être montré : tout autre écran afficherait des données nominatives. Il tombe bien, parce qu'il dit l'essentiel du produit. Trois champs, un bouton, rien d'autre sur la page.
