Produits concrets, architectures assumées.

Des projets personnels — du TTRPG IA multijoueur au bureau à distance vocal — chacun ancré dans un problème produit précis, avec des choix de stack et de distribution assumés.

7 projetsProduction, développement et lancement
Stack consolidée

Des idées qui manquaient, conçues et mises en production.

Je repère un usage que personne n'adresse bien, j'en conçois la solution et je la pousse jusqu'au produit en ligne — à chaque fois une première, ou un cran au-dessus de l'existant.

7 projets4 en productionconçus & livrés en solo

Tous développés au LLM, à l'état de l'art —Claude CodeCodexCursor

Voir toute la stack technique

Agrégation dédupliquée des technologies utilisées sur l'ensemble des projets, regroupée par terrain de jeu.

Frontend & UI
Angular 21Angular SignalsAngular SSGAstro 5Fuse.jshls.jsJavaScriptjsPDFNode.jsPostCSSPySide6 (Qt)React 18RxJSSCSSTailwind CSSTailwind CSS 4TypeScriptViteVite 8
Backend & APIs
AxumFastAPIJWT + bcryptOBS WebSocketPydantic v2PythonPython 3.12RustTyper + RichWebSocket
IA, voix & ML
ChatGPT (OpenAI)Claude (Anthropic)CUDAGemini (Google)Ollama / llama.cpp / vLLMOpenAIPyTorchQwen-TTS (Alibaba)Whisper (OpenAI)
Mobile & Cross-platform
AndroidFlutterLinux (X11 / Wayland)PipeWireRustDesk (fork)
Integration & DevOps
DockerEd25519FFmpegNDI SDKOpenCVSQLiteSQLite asynchrone
Autres
CargoCloudflare PagesMCP (Model Context Protocol)Media3 / ExoPlayerMineflayerngx-translatepnpmPWA / Service WorkerSolid 1.9Tauri 2VitestWASMWeb Workers
Projet 01

MultiPOV — visionnage multi-POV synchronisé YouTube, Twitch & Kick

En production

Un produit web public pour regarder plusieurs POV YouTube, Twitch et Kick synchronisés, prolongé par un cœur média Rust/WASM et une app Android validée sur appareil.

  • Produit réel en productionwatchmultipov.app est en ligne : sessions multi-POV partageables, PWA Solid + TypeScript et interface bilingue FR/EN.
  • Cœur média Rust/WASMUn moteur Rust commun porte les règles de sync, de clock, d'offsets, de liveness et de fallbacks ; il est exposé en WASM côté web et compilé en natif côté Android.
  • Session encodée dans l'URLToute la configuration tient dans le chemin /s/, sans compte ni backend de session : un lien collable en commentaire ou en message privé.
  • App Android validée sur appareilL'app Tauri 2 embarque la vraie régie web avec un cœur Rust partagé, des players natifs Media3/ExoPlayer et une sync live validée sur appareil.
RustWASMTauri 2AndroidMedia3 / ExoPlayerSolid 1.9TypeScriptVite 8Cloudflare Pageshls.jsWeb WorkersPWA / Service WorkerVitestCargopnpm

À voir en pratique

Régie multi-POV en production

Ouvre l'application web publique pour tester une session partageable et comparer la synchronisation YouTube, Twitch et Kick en conditions réelles.

Comment ça marche

