Ressusciter des projets qu’on n’aurait jamais terminés autrement grâce aux outils d’assistance au code
(blog.matthewbrunelle.com)- Les projets personnels qui traînent depuis longtemps se prêtent bien aux essais d’outils d’assistance au code, car l’objectif est moins d’apprendre du neuf que de finir l’implémentation
- Le shim exposant YouTube Music via l’API OpenSubsonic a été réimplémenté pour permettre à différents clients Subsonic de s’y connecter de la même manière
- Après avoir d’abord fixé une structure minimale et des conventions d’implémentation, le travail a avancé par courtes itérations, en combinant génération de stubs à partir du schéma OpenAPI et tests de connexion avec de vrais clients
- La première implémentation, conforme au schéma seulement en apparence, a immédiatement cassé en conditions réelles, puis a été améliorée jusqu’à permettre la recherche et la lecture, à force de vérifier les logs de requêtes et d’ajouter des tests unitaires
- Quand il ne s’agit pas d’un projet d’apprentissage ambitieux, mais d’un projet qu’on aimerait simplement voir exister, les outils d’assistance au code peuvent grandement aider à transformer une tâche repoussée en service réellement utilisable
Contexte du projet et approche
- Un projet personnel abandonné depuis longtemps puis repris s’est révélé bien adapté pour tester des outils d’assistance au code basés sur l’IA
- Le projet relancé était un shim reliant YouTube Music et l’API OpenSubsonic
- OpenSubsonic servait de contrat d’API permettant de dissocier clients et serveurs de streaming musical
- Le serveur utilisé était Navidrome, le client desktop Feishin, et sur Android Symfonium
- Le shim expose YouTube Music selon l’API OpenSubsonic afin de permettre la connexion depuis n’importe quel client
ytmusicapiservait à récupérer les métadonnées, etyt-dlpétait invoqué de façon programmatique pour le streaming- Le streaming de base a été connecté assez facilement, mais il restait une longue traîne de travail pour implémenter tous les endpoints conformément au standard
- Ce projet se prêtait bien aux outils d’assistance au code, car il reposait moins sur un problème nouveau ou original que sur une implémentation fidèle d’un schéma clair
- L’expérience a été menée comme une réimplémentation complète depuis zéro avec Claude Code et Opus 4.6
Mise en place initiale
- Le point de départ était un projet minimal à la structure volontairement contrainte
- Un projet
uva été créé, avecfastapi,pydantic,ytmusicapietyt-dlpajoutés comme dépendances main.pya été remplacé par un fichier principal d’exemple FastAPI et le schéma OpenAPI d’OpenSubsonic a été placé dans le dossier- Le README contenait brièvement le rôle du serveur, les bibliothèques utilisées, les URL de documentation et l’emplacement de
openapi.json - Un fichier TODO vide a été ajouté, puis
CLAUDE.mda été généré via/init
- Un projet
CLAUDE.mdregroupait séparément les conventions d’implémentation afin de réduire les consignes répétitives- Des annotations de type et des docstrings étaient exigées pour les arguments et valeurs de retour des méthodes
- La modélisation des données suivait les conventions de Pydantic V2
- Les docstrings devaient utiliser le style Google avec sections args et returns
- Les tests suivaient un style pytest moderne avec fonctions de haut niveau,
assertet fixtures
- Ce point de départ a été regroupé dans un git repository
Flux d’implémentation du MVP
- La méthode de travail reposait sur un mode planification et de courtes itérations
- La tâche suivante était formulée dans un prompt, puis le plan initial était revu pour identifier oublis ou problèmes
- En cas d’écart, des liens vers des ressources pertinentes étaient ajoutés, ou bien un outil de recherche était utilisé pour trouver une approche plus idiomatique s’il existait plusieurs options
- Après chaque tâche,
"Accept and clear context"était utilisé pour vider le contexte avant de recommencer
- La première implémentation s’est concentrée sur la création de stubs pour les nouveaux endpoints JSON à partir du schéma OpenAPI
- Les anciens endpoints XML et les nouveaux endpoints JSON coexistaient, mais le périmètre a été limité à la nouvelle version
- Après l’implémentation, une étape de validation vérifiait de nouveau que toutes les méthodes correspondaient bien
- Malgré la présence du schéma, des erreurs sont apparues au premier essai, dont la plupart ont été détectées au deuxième contrôle
- Après les gros changements,
/initétait relancé afin de mettre à jourCLAUDE.mden fonction du nouvel état du projet - L’étape suivante a consisté à définir et raccorder un minimum fonctionnel avec recherche et streaming
- L’objectif minimal était de permettre à un client Subsonic de rechercher et lire des morceaux
- La recherche utilisait
ytmusicapi, et le streamingyt-dlp
Problèmes révélés en conditions réelles et ajustements
- Une implémentation qui semblait convaincante en surface a été obtenue rapidement, mais elle s’effondrait immédiatement lors d’une connexion réelle à Feishin
- Le client a été testé directement, puis les logs de requêtes serveur ont été transmis à Claude Code pour corriger par itérations
- Certains écarts de détail n’apparaissaient pas dans le schéma seul ; par exemple, il fallait supprimer le suffixe
.viewdes endpoints
- À chaque erreur, de nouveaux tests unitaires étaient ajoutés pour éviter les régressions
- Après seulement quelques itérations, l’audio a réellement commencé à se lire dans Feishin
- Le problème principal venait du fait que les endpoints stub ne renvoyaient rien du tout
- La plupart des endpoints ont dû être modifiés pour renvoyer une réponse structurellement valide, même vide
- Cela dit, ce niveau de MVP ne différait pas beaucoup de l’ancien POC, et l’utilisabilité réelle dépendait encore du long travail de finition à venir
Longue traîne de travail et extension à l’ensemble des fonctionnalités
- D’après la documentation OpenSubsonic, l’API comptait environ 80 endpoints répartis en 15 catégories
- Le périmètre nécessaire au MVP était relativement réduit
getLicense,getUser,getGenres,getMusicDirectoriesrenvoyaient des collections vides mais validesgetSongétait traité en pass-through, en renvoyant simplement l’ID des paramètres de requête avec des valeurs par défaut complétéessearch3était implémenté via un simple appel àytmusicapistreamextrayait une URL au format"bestaudio"à partir d’un appelyt-dlpenveloppé dansasyncio.to_threadgetCoverArtrécupérait l’URL de l’image de couverture viayt-dlp
- Du travail supplémentaire a été nécessaire pour prendre en charge l’ensemble des fonctionnalités d’un client Subsonic
- Un simple cache mémoire a été ajouté aux appels
ytmusicapipour éviter les limitations d’usage sqlitea été utilisé pour stocker les métadonnées musicales, et tous les endpoints de la catégorie browsing ont été implémentésgetTopSongsa aussi été géré en interrogeant la liste des top songs
- Un simple cache mémoire a été ajouté aux appels
- Pendant le streaming, les morceaux étaient enregistrés sur disque pour éviter les retéléchargements
- Si le client coupait la connexion à l’endpoint de stream avant la fin du téléchargement, un traitement supplémentaire était nécessaire pour nettoyer les fichiers incomplets
- Tout cela aurait pu être fait à la main à l’origine, mais ne l’avait jamais été ; et faute de plan de déploiement, des aspects plus difficiles comme l’authentification ont encore été laissés de côté
- Au final, un service fonctionnel auquel des clients Subsonic pouvaient se connecter a été construit sur de courtes soirées, sous le nom de
Sub-standard
Dans quels cas cet usage est pertinent
- Plutôt que de pousser systématiquement les outils d’assistance au code, des inquiétudes subsistaient aussi quant à une baisse de compétence liée à la dépendance
- Les projets personnels se répartissaient globalement en deux catégories
- Les stretch projects destinés à apprendre et progresser
- Les projets qu’on aimerait simplement voir exister
- Ce projet-ci appartenait à la seconde catégorie, et les outils d’assistance au code se sont bien prêtés à la matérialisation d’un souhait resté inachevé jusque-là
- Cela a permis d’obtenir un projet qui, autrement, n’aurait probablement jamais été entamé, avec une sensation proche de celle de faire enfin diminuer une pile de livres jamais lus
- Le critère important n’était pas tant de faire des projets de la seconde catégorie, mais de continuer en parallèle les projets d’apprentissage de la première catégorie
1 commentaires
Réactions sur Hacker News
Les projets abandonnés que j’ai le plus souvent sont des jeux vidéo
J’ai des dizaines de dossiers de projets interrompus, et maintenant je les reprends comme des expériences
La semaine dernière, j’en ai relancé un avec Claude, et ça a vraiment bien collé, ça m’a même remis dans la bonne direction
Comme je lui avais dit dès le départ que c’était un projet abandonné, il m’a poussé à finir d’abord la boucle de gameplay V0, puis à l’élargir à partir de là une fois le fun trouvé, ce qui m’a évité de laisser tomber
Je lui donnais des idées de game design et il produisait du code fonctionnel, je lui donnais des articles sur des algorithmes procéduraux et il allait jusqu’à l’implémentation, il aidait aussi au brainstorming des objets, créait des assets graphiques, et allait même jusqu’à aider à construire le lore
La combinaison Claude Code + Godot est vraiment amusante, et ça faisait longtemps que je ne m’étais pas autant amusé à utiliser un ordinateur
Je ne critique pas, mais je trouve ça à la fois assez intéressant et légèrement inconfortable
J’avais des dizaines de dossiers d’expériences, et pas mal d’entre eux deviennent maintenant de vrais projets
Certains tournent désormais, d’autres restent encore trop complexes pour ce qu’un agent peut gérer
Mais malgré tout, créer des apps personnelles devient de plus en plus facile
On va sans doute bientôt arriver à un niveau où l’on pourra dire : « Alexa, prends une photo de la nourriture dans mon frigo, collecte les informations nutritionnelles, synchronise-les avec mon app de sport, compare les ingrédients avec les objectifs de mon app santé, puis envoie-moi par e-mail de meilleurs ingrédients selon mon budget, ma région et mes contraintes alimentaires, le tout dans une app iPhone » et obtenir l’app en 15 minutes
Par exemple, j’ai eu plusieurs fichiers tres incorrects, et laisser le LLM générer les ID me paraît aussi assez instable
L’idée est de superposer dessus une sorte de narration en direct
Les modèles locaux sont encore lents et limités, mais c’est quand même assez intéressant de voir ce que ça peut produire
C’est vraiment excellent
Il y a maintenant énormément de logiciels personnels
Hier, j’ai créé un éditeur de texte natif complètement intégré à MediaWiki, avec auto-complétion des liens et aide à la saisie de la syntaxe
Ce genre de logiciel n’a presque aucune valeur pour les autres, donc personne n’aurait de raison de le faire à part moi, et avant je ne le faisais pas non plus parce que ça prenait beaucoup trop de temps
Mais quand on confie le code à un agent, le goulot d’étranglement n’est plus l’implémentation mais mon attention, et ça marche très bien de glisser ce genre de tâches personnelles dans les créneaux libres de mon cerveau
J’ai vraiment l’impression que c’est une très bonne époque
L’IA m’a permis de dépasser le burn-out post-COVID et la pile de projets à moitié faits
Aujourd’hui, j’ai aussi réparé un outil RDP lié au terminal, et je reprends un ticket ouvert sur OpenRA il y a 10 ans
Le moteur est 10 fois plus rapide, et le pathfinding fonctionne désormais correctement dans la plupart des cas
J’ai environ 120 outils personnels, et c’est tout à fait vrai que le goulot d’étranglement est passé de l’implémentation au changement de contexte
Du coup, maintenant je mets un fichier markdown à la racine de chaque projet, et à chaque arrêt j’y note l’état courant et l’étape suivante
Comme ça, quand j’y reviens, je ne paie pas 20 minutes de coût de reconstruction mentale à me demander : « Où est-ce que j’en étais déjà ? »
Comme de toute façon personne d’autre ne les utilise, je n’ai ni pression sur les edge cases ni sur la documentation, je règle précisément mon problème puis je passe au suivant
Quand on voit l’explosion de productivité actuelle, il a sans doute déjà fallu pas mal de temps rien que pour accumuler autant de petits besoins en attente
C’en est presque drôle tellement c’est niche
Je savais déjà coder, mais je manquais de temps, et l’IA a été un vrai game changer qui m’a enfin permis de publier des projets open source
Je m’amuse maintenant à créer des apps GUI locales pour Linux que je n’avais jamais eu la motivation de faire auparavant
Une app GUI Linux pour administrer à distance un Samba 4 Active Directory Domain Controller
Une app GTK3 en barre système pour la gestion des tickets Kerberos, destinée aux environnements GTK utilisant Linux Mint / Cinnamon et GtkStatusIcon
Parce que ce sont exactement les genres d’apps que je cherchais et dont j’avais réellement besoin
Grâce aux assistants de code, on peut maintenant tenter des changements structurels profonds, y compris dans la conception modulaire, avec beaucoup moins de temps qu’avant
Évidemment, ce n’est pas sans contrepartie, et certains modèles produisent souvent du code qui ne répond pas aux standards de maintenabilité
Ce n’est pas parce qu’on gagne du temps à l’écriture que le temps passé à corriger en boucle, nettoyer, et renforcer le system prompt ou les fichiers d’instructions disparaît
Je ne suis pas vraiment d’accord avec l’idée qu’à trop utiliser ces outils on risque de se déqualifier
Je suis un millennial, et je fabrique des meubles avec des outils à main et de vieilles techniques d’assemblage du bois
Je n’ai appris ça de personne directement, je me suis juste formé avec des ressources en ligne, et au final j’ai quand même pu apprendre ce dont j’avais besoin
Si je n’ai pas peur de perdre cette compétence plus tard, c’est aussi parce que je pourrai toujours la réapprendre si nécessaire
Les livres, les vidéos, les outils et le bois ne vont pas disparaître
Utiliser l’IA ne crée pas un trou noir dans le cerveau sous prétexte qu’on tape moins souvent le code à la main
Ce n’est pas comme Alzheimer, où l’information serait perdue pour toujours ; il faut juste un peu de temps pour se remettre dedans, puis ça revient vite
Même les gens qui ont quitté le code pour du management pendant quelques années s’y remettent ensuite, juste un peu rouillés
Surtout pour des projets perso, il n’y a même pas besoin de brûler des tokens Opus
Un abonnement bon marché, quelque chose comme MiniMax, un conteneur en mode yolo, plus du contexte, des prompts, de la recherche web et un système de tickets type beads, suffisent
Comme ce n’est pas urgent, on peut respecter l’enchaînement brainstorm → plan → implementation → testing, et à condition d’avoir de vrais moyens de test plutôt que seulement des mocks ou des unit tests, on peut finir le projet en économisant du temps et de l’argent
Il y a 12 ans, j’avais voulu faire une petite app qui montre, avec des barres, combien il me reste de journée, de semaine et de mois, et qui affiche aussi la météo sous forme de barres pour les températures min/max, la couverture nuageuse, etc.
J’étais arrivé à quelque chose en texte et en ASCII, mais je n’avais pas réussi à créer une interface assez bonne pour avoir envie de l’utiliser chaque jour, et je n’avais jamais réussi à faire une vraie GUI graphique
J’ai donc décrit à Claude Code l’interface graphique que je voulais et je l’ai laissé faire, et il a produit exactement l’app que j’avais en tête, tout en trouvant un bug dans un parseur de dates que j’ignorais
Maintenant, je garde cette app affichée en permanence dans un coin de l’écran
Ensuite, je compte faire une app iPhone qui coupe automatiquement l’alarme les matins où les enfants n’ont pas école
Je ne connais absolument rien aux apps iPhone et je n’avais pas le temps de l’apprendre, donc auparavant je n’aurais même pas envisagé le projet
Pour les apps personnelles, Claude Code est vraiment excellent, et comme la qualité du code n’est pas ultra importante, utiliser le résultat tel quel suffit largement
Le gestionnaire de presse-papiers que j’utilisais sur Mac depuis des années s’est mis à dysfonctionner après une mise à jour de l’OS, et les alternatives de l’App Store n’avaient pas les fonctions que je voulais
Du coup, après avoir lu le billet de Simon Willison sur le vibe coding avec SwiftUI, je l’ai fait moi-même avec Claude Code
Il a fallu quelques itérations, mais maintenant j’ai dans la barre de menu du Mac exactement les fonctions que je voulais, et même plus
J’ai été particulièrement impressionné quand j’ai demandé à CC des idées de fonctionnalités supplémentaires et qu’il m’a proposé toute une longue liste d’options auxquelles je n’avais pas pensé, puis a implémenté directement celles que j’ai choisies
Il y a deux jours, j’ai aussi eu envie d’un éditeur markdown dédié, semblable au nouveau composant d’édition markdown de LibreOffice, mais plus petit et plus léger
J’ai donc fait le plan avec GPT 5.5 puis l’implémentation avec CC, et après seulement deux sessions de vibe coding, j’avais presque terminé une app Mac native légère qui ouvre et crée des fichiers, édite comme un traitement de texte et sauvegarde en markdown canonique
Il manque encore les tableaux markdown, et je compte lui faire ajouter ça aujourd’hui
https://simonwillison.net/2026/Mar/27/vibe-coding-swiftui/
https://news.ycombinator.com/item?id=47298885
J’aime fabriquer des choses, mais parfois on a juste envie d’obtenir rapidement le résultat fini
Quand on veut un petit outil personnel pour un besoin précis sans sacrifier tout un week-end, l’aide des LLM est vraiment précieuse, et la qualité du code n’est pas très importante
Sur iPhone, l’app Shortcuts intégrée peut suffire
On peut faire un shortcut qui coupe toutes les alarmes, puis le faire lire un signal comme le calendrier pour activer ou désactiver les alarmes à certaines dates ou heures, et l’exécuter selon un planning régulier
J’ai tendance à penser qu’un side project n’a en général pas beaucoup de valeur si on n’a pas vraiment envie de le faire
Si le processus et l’expérience passent d’abord, c’est un loisir ; si le résultat passe d’abord, c’est du travail
Si on fait beaucoup de side projects uniquement pour le résultat, on finit en fait par travailler pendant son temps libre, et je me demande alors si ce temps est vraiment libre
La société moderne nous demande déjà bien trop de résultats, donc j’aimerais au moins préserver les side projects pour la santé mentale
Cela dit, il peut y avoir des exceptions quand on poursuit un but auquel on croit pour un bien plus grand, et dans ce cas ce but peut enrichir le processus lui-même
Il m’arrive d’avoir besoin de logiciels qui rendent mes autres loisirs plus agréables, sans pour autant vouloir retirer du temps au loisir X pour développer ce logiciel moi-même
En plus, ce type de tâche n’est pas toujours le genre de code que j’ai envie de faire pour le plaisir
Pour moi, c’est précisément là qu’était le sweet spot du code assisté par LLM, et j’ai effectivement créé plusieurs apps utilitaires pour mieux profiter de mes autres loisirs
Ça reste du temps de loisir, mais ce loisir n’a pas besoin d’être le code
Mais si on avait une envie à résoudre ou une ambition à réaliser, sans le temps ou la motivation nécessaires, je ne vois pas pourquoi il faudrait considérer cela comme du travail sur le temps libre
Des projets qui dévoraient autrefois des week-ends ou des vacances peuvent maintenant être mis sur rails en 15 minutes, et c’est justement presque l’inverse du travail
Ça fait plus de 30 ans que je programme, mais je me suis toujours contenté d’apps en ligne de commande, et ce n’est que récemment que j’ai appris Qt pour enfin ajouter une vraie interface desktop
La courbe d’apprentissage était très raide, mais je l’ai maintenant en grande partie franchie
Sauf qu’après avoir posté sur LinkedIn des captures de l’app en précisant que c’était un projet open source gratuit, j’ai reçu des centaines de commentaires de gens très LinkedIn qui n’allaient de toute façon pas m’embaucher
Des réactions du genre « on voudrait l’intégrer à notre workflow » ou « vous n’êtes pas le premier à essayer ça », ce qui ne m’a pas du tout motivé ; j’avais plutôt l’impression de faire le boulot pour les autres ou de m’exposer à des critiques inutiles
Le choc m’a fait lâcher pendant un mois environ, puis j’ai fini par comprendre que ce que j’aimais vraiment, c’était le processus lui-même : apprendre Qt et voir mes anciens programmes reprendre vie
Depuis, je traite ça comme ma project car
Je démonte, je refais, je remplace entièrement le modèle de données pour explorer les avantages et inconvénients d’autres conceptions, je crée moi-même les vues graphiques, et j’ajoute même la traduction dans d’autres langues
Fonctionnellement, c’est terminé depuis longtemps, mais il existe déjà environ cinq versions à l’architecture interne complètement différente, et c’est justement ça qui est amusant
Je m’en sers toute la journée au travail, et je n’en reparlerai plus jamais sur LinkedIn
J’avais déjà trois tentatives d’app de notes dans mon repo personnel, toutes bloquées dans l’écart entre l’idée et le temps libre disponible
Mais grâce à Claude Code, j’ai fini en deux mois celle que je voulais vraiment
Le processus de création en lui-même est le meilleur hobby que j’aie trouvé jusqu’ici, bien meilleur que les jeux ou le scrolling
Quand une idée qu’on porte depuis des années finit enfin par sortir, il y a quelque chose de bien plus profond de soi dans cette app, et je pense qu’il y aura beaucoup plus de solo builders de ce genre à l’avenir
Je ne cherche pas à rabaisser le fait de refaire d’anciens projets, mais le marché risque d’être saturé de projets extrêmement spécialisés
Autrefois, il y avait une fiche de spécifications sur la boîte des logiciels ; maintenant, il faudrait peut-être une sorte de nouveau langage de modélisation pour expliquer l’usage prévu et le périmètre
Mon expérience a été presque exactement la même
Un side project d’agrégation comparative était bloqué depuis plus d’un an à 20 % de complétion, et une fois par mois je l’ouvrais, je regardais la to-do list, puis je me fatiguais et refermais l’onglet
Puis, en passant quelques week-ends avec Claude, j’ai réussi à franchir le mur du projet à moitié terminé
Ce qui m’a frappé, ce n’était pas tant la vitesse brute que la disparition du coût de réentrée, ce moment où il fallait auparavant recharger pendant une heure tout mon vieux code dans ma tête avant de pouvoir faire quoi que ce soit
Le hype excessif m’agace, mais la plupart des gens qui se moquent de ces outils n’ont probablement jamais testé à quel point ils sont utiles pour ce genre de tâches ennuyeuses
J’ai toujours eu plus d’idées que je ne pouvais en concrétiser, et certaines étaient vraiment bonnes
Grâce aux outils d’IA, je peux maintenant en implémenter davantage sous une forme au moins à peu près fonctionnelle
Ironiquement, la valeur de ce genre d’implémentations baisse rapidement
Il y a quelques semaines, j’ai créé une petite bibliothèque de recherche qui tourne dans le navigateur et ne nécessite pas de serveur, avec la plupart des term/matching query et agrégations de style Elasticsearch, ainsi que de la recherche vectorielle ANN avec WebGPU
C’était presque du genre « ajoutons la feature X » et c’était fait immédiatement, et je l’ai déjà utilisée sur de vrais sites web
Ça ne passe pas à l’échelle, mais c’est excellent pour les blogs ou les sites de documentation, et le site de documentation est ici : https://querylight.tryformation.com/
Le résultat fonctionne exactement comme je l’imaginais, et je pense pouvoir ajouter sans grand effort beaucoup de fonctions de niche d’Elasticsearch
En revanche, l’accueil sur GitHub a été plutôt tiède
Tout le monde semble maintenant trop occupé à fabriquer son propre truc avec l’IA pour vraiment s’enthousiasmer du travail des autres, et au fond je peux le comprendre
Si on a besoin d’une bibliothèque de recherche, on peut soit la générer soi-même, soit laisser l’IA en choisir une suffisamment bonne
En plus, sa création n’avait de toute façon pas demandé un effort colossal
La valeur économique de ce genre de projet diminue très vite
Malgré tout, j’aime créer, donc je continue, et je pense qu’il est aussi important d’apprendre cette courbe de maîtrise des outils
Il y aura encore beaucoup à faire, mais les gens voudront payer moins tout en attendant des résultats corrects, et pour répondre à cette attente il faudra savoir manier les outils
En fin de compte, quand le champ du possible s’élargit, le niveau d’ambition monte lui aussi, et penser que l’IA fera le travail à notre place donc qu’on n’aura plus rien à faire serait une erreur
Moi aussi, ces derniers mois, j’ai travaillé pendant de très longues heures
Pendant des années, j’ai eu plusieurs idées de produit par semaine, qui finissaient toutes stockées dans Apple Notes
Mais au cours du dernier mois, j’en ai transformé trois en vraies bêtas utilisables, et j’utilise maintenant les trois tous les jours