Full-Stack Developer & Designer
Parfois, les meilleurs projets commencent avec le stress de quelquâun dâautre. Imaginez : je suis en 4e annĂ©e dâinformatique sur le campus Ynov de Toulouse, tranquille, quand des membres du personnel viennent me voir avec cette tĂȘte si particuliĂšre.
Mon cerveau a rĂ©agi au quart de tour : âJe pourrais recrĂ©er Advent of Code, non ? Non ?â
Spoiler : bien plus compliqué que prévu⊠mais ça valait totalement la folie qui a suivi.
Pour ceux qui nâont pas encore plongĂ© dans lâunivers dâAdvent of Code : câest un calendrier de lâAvent pour dĂ©veloppeurs. Chaque jour de dĂ©cembre, un nouveau puzzle de programmation dĂ©barque. Au dĂ©but ça va, puis trĂšs vite tu remets en question tes choix de vie.
Le concept malin ? Chaque participant a des donnĂ©es dâentrĂ©e uniques, donc pas moyen de tricher en copiant un camarade. Et chaque problĂšme vient avec une histoire qui se dĂ©veloppe jour aprĂšs jour, ce qui rend lâassistance dâune IA bien moins efficace, vu que ChatGPT galĂšre vite Ă suivre le contexte narratif.
AprĂšs deux annĂ©es Ă y participer (et Ă adorer chaque minute de frustration), je me suis dit : âĂa ne peut pas ĂȘtre si compliquĂ© de faire ma propre version ?â
Ahem.
Les attentes du staff semblaient assez basiques :
Avec le recul, jâaurais dĂ» leur recommander une plateforme existante. Mais oĂč est le fun lĂ -dedans ?
Je sors mon fidĂšle laptop et je commence un prototype en Python. LâidĂ©e tenait la route : un systĂšme pour gĂ©nĂ©rer des entrĂ©es uniques et valider automatiquement les rĂ©ponses. Python, parfait pour ça, avec toutes ses libraries.
Mais trĂšs vite, je me rends compte que ce nâest pas juste une histoire de puzzles. Il me fallait :
Et tout ça devait ĂȘtre simple Ă utiliser, mĂȘme pour des Ă©tudiants qui voulaient juste rĂ©soudre des problĂšmes sans galĂ©rer avec la plateforme.
Je décide de séparer le projet en trois blocs principaux :
React avec Vite. Rapide, efficace, et je pouvais construire une interface moderne (pas un truc des années 2000, coucou les plateformes scolaires classiques). Pour le style : Tailwind CSS. Propre et rapide à intégrer.
Câest lĂ que je tente quelque chose de nouveau : Go. JâĂ©tais curieux, et câĂ©tait lâoccasion parfaite. Go + Gin = performances, surtout si des centaines dâĂ©tudiants se connectent et demandent des entrĂ©es uniques en mĂȘme temps.
Petit moment âeurekaâ : je me souvenais que les fichiers .docx
ou .xlsx
sont en fait des .zip
avec du XML dedans. LâidĂ©e a mĂ»ri : et si je crĂ©ais mon propre format .alghive
, un .zip
contenant du XML pour les mĂ©tadonnĂ©es, et des scripts Python pour la gĂ©nĂ©ration dâinputs et la validation ?
RĂ©sultat : les puzzles peuvent ĂȘtre créés avec des outils familiers, et le systĂšme les traite automatiquement. Bingo.
PostgreSQL en base principale, Redis pour le cache. Jâai commencĂ© par le schĂ©ma, vu que le panneau dâadmin allait ĂȘtre un gros morceau â rĂŽles, groupes dâĂ©tudiants, compĂ©titions, etc.
Le schĂ©ma de dĂ©part a plutĂŽt bien tenu la route, mĂȘme si jâai dĂ» faire Ă©voluer la gestion des compĂ©titions plusieurs fois.
Le serveur web en Go a Ă©tĂ© une vraie satisfaction. Swagger mâa sauvĂ© la vie pour documenter lâAPI. Authentification, users, CRUD, tout sâest construit couche par couche.
Pas sexy, mais indispensable. Des composants React à la chaßne : gestion des users, campus, compétitions, déploiement de puzzles... Le royaume du CRUD.
Au bout dâun moment, jâai rĂ©alisĂ© que mon projet Ă©tait un repository monolithique avec des dossiers Frontend/
et Backend/
. Ăa devenait ingĂ©rable. Il Ă©tait temps de structurer un peu tout ça.
Juste quand je commençais Ă prendre mon rythme, le campus de Montpellier mâappelle: ils veulent aussi organiser leur propre Ă©vĂ©nement, et certains Ă©tudiants veulent contribuer Ă la crĂ©ation des puzzles.
Et lĂ , mon âpetit projet scolaireâ devient un systĂšme multi-campus, collaboratif, avec dĂ©ploiement automatique. Câest lĂ que jâai dĂ©cidĂ© dâassumer lâambition et de crĂ©er un vrai Ă©cosystĂšme.
Jâai tout dĂ©placĂ© dans une organisation GitHub et sĂ©parĂ© le monolithe, et en ai profitĂ© pour introduire de nouveaux services :
Le thĂšme des abeilles est arrivĂ© tout seul⊠et jâai dĂ©cidĂ© de le garder. đ
Ă deux semaines de lâĂ©chĂ©ance, jâavais un backend solide et un panneau dâadmin fonctionnel⊠mais rien cĂŽtĂ© Ă©tudiant. Bon.
Et en fait, câest lĂ que le fun est revenu. AprĂšs des semaines Ă coder de lâadmin, construire une interface sympa et moderne pour les Ă©tudiants mâa remotivĂ©. Je voulais quelque chose de plus propre et agrĂ©able Ă utiliser â loin des plateformes institutionnelles tristes quâon connaĂźt tous.
Au fil de lâeau, jâai compris quâil me fallait des services annexes :
Un service Go Ă part pour lâexĂ©cution des puzzles, la gĂ©nĂ©ration des entrĂ©es, la validation. SĂ©parĂ© du serveur principal, plus performant et plus sĂ©curisĂ©. Et surtout, facile Ă scaler si besoin.
Quand les Ă©tudiants de Montpellier ont voulu crĂ©er et tester des puzzles Ă plusieurs, jâai codĂ© une app web dĂ©diĂ©e. Backend Flask, frontend React. Câest devenu leur QG de crĂ©ation.
Ă deux semaines de la deadline, le campus de Lyon dĂ©barque aussi. LĂ , jâai compris que jâavais sans le vouloir bĂąti un projet qui dĂ©passait largement le cadre initial.
Lâarchitecture finale gĂ©rait :
Chaque compétition durait 6h, avec 16 puzzles max par étudiant (donc 32 parties, difficulté croissante). Et grùce au format .alghive
, ajouter un puzzle Ă©tait aussi simple quâun upload de fichier.
DĂšs le dĂ©but, jâai pensĂ© au dĂ©ploiement. Chaque service dans un conteneur Docker, avec des docker-compose
différents pour le dev, le staging, et la prod. Je pouvais tester et mettre à jour sans crainte de casser la plateforme en live.
Juste avant le jour J, un éclair de lucidité : et si tout plantait et que je ne savais pas pourquoi ?
J'ai dĂ©cidĂ© d'installer en express Grafana et Prometheus: Monitoring CPU, mĂ©moire, rĂ©ponses API, connexions DB â je voulais tout voir.
CĂŽtĂ© sĂ©curitĂ© j'en ai profitĂ© pour implĂ©menter une limitation de requĂȘtes sur les endpoints sensibles, une validation des entrĂ©es, vĂ©rification de lâauth. Mieux vaut prĂ©venir que guĂ©rir.
Le jour de la compétition arrive. Tout roule. Les étudiants se connectent, je surveille mes dashboards de prÚs.
Puis⊠BAM. 5 minutes aprÚs le lancement.
Des erreurs, des requĂȘtes refusĂ©es. Les 429 Too Many Requests
explosent sur ma dashboard Grafana.
Le problĂšme ? Ma propre protection contre le DDOS.
Tous les Ă©tudiants Ă©taient connectĂ©s sur le mĂȘme rĂ©seau Wi-Fi⊠donc mĂȘme IP. Et jâavais oubliĂ© ce dĂ©tail. RĂ©sultat : ma limite de requĂȘtes par IP bloquait tout le monde.
Imaginez-moi, en SSH sur le serveur en prod, pendant une compĂ©tition en live, en train de modifier mes rĂšgles de rate limiting dans lâurgence pendant que 100 Ă©tudiants attendent. Pas idĂ©al.
Heureusement, Grafana mâa permis de tout visualiser et ajuster rapidement. En 15 minutes, le problĂšme Ă©tait rĂ©solu.
Moralité : il faut tester dans des conditions réalistes. Les compétiteurs cliquent bien plus vite que des utilisateurs normaux.
AprĂšs cette crise express, tout sâest bien dĂ©roulĂ©. Les Ă©tudiants ont codĂ©, rĂ©solu des puzzles, se sont affrontĂ©s sur le leaderboard. Lâinfra a tenu, les puzzles ont gĂ©nĂ©rĂ© leurs entrĂ©es sans bug.
Voir les Ă©tudiants utiliser une plateforme que jâavais bĂątie de zĂ©ro⊠ça valait toutes les nuits blanches.
Si je devais le refaire, je corrigerais ce problĂšme avec un captcha sur la page de login, ou un systĂšme dâempreinte navigateur pour limiter les requĂȘtes par utilisateur rĂ©el.
CÎté développement :
CÎté événement :
Franchement, ce projet mâa appris bien plus en un mois que certains semestres entiers. Jâai pu mettre en pratique plein de technos que je voulais tester : Go, microservices, monitoring temps rĂ©el, Docker⊠tout y est passĂ©.
Mais au-delĂ des technos, jâai surtout compris ce que ça impliquait dâhĂ©berger un vrai concours Ă grande Ă©chelle : gestion dâinfrastructure, UX, sĂ©curitĂ©, monitoring. Travailler en direct avec les Ă©tudiants et les voir apprĂ©cier l'expĂ©rience, câĂ©tait gĂ©nial.
Ce qui Ă©tait censĂ© ĂȘtre un petit service pour mon Ă©cole est devenu quelque chose de bien plus gros. Mon but maintenant : faire dâAlgoHive une rĂ©fĂ©rence, pour les campus comme pour les entreprises qui veulent organiser des concours de code.
Tout lâĂ©cosystĂšme, les libraries, les outils de crĂ©ation, la doc : je veux que tout soit dispo et facile Ă utiliser, sans devoir tout recoder Ă la main comme je lâai fait.
Il reste un boulot monstrueux, Ă©videmment. AmĂ©liorer la sĂ©curitĂ©, la stabilitĂ©, lâergonomie. Je veux ajouter des catalogues de puzzles, de vraies stats, des outils collaboratifs⊠peut-ĂȘtre mĂȘme une marketplace dâĂ©nigmes.
Pour ma derniĂšre annĂ©e dâĂ©tudes, je veux en faire un vrai projet dâĂ©quipe. Mâentourer de profils qualifiĂ©s : experts sĂ©curitĂ©, UI/UX, crĂ©ateurs de puzzles. Jâai rĂ©ussi Ă faire ça tout seul, mais ça peut ĂȘtre 10x mieux avec les bonnes personnes.
On prĂ©voit plus dâĂ©vĂ©nements dans les campus de Toulouse, peut-ĂȘtre ailleurs en France. Lâobjectif : crĂ©er un rĂ©seau dâĂ©vĂ©nements de prog compĂ©titive que les Ă©tudiants attendent avec impatience.
Je veux aussi bùtir une vraie communauté autour du projet : une doc claire, des tutos, un forum, et pourquoi pas des ateliers pour les campus qui veulent se lancer.
Est-ce que je referais ce projet ? Sans hésiter. Mais avec un scope mieux défini et des délais plus réalistes.
Cette expĂ©rience mâa prouvĂ© que les meilleurs apprentissages naissent souvent dâun âouiâ un peu fou. Les dĂ©fis techniques, la gestion de projet, et lâimpact direct sur des centaines de personnes⊠aucune salle de classe ne mâaurait appris ça.
La plateforme AlgoHive est et restera open-source, prĂȘte Ă lâemploi pour celles et ceux qui veulent se lancer dans leur propre compĂ©tition de programmation. Que vous soyez une Ă©cole, une entreprise ou juste un·e passionné·e de puzzles⊠tout est lĂ .
JâespĂšre que ce post vous aura donnĂ© un bon aperçu du parcours, et peut-ĂȘtre lâenvie de lancer votre propre projet (presque) impossible.
Pour accĂ©der Ă tout lâĂ©cosystĂšme AlgoHive, rendez-vous sur GitHub. Docs, guides de dĂ©ploiement, tout y est. Attention, crĂ©er des puzzles est hautement addictif.