Produit de visionnage synchronisé multi-POV pour sessions Discord et events : plusieurs POV YouTube, Twitch et Kick dans une même régie, alignés en VOD par sync audio et maintenus par clock/offset. Le web est en production sur watchmultipov.app avec Solid, TypeScript, Vite, PWA et hls.js. Le cœur média actuel est un moteur Rust commun exposé en WASM côté web et compilé en natif côté app. L'app Android Tauri 2 embarque la vraie régie web, s'appuie sur le cœur Rust partagé, des players natifs Media3/ExoPlayer et une sync live validée sur appareil.

  • Sync VOD web : GCC-PHAT mesure les décalages audio, puis une horloge maître et des offsets maintiennent les POV alignés après pause, seek ou changement de layout
  • Cœur Rust commun : moteur média partagé, exposé en WASM côté web et compilé en natif côté Android pour centraliser le timing, les offsets, les capacités provider, les erreurs et les fallbacks
  • Trois plateformes dans une même vue — YouTube, Twitch et Kick — derrière une couche provider unifiée pour que l'interface web/native ne traite jamais une plateforme à part
  • Sessions partageables sans compte, encodées dans le chemin de l'URL (/s/), portables en commentaire ou en message privé
  • Moteur de disposition configurable : grille auto, spotlight, theater et empilements ; glisser, redimensionner et dispositions sauvegardées (localStorage)
  • Mode plein écran immersif : Fullscreen API sur toute la régie, avec verrouillage de l'orientation paysage et Wake Lock pour garder l'écran allumé pendant la lecture
  • Overlay de chat unifié (Twitch/YouTube/Kick) : superposition éphémère repositionnable par POV ou dock latéral, messages fusionnés avec une pastille de couleur par plateforme et alignés sur la timeline en VOD
  • App native Android : Tauri 2, régie web embarquée, cœur Rust commun, players natifs Media3/ExoPlayer et sync live validée sur appareil
  • Méthode : spécifié, implémenté, relu avec Claude/Codex, vérifié en production et sur device avec commits scopés
Projet 02

Aidventures — Plateforme communautaire de jeu de rôle narratif propulsée par IA générative

Lancement production

Et si on concevait un système de jeu de rôle entièrement pensé pour qu'une IA puisse le maîtriser ? C'est Aidventures : une IA incarne le maître de jeu, le moteur garde la main sur les règles.

  • Un système de jeu pensé pour le LLMMécaniques originales (2d6+stat, Vœux & Horloges, GM Moves) et moteur déterministe (HP, momentum, checkpoints) conçus pour qu'un modèle les exécute sans jamais dériver — l'innovation est autant dans le game design que dans le code.
  • Drift gate à 19 invariantsChaque sortie du LLM est validée puis clampée avant d'être appliquée à l'état — la partie reste jouable quel que soit le modèle.
  • Le bon modèle au bon momentHaiku valide et extrait, Sonnet joue le récit, Opus tranche les dilemmes — le tout basculable vers Gemini, OpenAI ou un modèle local.
  • Un cap pour le joueurVœux & Horloges tracent un chemin clair, et à chaque tour le jeu propose trois pistes d'action — ou laisse écrire une réponse en texte libre.
Python 3.12FastAPIWebSocketPydantic v2Claude (Anthropic)Gemini (Google)OpenAIOllama / llama.cpp / vLLMSQLite asynchroneViteDockerQwen-TTS (Alibaba)JWT + bcryptTyper + Rich

À voir en pratique

Lancement de production

Explore l'application web et son parcours de jeu narratif : l'IA mène la partie, tandis que le moteur verrouille les règles et l'état du jeu.

Comment ça marche

