depuis la création du compte
Confiez votre projet à Mamitiana
Faites appel à l'expertise de Mamitiana pour faire avancer votre projet, ou découvrez d'autres freelances pour trouver celui qui correspondra parfaitement à vos besoins.
Projet personnel : une application d'évaluation par compétences avec plan de classe interactif, reprise et réécrite depuis une première version React et PocketBase vers du HTML et du JavaScript natif, sans build ni dépendance.
Le point intéressant est l'intégration d'un tableur en ligne comme base de données. Les données vivent dans un document Grist hébergé sur la plateforme publique de l'État, ce qui laisse l'utilisateur maître de ses données et capable de les consulter sans l'application. Mais l'API Grist ne peut pas être appelée directement depuis un navigateur : elle refuse l'en-tête d'authentification en contexte CORS, et surtout la clé d'API donne accès à tout l'espace de travail, donc elle ne doit jamais se retrouver dans du code client.
La réponse est un workflow n8n qui sert de proxy applicatif : route unique, requêtes typées par une action, et la clé Grist qui ne quitte jamais le serveur. Le navigateur n'a aucun pouvoir au-delà de ce que le proxy expose. Détail de conception volontaire : l'historique des exécutions du workflow est désactivé, parce que les requêtes de connexion transportent des mots de passe et n'ont rien à faire dans un journal.
Fonctionnalités : plan de classe interactif avec disposition de salle paramétrable et placement des élèves par siège et par groupe, évaluation par compétences avec coefficients configurables par classe, notes pondérées, vue élève partagée en lecture seule par jeton. Authentification des enseignants avec mots de passe hachés et salés, sessions à expiration.
Résultat : une application légère, sans serveur applicatif à maintenir, dont les données restent lisibles et exportables par leur propriétaire. Le schéma proxy n8n devant une API dont la clé est trop puissante vaut pour n'importe quel outil SaaS qu'on veut exposer partiellement à un navigateur.
Technologies : JavaScript natif, n8n, API Grist, modélisation de données, hachage de mots de passe, gestion de sessions, API REST.
Projet personnel : une application de vote en direct pour les élections de délégués et d'éco-délégués, utilisée dans un lycée. L'organisateur projette un QR code, les élèves votent depuis leur téléphone, les résultats et le procès-verbal officiel sont produits automatiquement.
Le cœur du sujet est une contrainte contradictoire, classique dès qu'il y a un scrutin : garantir qu'une personne ne vote qu'une fois, tout en rendant impossible de relier un bulletin à son auteur.
La réponse est une séparation stricte en base : une table d'émargement enregistre quel appareil a voté, une table de bulletins enregistre les choix, et rien ne relie les deux. L'unicité s'appuie sur le stockage local du navigateur combiné à une empreinte d'appareil calculée par canvas, avec possibilité pour l'organisateur de réinitialiser un appareil en cas de problème technique avéré. Aucun compte, aucune saisie d'identité : l'élève ouvre le lien et vote.
Dépouillement conforme aux règles en vigueur : calcul des suffrages exprimés, de la majorité absolue, élection à la majorité absolue au premier tour puis passage automatique à un second tour à la majorité relative si des sièges restent à pourvoir, gestion des binômes titulaire et suppléant indissociables. Le procès-verbal est généré pré-rempli, avec les emplacements de signature du président de séance, des élus et des assesseurs.
Architecture : page web unique côté client, API à route unique exposée par un workflow n8n, données en tables n8n. Purge automatique des scrutins trois jours après leur clôture, pour ne pas conserver de données inutiles.
Résultat : des élections tenues en classe en quelques minutes au lieu d'un dépouillement manuel, avec un procès-verbal prêt à signer. La même mécanique vaut pour toute consultation anonyme en assemblée générale ou en association.
Technologies : JavaScript natif, QR code, empreinte d'appareil, n8n, modélisation de données orientée anonymat, génération de documents, API REST.
Projet personnel : un jeu de négociation d'énergie joué en classe, où quatre communautés d'élèves doivent alimenter une île en énergie 100 % renouvelable. Elles négocient des ressources et construisent des centrales, et chaque échange comme chaque construction est validé par l'animateur.
Le parti pris d'architecture est inhabituel et c'est ce qui fait l'intérêt du projet : toutes les règles du jeu vivent dans un moteur unique exécuté côté serveur dans n8n. La page web n'est qu'un afficheur, elle ne décide de rien. Conséquence directe : aucune règle ne peut être contournée depuis le navigateur, et faire évoluer le jeu ne demande pas de redéployer les postes.
Diffusion de l'état en temps réel par MQTT : le serveur publie l'état de la partie en message retained sur un broker Mosquitto placé derrière Traefik en TLS, et chaque navigateur abonné le reçoit aussitôt. Un poste qui arrive en retard ou qui recharge la page retrouve immédiatement l'état courant, sans interrogation périodique du serveur ni reconstruction d'historique.
Les actions partent en POST JSON envoyé en text/plain, ce qui évite la requête de contrôle CORS préalable et simplifie le déploiement. La page est entièrement autonome, client MQTT embarqué compris : aucun chargement réseau externe, donc rien à bloquer sur un réseau d'établissement filtré.
Qualité : le moteur est couvert par une centaine de vérifications automatiques exécutées hors ligne avant chaque publication. Une partie complète a été simulée de bout en bout en production, gagnée au septième tour, sur environ 140 appels et sans anomalie.
Résultat : un dispositif collaboratif temps réel pour une vingtaine de joueurs simultanés, tenant sur une page web unique et une infrastructure auto-hébergée. L'architecture se transpose à tout tableau de bord ou outil collaboratif où l'état doit être partagé instantanément entre plusieurs postes.
Technologies : n8n, MQTT (Mosquitto, messages retained), Traefik et TLS, JavaScript natif, HTML autonome, tests automatisés, API REST.