JDR Voices
Cette application permet depuis une photo d'un texte de généré son inteprétation par l'IA. Utilisé lors de nos session de JDR entre ami.
Une sélection de mes projets personnels, réalisés suite à l'envie de coder et de découvrir de nouvelles technos.
Cette application permet depuis une photo d'un texte de généré son inteprétation par l'IA. Utilisé lors de nos session de JDR entre ami.
Site de présentation personnelle mettant en avant mon expérience professionnelle, mes compétences et mes projets de développement.
Refonte complete du projet ludothèque dans une nouvelle version bien plus évolués. Site activement utilisé par notre groupe de joueurs.
Générateur de requêtes SQL pour remplacer des URLs ou du contenu dans une base WordPress ou PrestaShop, avec workflow collaboratif.
Mini-projet utilitaire pour WoW Classic : calcul et comparaison de l'efficacité des sorts de soins. (EHV, efficacité mana, PPS)
Gestionnaire personnel de ressources et notes techniques. Projet réintégré au hub avec interface d'administration.
Mise en place du développement initial, configuration des gabarits de page et hébergement pour une connaissance psychothérapeute professionnelle.
Application interactive pour un mariage : jeu des trios avec suivi d'équipes en temps réel, classement, et galerie collaborative pour partager photos/vidéos de la soirée.
Plateforme complète de création et gestion de compétitions multigaming avec système de joueurs, équipes, brackets de tournois et interface d'administration.
Gestion de ludothèque personnelle avec recherche avancée (joueurs, durée, style). Base de données de +50 000 jeux scrappés.
Outil de tracking de l'hôtel des vente pour le jeu World of Warcraft, permet d'analyser les évolutions de prix, détecter les bonnes affaires et suivre les tendances du marché.
Plateforme communautaire de partage de vidéos sur le jeu Overwatch. Plusieurs centaines de visites journalières.
Aucun projet ne correspond à ce filtre.
JDR Voices est une web app mobile-first (PWA) conçue à la base pour rendre plus immersif nos parties de 7th Citadel (JDR). Elle permet de scanner une page du livre de dialogues, d'en extraire le texte via un OCR local dans le navigateur, puis de générer une interprétation audio (TTS).
Chaque dialogue peut être personnalisé via un système d'archétypes (barman, paysan, noble…), d'options rapides (humeur, accent, énergie, intention), séléction d'un som ambiance (village, taverne, forêt, caverne ...). L'historique des scènes jouées est conservé pour une réécoute si besoin.
OCR fiable sur mobile : La qualité de l'OCR dépend fortement de la photo. Solution : recadrage manuel sur canvas après prise de vue, pré-traitement image (resize 1600px, compression JPEG, contraste optionnel) avant passage à Tesseract.js.
Dialogue sur plusieurs pages : Un dialogue peut s'étaler sur plusieurs pages physiques du livre. Solution : multi-photo avec recadrage individuel puis concaténation des textes OCR dans l'ordre avant envoi au LLM.
Prompt engineering JDR : Le LLM doit incarner un acteur
improvisateur sans inventer des faits. Format de sortie JSON structuré
(voice_style, performance_text,
stage_directions) pour dissocier texte joué
et indications de mise en scène.
UX adapté pour mobile : Interface conçue pour être utilisable rapidement pendant la partie (vue stackée).
Ce hub personnel est une plateforme développée avec Symfony 7, conçue pour centraliser tous mes projets de développement, mes compétences techniques et mon parcours professionnel.
Refonte complète de GameTeck, une application web de gestion de ludothèque personnelle avec scraping automatique des nouveaux jeux de sociétés disponibles. Le projet permet de cataloguer sa collection de jeux de société, découvrir de nouveaux jeux et partager sa ludothèque avec ses amis.
L'application est aujourd'hui utilisée activement par notre groupe de joueurs. Elle référence plus de 100 000 jeux avec informations complètes (créateurs, thèmes, récompenses, photos, prix ...) et gère les collections des différents utilisateurs.
Contournement CORS et détection anti-bot : Les premières tentatives utilisaient un proxy Express avec des headers HTTP manuels mais c'était insuffisant (détection des requêtes automatisées). La solution finale est de piloter un vrai navigateur Chromium via Puppeteer (headless). Puis plutôt que de parser le HTML ont fait de l'interception réseau, on écoute les réponses XHR et on capture directement le JSON de l'API interne.
Crawl exhaustif : Pas d'endpoint "tous les jeux". Approches envisagées puis abandonnées : recherche par terme, recherche alphabétique ... La solution choisie crawler les auteurs, éditeurs et illustrateurs, puis récupérer les jeux de chacun. Tout jeu ayant au moins un créateur, la couverture est garantie à 100%. Un fichier de checkpoint par type permet la reprise après interruption.
Performance sur 100 000+ entrées : Un seul fichier JSON devenait trop lourd. Mise en place d'une architecture à deux niveaux (index léger + fichiers individuels) puis dans la dernière version mise en place d'une base PostgreSQL pour accélérer les requêtes (temps de chargement réduit de 2-5s à 10-50ms).
Navigation SPA-like : Système d'historique de navigation personnalisé (navigation-history.js) avec pile de contexte, retour intelligent inter-pages et détection des navigations consécutives identiques.
SQL URL Rewriter est un outil développé pour générer des requêtes SQL de remplacement d'URLs ou de contenu dans une base de données PrestaShop ou WordPress. Il cible automatiquement l'ensemble des tables concernées selon la plateforme choisie (catégories, produits, blog, options, meta…) grâce à des packs de cibles configurables.
Conçu pour faciliter les migrations de domaine ou de contenu, l'outil intègre également un workflow collaboratif complet : création de demandes, saisie des résultats COUNT, validation et application des UPDATE — chaque étape tracée avec un historique filtrable consultable par toute l'équipe.
ps_ / wp_)id_lang (PrestaShop).sqlWoW Heal Calculator est un mini-projet développé dans un premier temps par l'envi de découvrir la puissance de claude code. J'ai cherché une idée de besoin personnel simple.
Je suis partis sur ce petit outil utile pour WoW Classic. Il implémente les vraies formules mathématiques du jeu pour calculer et comparer l'efficacité des sorts de soins à partir des statistiques réelles du personnage. Un petit outil sans prétention, mais utile en pratique pour optimiser ses performances et ses connaissances sur le jeu.
Coefficient
Min(CastTime / 3.5, 1)
Soins réels
BaseHeal + (BonusHealing × Coef)
EHV (soins moyens)
Heal × (1 - Crit%) + HealCrit × Crit%
Efficacité Mana
AvgHeal / ManaCost
PPS (Points Par Seconde)
AvgHeal / CastTime
Le système de mémos était initialement un projet personnel indépendant, développé pour stocker des informations techniques ou autres. Cela me permettait de garder une trace et de pouvoir facilement rechercher une information dans cette base de données.
Ce projet a été réintégré directement dans le code source de ce site (rmtl.dev). Cette réintégration a nécessité une refonte complète de l’architecture afin de s’adapter au système existant du hub, tout en conservant l’ensemble des fonctionnalités développées initialement.
Développement d'un site vitrine WordPress pour une connaissance psychothérapeute professionnelle. Le projet consistait à mettre en place un site complet pour présenter ses services, son parcours et permettre aux patients potentiels de la contacter facilement.
L'objectif était de créer une présence en ligne professionnelle et rassurante, adaptée au domaine de la thérapie, avec une navigation et un design simple.
Développement initial : Prise en charge complète de la mise en place du site, de la configuration du serveur à la personnalisation des templates WordPress.
Design adapté au métier : Choix d'un design sobre et apaisant avec la thérapeute.
Autonomie du client : Mise en place d'un système permettant au thérapeute de gérer lui-même les contenus après la livraison du site.
Site vitrine fonctionnel : Focus sur la présentation claire des services et facilitation de la prise de contact pour les patients.
Application web interactive développée spécialement pour un mariage. Le projet comprenait un jeu ludique (le jeu des trios) pour animer la soirée et une galerie collaborative permettant aux invités de partager leurs photos et vidéos du week-end.
L'objectif était de créer un moyen de partage pour les invités, en combinant un système de jeu en équipe avec suivi en temps réel et un espace de partage de souvenirs.
Suivi du classement : Mise en place d'un système permettant à tous les invités de voir l'avancement des équipes pendant le jeu.
Gestion des uploads : Système pour gérer l'upload simultané de photos/vidéos par plusieurs invités avec validation et optimisation.
UX simple : Interface intuitive utilisable par tous les invités (tous âges et niveaux techniques) dans l'ambiance festive d'un mariage.
Gestion des équipes : Algorithme de création et validation des équipes avec vérification que tous les participants sont bien associés.
Vie privée : Système de permissions pour permettre aux invités de choisir si leurs contenus sont publics ou privés pour les mariés uniquement.
TriceracUp est initialement une plateforme conçue pour organiser et gérer des compétitions de jeux vidéo. Le projet permet de créer des tournois structurés avec un système avancé de gestion des joueurs et des équipes.
L'objectif était de fournir une solution pour organiser des tournois entre amis, avec une interface d'administration et un suivi en temps réel de la compétition.
Génération de brackets : Algorithme de création automatique d'arbres de tournois.
Gestion des relations : Architecture pour gérer les relations entre joueurs, équipes, matchs et tournois ...
Interface d'administration : Backoffice complet avec gestion des états de compétition, ajout de jeu ...
Suivi en temps réel : Mise à jour des classements et progression des tournois visible par tous.
GameTeck est une application web de gestion de ludothèque personnelle. Le projet permet de cataloguer sa collection de jeux de société, rechercher des jeux selon différents critères.
Le projet est l'intègre une base de données complète de plus de 50 000 jeux de société scrappés depuis un site spécialisé, offrant ainsi des informations détaillées pour chaque jeu.
Web Scraping massif : Développement d'un scraper robuste pour extraire et normaliser les données de +50 000 jeux depuis un site tiers.
Optimisation de recherche : Indexation MySQL avancée et requêtes optimisées pour permettre des recherches rapides avec multiples critères simultanés.
UX de recherche : Interface intuitive avec filtres dynamiques et autocomplétion pour faciliter la découverte de jeux même avec des critères flous.
Gestion des images : Système de cache et lazy loading pour les visuels des jeux afin d'optimiser les performances avec des milliers de fiches.
WoW Auctionator est un outil d'analyse de marché développé pour le jeu World of Warcraft. L'application permet de suivre les prix des objets sur l'hôtel des ventes (auction house) d'un serveur spécifique et d'identifier les opportunités d'achat.
Le projet visait à m'aider à optimiser les gains en détectant les bonnes affaires, en analysant les tendances de prix et en suivant l'évolution du marché sur plusieurs jours/semaines.
Intégration API Blizzard : Connexion à l'API officielle de World of Warcraft pour récupérer les données de l'auction house. (Aujourd'hui cette API n'existe plus)
Traitement de gros volumes : Optimisation pour gérer des milliers d'enchères mises à jour toutes les heures avec calculs statistiques et stockage efficace.
Visualisation de données : Intégration de Chart.js pour créer des graphiques interactifs et lisibles montrant les évolutions de prix sur différentes échelles de temps.
Algorithme de détection : Développement d'un système de scoring pour identifier automatiquement les meilleures opportunités d'achat basé sur l'historique et les écarts-types.
Lancé en 2016 à la sortie du jeu Overwatch de Blizzard, ce projet était une plateforme communautaire permettant aux joueurs de partager leurs meilleurs moments de jeu, les fameux "Play of the Game" (POTG).
Le timing était parfait, le site était déjà en développement pendant la bêta du jeu, ce qui m'a permis de le mettre en ligne avant la sortie officielle et de trouver rapidement sa petite communauté de visiteur actif.
Overwatch intégrait une fonctionnalité sympatique, à la fin de chaque match, le jeu enregistrait automatiquement la meilleure action de la partie. C'était le "Play of the Game". Mon idée était de créer une plateforme centralisée où la communauté pourrait partager ces moments.
Je n'avais pas pour réelle ambition de faire vivre ce site sur le long terme, j'avais pour envie à ce moment de développer un projet web perso. J'ai été moi-même surpris de la récéption de celui-ci par les joueurs.
Positionnement stratégique : Le choix du nom de domaine "overwatch-potg.com" s'est avéré extrêmement judicieux. Les joueurs recherchaient naturellement "POTG" (l'acronyme de Play of the Game), ce qui a permis un bon référencement naturel.
Reconnaissance de la communauté : Dès les premières semaines, le site a attiré des centaines de visiteurs quotidiens, sans vraie campagne de communication pour celui-ci.
Reconnaissance de Blizzard : J'ai eu l'honneur de recevoir un kit press exclusif directement de Blizzard Entertainment pour féliciter et soutenir mon projet.
Gestion de la croissance : Le succès a apporté son lot de défis. La modération manuelle des soumissions quotidiennes est rapidement devenue chronophage, nécessitant beaucoup de temps de gestion.
Community management : Animer une communauté active, gérer les retours utilisateurs, modérer les contenus et répondre aux demandes.
Décision difficile : Après plusieurs mois, j'ai dû prendre la décision d'arrêter le projet, faute de temps suffisant pour assurer correctement la modération et la maintenance. Une expérience humaine autant que technique qui m'a énormément appris sur la gestion de projets communautaires.
Tous mes projets sont hébergés sur un même VPS sous Debian et orchestrés via Docker Compose.
~/docker/ ├── traefik/ ├── dockge/ ├── tools/ │ └── adminer/ └── projects/ ├── gameteck/ ├── hub/ ├── jdrvoices/ ├── sql-rewriter/ ├── triceracup/ └── wow-calculator/
Chaque sous-dossier est un projet indépendant avec son propre docker-compose.yml.
Les conteneurs sont exposés à Traefik via des labels qui définissent le domaine et les règles de routage.
Chaque projet tourne dans son propre conteneur isolé via Docker Compose. Ça garantit la portabilité, simplifie les déploiements et évite les conflits de dépendances entre services.
Reverse proxy qui intercepte toutes les requêtes entrantes et les redirige vers le bon conteneur selon le domaine. Gère automatiquement les certificats SSL via Let's Encrypt.
Interface web légère pour gérer visuellement les stacks Docker Compose : démarrer, arrêter, surveiller les logs et modifier les configs sans passer par le terminal.
Outil d'administration de bases de données accessible via navigateur. Compatibilité avec MySQL, PostgreSQL et SQLite.