Plateforme web de TTRPG textuel multijoueur où une IA générative incarne le maître de jeu. Système de jeu original (2d6+stat, GM Moves, Trait Cards, Vœux & Horloges, 5 modes de pacing) sécurisé par une « drift gate » de 19 invariants qui valide chaque sortie du LLM avant application de l'état. Pensée pour Claude (Anthropic) en première intention, l'application reste utilisable avec Gemini, OpenAI ou un modèle local (Ollama, llama.cpp, vLLM via API OpenAI-compatible) grâce à une architecture d'adaptateurs. La communauté crée ses propres univers via un wizard 11 étapes en 4 phases (import Fandom, génération assistée par IA, profils vocaux, lore par saison/épisode, traduction) et publie après modération. Backend Python 3.12 / FastAPI + WebSocket, SQLite asynchrone, frontend Vite, pool TTS multi-conteneurs Qwen et tier gratuit avec monnaie virtuelle Flares.

  • Système de jeu original « dice-first » : le lancer 2d6+stat est résolu par le moteur AVANT l'appel au LLM (jet figé transmis comme fait établi), Position & Effect déterministes, 5 modes de pacing, Bold Move, HP/Momentum gérés à 100 % côté moteur (jamais par le LLM)
  • Objectifs & horloges pilotés par le LLM : l'agent Architect définit les Vœux (objectifs de 0 à 10) et des Horloges à 4, 6 ou 8 segments — au lancement ou créées dynamiquement en partie — que le moteur fait progresser et agrège de façon déterministe
  • Drift gate à 19 invariants : chaque réponse de l'IA est validée avant patch d'état (clamp automatique en cas de dérive sur HP, momentum, pacing, position, effets)
  • Multi-provider via adaptateurs : optimisé pour Claude (Sonnet pour les tours, Haiku pour la validation et l'extraction, Opus pour les dilemmes moraux), aussi compatible Gemini, OpenAI et modèles locaux (Ollama, llama.cpp, vLLM) via API OpenAI-compatible
  • Création communautaire d'univers : wizard 11 étapes en 4 phases avec import Fandom (scraping → extraction Haiku → builder Sonnet), boutons « AI Generate » par étape, profils vocaux WAV par personnage/langue, enrichissement de lore par saison/épisode et traduction EN ↔ FR
  • Cycle de vie & modération : draft → pending → published → flagged → removed, signalements utilisateurs, procédure de takedown DMCA/LCEN/DSA, notifications email aux créateurs
  • Landing publique + SPA authentifiée : galerie d'univers servie en HTTP cache 60 s, redirection auth sur /app, comptes utilisateurs (JWT, bcrypt, OAuth, magic-link)
  • Tier gratuit avec monnaie virtuelle Flares : crédit à l'inscription, claim quotidien, publicités récompensées (CSP dynamique par utilisateur, exclusion service worker)
  • Audio immersif à voix clonées : pool TTS Qwen multi-conteneurs Docker synthétisant une voix clonée par personnage et par langue (à partir d'un échantillon de référence), avec dispatch least-connections, semaphore par utilisateur, cache LRU des profils vocaux, intro musicale par univers et catalogue de pistes classées par humeur
  • Outils d'observabilité : traces JSONL, replay 0-API, audit narratif/mécanique, tracker de coûts par session, panel admin avec auth HMAC
Projet 03

Nomad — Bureau à distance Joy-Con + voix pour le codage mobile sous Linux

En production

Depuis un Android, tu pilotes Claude Code ou Codex sur ta machine Linux distante : tu dictes tes prompts et le Joy-Con gère la souris et les raccourcis, sans clavier physique.

  • Le téléphone comme poste nomadeL'Android affiche la machine Linux distante ; le Joy-Con tenu dans l'autre main pilote la souris avec son stick et déclenche les raccourcis CLI par combinaisons de boutons.
  • La voix qui code, en un clicDepuis l'Android, un clic lance la dictée : le STT local transcrit la parole et l'injecte directement dans Claude Code, Codex ou un autre CLI sur la machine Linux.
  • Le daemon fait tout le sale boulotDès qu'un client RustDesk se connecte, l'écran, l'audio et la transcription vocale sont orchestrés automatiquement côté Linux.
  • De l'idée à la prod, seulFork RustDesk patché, serveur de licence Ed25519 autonome et site de distribution bilingue — un produit complet pensé bout-en-bout.
RustAxumSQLiteEd25519RustDesk (fork)FlutterAstro 5Tailwind CSS 4Linux (X11 / Wayland)PipeWire

À voir en pratique

Produit et distribution

Découvre le produit et son site de distribution : un Android, la voix et un Joy-Con deviennent une interface complète pour coder sur Linux à distance.

Comment ça marche

Solution de bureau à distance dédiée au développement vocal depuis un terminal Android, permettant de piloter une machine Linux comme si l'on était devant l'écran. Différenciant clé : intégration native du Joy-Con Nintendo Switch comme périphérique d'appoint — le téléphone reste libre pour la dictée vocale tandis que le Joy-Con (tenu dans l'autre main) gère le déplacement de la souris via le stick analogique et déclenche les raccourcis grâce à des profils de touches configurables (Claude code, Open code, codex...), couvrant l'essentiel des actions de ces cli sans jamais lâcher le téléphone. L'écosystème combine un daemon Linux qui orchestre automatiquement écran, audio et transcription dès qu'un client mobile se connecte via RustDesk, un fork RustDesk patché (mapping gamepad Joy-Con, voice call, rebranding), un serveur de licence autonome Axum + SQLite + Ed25519 avec gestion des grâces hors-ligne et d'expiration, et un site de distribution bilingue FR/EN. Concept produit complet, conçu et mis en œuvre de bout en bout, de la proposition initiale jusqu'à la mise en production sur nomadrust.dev.

  • Conception du concept : utiliser un Android comme terminal vocal pour piloter un poste Linux distant via RustDesk
  • Intégration Joy-Con Nintendo Switch : périphérique d'appoint optimal qui libère le téléphone pour la dictée — déplacement souris via stick analogique et raccourcis clavier déclenchés par combinaisons de boutons
  • Profils de touches configurables (Claude code, Open code, codex...) offrant un nombre d'actions suffisant pour piloter ces CLI sans clavier physique
  • Dictée vocale pour parler au LLM : l'appli Android ouvre un appel vocal (voice call RustDesk) vers le daemon, qui transcrit la voix en local (Voxtype / Whisper large-v3-turbo) et injecte le texte comme frappe clavier (wtype sur Wayland, xdotool sur X11) directement dans le CLI voulu (Claude Code, Codex…) — on parle, le texte s'écrit dans le terminal
  • Daemon Linux orchestrant automatiquement écran, audio et transcription dès qu'un client mobile se connecte
  • Fork RustDesk avec patches dédiés (mapping gamepad Joy-Con, voice call, rebrand)
  • Serveur de licence autonome (Axum + SQLite + Ed25519) avec grâces hors-ligne et expiration
  • Site web bilingue FR/EN (Astro 5 + Tailwind CSS 4) pour la distribution
  • Décision produit assumée : pricing simple (5 €/mois ou 50 € lifetime), pas de trial, scope V1.0 Linux uniquement
Projet 04

Portfolio professionnel Angular — SSG Angular 21 et Lighthouse 100/100

Production

Un portfolio pensé comme un produit : SSG, SEO et performance au cordeau, bilingue et vivant.

  • Lighthouse 100/100Architecture SSG Angular 21 et Core Web Vitals tenus (LCP < 2,5 s, INP < 200 ms, CLS < 0,1) sur chaque page.
  • Une vraie image chaque jourChaque jour, le pipeline sélectionne une vraie image astronomique de NASA APOD, ESA/Hubble, ESA/Webb ou ESO, puis écarte les visuels plats, annotés ou répétés grâce à des filtres dédiés.
  • Fond animé performantFragments Voronoi, scintillements, champ d'énergie et étoiles filantes donnent de la profondeur ; la palette du jour se fond dans les surfaces, cartes et accents sans sacrifier la fluidité.
  • Easter egg stellaireUne étoile filante traverse parfois l'écran, avec une couleur prélevée dans les zones lumineuses et une légère traînée répercutée dans les fragments.
Angular 21TypeScriptTailwind CSS 4Angular SSGngx-translateRxJSAngular SignalsSCSSPostCSSjsPDF

À voir en pratique

Le fond animé, en direct

Compare l'image source avec le rendu animé et ses effets intégrés.

Comment ça marche

Site web portfolio moderne développé avec Angular 21 et optimisé pour le référencement naturel. Architecture SSG (Static Site Generation) pour performance maximale et visibilité moteurs de recherche. Interface bilingue FR/EN avec fond cosmique mis à jour quotidiennement, animation multi-couches et fallback statique lorsque les capacités ou préférences de l'appareil le demandent. Design responsive avec Tailwind CSS 4 et générateur de CV PDF dynamique.

  • Architecture SSG (Static Site Generation) Angular 21 pour indexation SEO optimale
  • Performance Core Web Vitals : LCP < 2.5s, INP < 200ms, CLS < 0.1
  • Score Lighthouse 100/100 sur performance, accessibilité, bonnes pratiques et SEO
  • Switch bilingue FR/EN via routes canoniques : FR sur /, EN sur /en/*
  • Fond cosmique quotidien multi-sources : un script (images:fetch via GitHub Actions) sélectionne chaque jour une vraie image issue de NASA APOD, ESA Hubble, ESA Webb ou ESO Picture of the Week ; filtres de luminosité et d'entropie, garde OCR, whitelist des hôtes, denylist et garde anti-stagnation écartent les images plates, annotées ou répétées, avec fallback sur cache local
  • Fond animé en couches : environ 300 fragments Voronoi modulés par un champ d'énergie, scintillements détectés sur les zones lumineuses et étoiles filantes occasionnelles
  • Animation sous contrainte : boucle d'énergie plafonnée à 30 FPS, calcul des fragments déporté dans un Web Worker, chargement différé et désactivation sur les profils mobiles ou à faible capacité
  • Design glassmorphism : surfaces translucides en backdrop-filter (blur + saturate), rotation de teinte par carte et échantillonnage du fond (photo-tint) pour des reflets cohérents
  • Animations CSS progressives entre les pages et au scroll, avec respect du mouvement réduit
  • Générateur de CV PDF dynamique : création à la volée d'un CV stylisé depuis les données JSON avec jsPDF
  • Intégration Tailwind CSS 4 avec design responsive mobile-first et animations fluides
  • Optimisation images WebP + lazy loading pour temps de chargement minimal
  • Meta tags dynamiques, Open Graph, Twitter Cards et JSON-LD pour SEO et partage social optimisés
  • CI/CD GitHub Actions : build statique pré-rendu et déploiement SFTP automatiques sur chaque push
  • Architecture moderne : Angular Signals, composants standalone, pré-rendu statique et cache HTTP
Projet 05

Analyseur Intelligent de Podcast — IA générative et transcription multi-moteurs

En développement

Transformer des heures de podcast en données structurées et cherchables, avec un budget d'API maîtrisé.

  • Anti-hallucination WhisperDétection et correction des erreurs de transcription qui réduisent de 55 % les appels à l'API tout en préservant la précision.
  • Métadonnées extraites par IAInvités, sujets et moments clés sortis automatiquement avec des timestamps précis, prêts pour une recherche floue en temps réel.
PythonReact 18TypeScriptChatGPT (OpenAI)Whisper (OpenAI)PyTorchFFmpegCUDAViteTailwind CSSFuse.jsSQLite

À voir en pratique

Démo en développement

Ouvre la démo pour parcourir la recherche dans les transcriptions et les métadonnées extraites par IA à partir de catalogues de podcasts.

Comment ça marche

Plateforme d'analyse automatique de contenu podcast utilisant l'IA pour transformer l'audio en transcription puis en données structurées. Transcription haute précision via Whisper (2h de processing par heure d'audio) et analyse avec ChatGPT et prompt précis le tout dans une interface React moderne. Projet personnel ayant traité 20% du catalogue Floodcast et 10% du podcast TFTC.

  • Transcription multi-moteurs : Whisper local (GPU/CPU) + API OpenAI avec découpage automatique des gros fichiers
  • Système anti-hallucination : détection/correction erreurs Whisper (-55% appels API)
  • Extraction métadonnées IA : invités, sujets, moments clés avec timestamps précis
  • Interface React 18 + TypeScript mobile-first avec recherche floue Fuse.js temps réel
  • Accélération GPU CUDA automatique (8-15x plus rapide sur RTX)
  • Widget Spotify intégré avec lecture synchronisée sur timestamps
  • CLI avancée : 25+ commandes avec mode batch pour traitement en lot
  • Architecture Clean : services découplés, factory pattern, injection de dépendances
Projet 06

Système d'automatisation vidéo NDI — Détection visuelle temps réel et pilotage OBS Studio

En développement

Automatiser une régie de stream en temps réel : la vidéo déclenche elle-même les changements de scène OBS.

  • Détection visuelle à 100 msUn pipeline OpenCV accéléré CUDA repère des patterns dans des zones configurables et pilote OBS via WebSocket, sans intervention.
  • Zones en glisser-déposerL'opérateur dessine ses zones de détection et leur mapping vers les actions OBS dans l'interface, sans toucher au code.
PythonPySide6 (Qt)OpenCVNDI SDKOBS WebSocketCUDA
Comment ça marche

Application d'automatisation pour production vidéo live et streaming personnel (Call of Duty, TikTok). Détection de patterns visuels en temps réel sur flux NDI avec automatisation OBS Studio (latence 100ms). Interface PySide6 avec traitement d'images OpenCV + accélération GPU CUDA pour performances optimales.

  • Capture de flux vidéo NDI haute performance sur réseau IP
  • Détection de patterns visuels par intelligence artificielle (OpenCV + CUDA)
  • Automatisation complète d'OBS Studio (changements de scènes, contrôle de sources)
  • Interface graphique avancée avec prévisualisation temps réel
  • Système de zones de détection personnalisables par glisser-déposer
  • Support GPU CUDA pour traitement d'images haute performance
Projet 07

Bot Minecraft autonome — comprendre comment donner des règles et du contexte à un LLM

Bac à sable

En faisant jouer un LLM à Minecraft pour le plaisir, j'ai compris comment lui donner des règles et le bon contexte — la base que j'ai reprise dans Aidventures et dans ma façon de développer avec Claude Code.

  • LLM = cerveau, bot = bras muetLe bot n'exécute que des actions atomiques et ne décide rien ; toute la stratégie vit dans le LLM. Aucune logique de décision cachée dans le code.
  • Des senseurs, pas des ordresÀ chaque bloc cassé, on renvoie le contexte brut — nouveaux blocs, eau, vide, dangers — et le LLM raisonne sur ces données plutôt que sur des instructions figées.
  • La qualité tient aux règlesFaire des escaliers, miner une veine sans perdre les drops : le résultat dépend entièrement de la justesse des règles fournies au modèle.
Node.jsMineflayerMCP (Model Context Protocol)Claude (Anthropic)SQLiteJavaScript
Comment ça marche

Bot Minecraft autonome piloté par un LLM via le Model Context Protocol (MCP). Architecture « atomique » volontairement stricte : le bot Mineflayer n'est qu'un bras exécuteur (actions unitaires, aucune décision), tandis que le LLM raisonne sur des données brutes remontées par des senseurs (blocs découverts, dangers, inventaire, niveaux Y) pour décider quoi miner, construire ou fuir. Trois serveurs MCP séparent les actions, la connaissance Minecraft (recettes, Y-levels, outils) et une mémoire spatiale persistante en SQLite. Projet d'apprentissage qui m'a fait comprendre, par le jeu, comment formuler des règles explicites et fournir le bon contexte à un LLM — une compétence directement réinvestie dans la drift gate d'Aidventures et dans ma manière de cadrer le développement assisté par Claude Code.

  • Architecture atomique : le bot exécute des actions unitaires (creuser, poser, équiper) et ne prend aucune décision — tout le raisonnement est délégué au LLM
  • Senseurs renvoyant des données brutes (blocs autour, eau/vide, dangers, niveaux Y optimaux, inventaire) plutôt que des ordres, pour que le LLM raisonne sur le contexte réel
  • Trois serveurs MCP séparés : actions, connaissance Minecraft (recettes, Y-levels, outils) et mémoire spatiale persistante en SQLite (escaliers, maisons et veines déjà connus)
  • Règles de gameplay explicites (ordre de minage d'une veine, technique d'échafaudage pour ne pas s'enfermer) montrant que la qualité du résultat dépend de la qualité des règles données
  • Agents parallèles (perception, sécurité, raisonnement) qui collectent et analysent l'état du monde avant chaque action