Client
Labo Louppe
Secteur
Conseils et communication santé
Rôle
Développeur web
Année
2023
Le Labo Louppe est spécialisé dans la prévention (santé) dans différents secteurs (entreprise, école, ville, hôpital …). Une partie de leur activité consiste à réaliser des outils de communication sur mesure (infographie, sites, support d’expositions …). La société souhaitait acquérir un outil sur mesure leur permettant la création et l’administration de mini-jeux pour leurs clients.
La création de cette solution a nécessité la recherche de solutions et le développement pour différents besoins :
Le client désirait avoir de l’autonomie et un certain degré de customisation dans la création de ses mini-jeux, mais également de pouvoir les administrer facilement.
Les rôles du back-office :
J’ai opté pour la solution que propose Sanity (sanity.io), qui est un headless CMS en ligne, managé qui propose une solution simple, peu couteuse par rapport aux besoins du projet, et offrant une interface claire et fluide. Cette solution m’a permis de construire efficacement une interface personnalisée pour le client, et de pouvoir construire tout autour les workflows de travail. Cette solution a aussi l’avantage de ne pas nécessiter de frais d’entretien et d’hébergement supplémentaire sur l’année, permettant au client d’avoir une autonomie complète et l’assurance d’une haute disponibilité.
Sanity, React, Typescript, CLI, CSS
Pour une question de simplicité, il était préférable de contenir tout le front-end dans une seule codebase, devant répondre aux différents besoins :
Pour répondre à ces différents besoins, j’ai opté pour le framework Next.js, qui permet l’utilisation de librairie React, facilitant l’intégration d’animations et de comportement réactifs. Il a également permis la navigation dans les différentes étapes des mini-jeux sans donner au joueur la possibilité de modifier l’état du state à travers la modification éventuelle de l’url.
Le framework a également facilité la création de différents types de déploiement au travers de configurations personnalisées.
Ex: npm run build env MODE=server
Permettant le build du projet de façon traditionnelle, déployable en ligne avec rendu SSR
Ex: npm run build env MODE=static GAME_ID=94fdacb0-7a4e-4b28-2eb-3d5b626102d9,1f6bd60d-fe03-4935-a6a5-1477e5fy6fe4
Permettant de build et d’importer tous les éléments static nécessaires (fonts custom, images, infos jeux …), afin réaliser une image docker utilisable sans connexion.
Next.js, React, Typescript, Css Module, Zod, Zustand, Tanstack Query
Nous avions besoin de proposer l’accès aux mini-jeux depuis 2 points d’accès :
Pour l’utilisation en ligne, nous avons fait le choix d’un hébergement sur un VPS OVH. J’ai donc paramétré l’environnement Debian, ainsi qu’un reverse Proxy et le nom de domaine.
Debian, SSH, PM2, Caddy, Let’s Encrypt
Pour une utilisation hors ligne sur Raspberry Pi, et pour simplifier au maximum le processus de déploiement pour le client, j’ai décidé d’utiliser Docker. Le workflow étant le suivant :
Pour une installation plus rapide, j’ai également préparé une image pré-installée de Raspbery Pi OS avec les dépendances nécessaires.
Raspeberry Pi, Docker, Github actions, CI/CD, Debian, Balena Etcher
Le client souhaitait obtenir un rapport des parties effectuées sur les différents jeux, afin de proposer un résumé sous forme de PDF à leurs clients.
Il était d’abord nécessaire de trouver un moyen de stockage en ligne pour ces données, je me suis donc tourné vers MongoAtlas, qui propose des bases de données managées, ainsi qu’un outil Atlas Charts, qui répond parfaitement au besoin. En créant un template général et y injectant des variables (Id du jeux, dates d’exploitations), il était alors possible de générer des statistiques, mis à jour en direct, et permettant un export PDF.
MongoDB, MongoAtlas Charts