Projets construits

Quand un truc m’agace,
je construis la solution.

Ma manette ne marchait pas sur Mac, ma télé LG affichait des pubs, Instagram m’aspirait dans les Reels alors que je voulais juste répondre à un message. Chaque fois, j’ai codé ce qu’il fallait. Voici des outils qui tournent au quotidien, chez moi et chez mes proches. Quelques-uns sont publiés pour tout le monde.

  • Local d’abord. Pas de compte ni de serveur tiers quand ce n’est pas nécessaire.
  • Rien dans votre dos. Lecture seule par défaut, et une validation humaine avant toute action.
  • Testé sur le vrai matériel. Un projet est fini quand il marche dans le salon, pas seulement en test.

Sur l’établi

Des outils qui
servent vraiment.

Chacun est né d’un vrai problème : à la maison, en jeu ou en cours.

Écran d’accueil TV Home sur une télé LG : un film mis en avant en plein écran, la chaîne en direct, une rangée d’applications et les sources HDMI Page de contrôle TV Home sur téléphone, onglet Découvrir : une affiche de film à noter avec les boutons Passe, Pas vu, Neutre, Intéressé et J’aime

MAISONTourne tous les jours sur la télé du salon · open source (MIT)

TV Home

Un accueil façon Apple TV pour une télé LG, sans les pubs.

  • App webOS qui s’ouvre toute seule à l’allumage de la télé.
  • Un compagnon en Rust sur un vieux portable recyclé en serveur maison, qui pilote la télé par l’API réseau de LG.
  • Guide TNT avec rappels : une alerte s’affiche par-dessus n’importe quelle appli et change de chaîne en un clic.
  • Sur le téléphone : télécommande complète, aperçu en direct de l’écran, et suggestions de films et séries à noter selon nos abonnements.

webOS · Rust (tokio, axum) · API LG SSAP · TMDB · PWA · systemd

Panneau de réglages de YouTube AdFree : cases à cocher pour le blocage des pubs, SponsorBlock et ses catégories, la qualité des miniatures et le retrait des Shorts

PUBLIÉFork open source (GPL-3.0) · installé sur ma télé

YouTube AdFree

YouTube sans pub sur la télé, sans toucher à l’appli officielle.

  • Basé sur youtube-webos : blocage des pubs, SponsorBlock, plus de Shorts ni d’écrans de fin, résolution maximale forcée.
  • Ma version s’installe à côté de l’appli YouTube officielle au lieu de la remplacer.
  • Le cast depuis le téléphone et les assistants vocaux continuent de viser l’appli officielle.
  • Une tuile dédiée dans TV Home, et les réglages s’ouvrent avec la touche verte de la télécommande.

JavaScript · webOS · webpack et Babel pour le navigateur de la télé · paquet .ipk

CE QUI RESTE, CE QUI DISPARAÎT

gardé
les messages privés, sur deux comptes au besoin
gardé
les notifications, uniquement pour les messages
retiré
le fil, les Reels, Explorer et les stories
bloqué
le défilement d’un reel partagé vers les suivants

Pas de capture ici : chaque écran utile montre de vraies conversations.

PUBLIÉApplication Android · APK v1.0

DM Insta

Instagram réduit à la messagerie : on ouvre, on répond, on ferme.

J’ouvrais Instagram pour répondre à un message et j’en ressortais vingt minutes de Reels plus tard. DM Insta affiche uniquement la messagerie d’Instagram. Toute page hors des messages renvoie vers la boîte de réception, et un reel partagé en message s’ouvre seul, sans enchaîner sur les suivants.

Java · WebView Android · NotificationListenerService · sans API privée

Page de test de l’extension Afterglow pour Luna : manette connectée, boutons A, X, RB et flèche droite allumés, barres des sticks et des gâchettes partiellement remplies

JEUXFonctionne sur macOS 27, Apple Silicon · open source (MIT)

Afterglow pour Luna

Ma manette n’existait pas pour mon Mac. J’ai écrit le pilote dans une extension de navigateur.

  • macOS ignore la manette filaire PDP Afterglow : le pilote d’Apple ne gère que les manettes Microsoft.
  • L’extension lui parle directement en USB, traduit le protocole Xbox et la présente à Amazon Luna comme une manette standard, vibrations comprises.
  • Aucun pilote système à installer, et rien ne s’exécute hors des pages de Luna.
  • Une page de test montre chaque bouton en direct. Résultat : Control se joue sans souci.

JavaScript · WebUSB · Gamepad API · Manifest V3

Documentation du pont manettes PowerA pour les portages nxnative : la bibliothèque padbridge chargée dans le moteur du jeu, et l’installation en une commande

JEUXFonctionne sur macOS 27, Apple Silicon · open source (MIT)

Manettes PowerA pour les jeux Switch portés sur Mac

Mes jeux Switch tournent en natif sur Mac grâce à nxnative, mais mes manettes PowerA restaient invisibles. J’ai écrit le pont.

  • Les portages nxnative ne lisent que les manettes reconnues par macOS (Xbox, Joy-Con, DualSense). Les PowerA filaires n’y apparaissent pas.
  • Une petite bibliothèque, chargée au lancement du jeu, lit les PowerA en direct et les branche sur le moteur, disposition Switch conservée.
  • Elle cohabite avec les autres manettes : deux PowerA, des Joy-Con et une manette Xbox, c’est quatre joueurs.
  • Un script l’installe dans tous les jeux en une commande, et la retire en remettant chaque appli exactement comme avant. Super Mario 3D World se joue à plusieurs.

C · IOKit HID · rétro-ingénierie du moteur (Ghidra) · Bash

Fenêtre de vérification de Cartes vers Anki : six cartes à importer, doublons signalés, éditeur de texte à trous

PUBLIÉChrome Web Store · open source (MIT)

Cartes vers Anki

Les cartes de révision générées par ChatGPT, dans Anki en un clic.

  • Un bouton apparaît sous la réponse : « Ajouter N cartes à Anki ». Plus de copier-coller.
  • Doublons repérés avant l’import, exacts ou reformulés, par comparaison locale sans IA.
  • Relecture dans un éditeur visuel, textes à trous compris.
  • 100 % local : aucun compte, aucun serveur, aucune télémétrie.

Extension Chrome, Brave, Edge · Manifest V3 · AnkiConnect

LocalPDF sur l’outil Réordonner les pages : six miniatures d’un PDF d’exemple, une page sélectionnée et déplacée, avec la mention 100 % côté client

PUBLIÉApplication web gratuite · open source

LocalPDF

Les outils PDF du quotidien, sans envoyer vos fichiers à un inconnu.

Les sites gratuits de manipulation de PDF demandent presque tous d’uploader le document. LocalPDF fait le même travail entièrement dans le navigateur : fusionner, découper, réordonner, pivoter, numéroter, filigraner. Il fonctionne hors ligne une fois chargé, sans cookie ni statistiques.

TypeScript · traitement côté client · image Docker disponible

Résultat d’un passage de Marktplaats Market Watch : tableau d’annonces d’exemple avec leur statut (new, price_dropped, price_increased, disappeared), l’ancien et le nouveau prix et la variation en pourcentage

PUBLIÉPublic sur la place de marché Apify

Marktplaats Market Watch

Une veille d’annonces qui ne remonte que ce qui a bougé.

La plupart des scrapers de Marktplaats.nl renvoient la même liste à chaque passage. Celui-ci garde l’historique de chaque recherche et ne signale que les nouvelles annonces, les changements de prix et les disparitions. Les annonces inchangées ne sont ni renvoyées ni facturées, et le budget est plafonné.

Python · Apify Actor · 50 tests automatisés

Autour de mon agent IA

Plus petits,
tout aussi utiles.

J’utilise chaque jour un agent IA personnel. Ces outils le rendent plus visible, plus sûr et plus facile à piloter.

Bureau 3D d’Hermes Office 3D en mode démo : des personnages à leurs postes pour chaque session et deux sous-agents autour d’une table de réunion

OPEN SOURCE

Hermes Office 3D

Un bureau 3D où chaque session active de mon agent IA devient un personnage, et chaque sous-agent un collègue en réunion. En lecture seule : aucun prompt ni contenu ne sort du serveur local.

TypeScript · Three.js · serveur Python sans dépendance

Code source ↗
Schéma d’architecture : ChatGPT passe par le tunnel MCP sécurisé d’OpenAI jusqu’à un wrapper local qui pilote l’agent Hermes, avec la liste des 12 outils exposés

OPEN SOURCE

chatgpt-hermes-a2a

ChatGPT qui délègue des tâches à mon agent local, via un tunnel MCP sécurisé. Aucun port de l’agent n’est exposé sur Internet.

Node.js · MCP · 12 outils

Code source ↗
Terminal : emdash-guard détecte trois tirets cadratins dans un fichier, les corrige, puis un second contrôle passe sans erreur

OPEN SOURCE

emdash-guard

Un plugin d’agent qui retire les tirets cadratins de tout ce que l’IA écrit, avec un outil en ligne de commande pour nettoyer des fichiers. Une garantie testée plutôt qu’une consigne oubliée.

Python · plugin Hermes · CLI

Code source ↗

Le tiroir à outils

La plomberie
qui fait tourner le reste.

Des projets plus ciblés, souvent faits en quelques soirées pour régler un problème précis.

hermes-desktop-kit

Des améliorations pour l’application de bureau de mon agent, réappliquées automatiquement après chaque mise à jour.

GitHub ↗

Donut Unit Price

Un mod Minecraft pour le serveur DonutSMP qui affiche le prix à l’unité des lots dans les enchères et les commandes. Volontairement passif : aucun clic, aucune requête réseau.

o2switch-cli

Piloter mon hébergement depuis le terminal : DNS, adresses mail, SSL. Chaque écriture montre d’abord ce qui va changer, puis vérifie la zone après coup.

GitHub ↗

Et dans votre entreprise ?

Des demandes de devis
qui prennent trop de temps ?

Même démarche que pour ces outils : un vrai problème, mesuré d'abord, puis la solution la plus simple qui tourne. Pour une PME, cela commence par l'audit Demande → Devis, en 5 jours, à 1 490 € HT.

Commander l'audit → Ou écrivez-moi : contact@yoanancelly.fr