Un projet de bibliothèque codé en vibe coding avec Claude Code
(balajmarius.com)- Exemple de projet personnel utilisant Claude Code pour classer et visualiser automatiquement environ 500 livres
- Un problème jusque-là insoluble, car les scanners ISBN ou Goodreads ne reconnaissaient pas les éditions roumaines, résolu grâce à l’API Vision d’OpenAI et à des scripts générés avec Claude
- Après une extraction des métadonnées avec une précision de 90 %, le reste a été corrigé manuellement, puis les couvertures ont été récupérées automatiquement via Open Library et SerpAPI
- Mise en place d’une interaction proche d’une vraie bibliothèque grâce à des animations basées sur le défilement avec Framer Motion et à une épaisseur des livres calculée à partir du nombre de pages
- Le projet illustre un mode de collaboration où l’IA exécute, tandis que l’utilisateur garde la main sur le jugement esthétique et les choix, en soulignant que « le coût d’exécution baisse, mais le goût reste une affaire humaine »
Découvrir le résultat final : Bookshelf - https://balajmarius.com/bookshelf
Vue d’ensemble du projet
- Avec environ 500 livres possédés mais sans système de suivi, l’auteur a construit un système de classement et de visualisation automatiques à l’aide d’outils IA
- Au lieu d’un simple tableur, il a automatisé les étapes d’exécution via Claude Code, ce qui lui a permis d’achever un projet personnel repoussé depuis longtemps
- L’enjeu central du projet n’était pas tant la perfection technique que la suppression des goulots d’étranglement de l’exécution
Identification du problème
- Les applications de scan ISBN et Goodreads ne reconnaissaient pas les éditions roumaines ni certaines publications rares, rendant les données incomplètes
- Des données incomplètes ajoutaient davantage de confusion et faisaient interrompre le projet à répétition
- Ce qu’il fallait n’était pas une application parfaite, mais une architecture capable de tolérer l’imperfection
Collecte et traitement des données
- Les données ont été construites à partir de 470 photos prises des couvertures et des tranches des livres
- Un script écrit par Claude envoie chaque image à l’API Vision d’OpenAI pour extraire auteur, titre et éditeur, puis enregistre le résultat dans des fichiers
JSON - Le système a atteint une précision d’environ 90 % ; les erreurs restantes provenaient de problèmes d’éclairage, de détérioration ou de résolution
- Les 10 % restants ont été corrigés manuellement, puis le même pipeline a été relancé automatiquement à chaque ajout de nouveau livre
Amélioration des images de couverture
- Les couvertures ont d’abord été récupérées via l’API Open Library, mais environ la moitié étaient de mauvaise qualité ou incorrectes
- Claude a ajouté un système de notation de qualité et de signalement des erreurs et, en cas d’échec, a basculé vers une recherche Google Images via SerpAPI
- Sur environ 460 livres, seuls 10 ont nécessité une correction manuelle, ce qui a permis de conserver une bonne efficacité d’automatisation
Implémentation de l’interface de bibliothèque
- Au lieu d’une simple grille de couvertures, le projet reproduit un rendu visuel centré sur les tranches de livres, comme une vraie bibliothèque
- Claude s’est chargé de l’extraction des couleurs (color quantization) et du calcul de la couleur de texte offrant le bon contraste
- Le projet utilise aussi les données de nombre de pages d’Open Library pour refléter l’épaisseur des livres, avec une légère variation ajoutée pour plus de réalisme
- Le résultat donne une texture visuelle proche d’une bibliothèque réelle
Animations et interactions
- Des animations basées sur le défilement ont été ajoutées avec Framer Motion, faisant incliner les tranches lors du scroll
- Au départ, des saccades apparaissaient à cause des mises à jour d’état dans React, mais elles ont été corrigées avec des motion values et des animations spring
- Une fois corrigé, le mouvement est devenu fluide, et le faible coût des expérimentations a permis de multiplier les itérations
Suppression des fonctionnalités inutiles
- Une fonction de défilement infini avait été ajoutée, mais des incohérences de hauteur de conteneur et des erreurs de scroll dégradaient l’expérience utilisateur
- Même si cela fonctionnait techniquement, la fonctionnalité n’était pas nécessaire et a été supprimée
- Le projet souligne que supprimer du “code qui fonctionne mais n’est pas utile” reste un rôle humain
Adaptation mobile et vue en pile
- Comme le défilement horizontal était peu pratique sur mobile, une vue en pile verticale a été ajoutée
- Claude a analysé le code existant pour réutiliser le timing des animations, l’extraction des couleurs et la gestion de la transparence au scroll
- Sans explication supplémentaire, il a généré un nouveau composant complet, montrant ainsi les capacités de compréhension et de recomposition du code par l’IA
Rôle humain et conclusion
- Même si Claude a écrit tout le code, l’utilisateur a pris les décisions suivantes
- accepter une précision de 90 %
- corriger manuellement 10 couvertures
- choisir un design centré sur les tranches
- supprimer les fonctionnalités inutiles
- valider la qualité sensible des animations
- Le résultat final est une bibliothèque web classant et visualisant automatiquement 460 livres
- Le projet montre un modèle de collaboration où l’IA prend en charge l’exécution et l’humain le goût et le jugement
- En conclusion, « le coût d’exécution continue de baisser, mais le goût reste une affaire humaine »
2 commentaires
Il affirme que seulement 10 éléments ont nécessité une intervention manuelle, mais ce n’est rien d’autre qu’une justification a posteriori. Pour identifier ces 10 éléments, il a fallu procéder à une vérification exhaustive. La queue remue le chien.
Réactions sur Hacker News
Le vibe coding actuel est parfaitement adapté aux petits projets
Quand un projet grossit, la gestion du contexte devient difficile, et les LLM ont tendance à générer trop de code inutile ou à introduire des bugs subtils
Dans ce cas, il vaut mieux repasser en mode brainstorming, ne demander au LLM qu’une aide sur la conception, puis écrire soi-même le code ou fournir une ossature que le LLM complétera
Les LLM sont encore faibles pour modifier légèrement du code existant ou réutiliser une structure déjà en place. Ils essaient le plus souvent d’ajouter de nouvelles abstractions
Je conçois moi-même la structure modulaire et je sais clairement où je veux arriver. Si on relit tout le code en détail et qu’on gère bien les prompts et le contexte (par exemple avec du code d’exemple, des guides
agent.md, etc.), ça reste tout à fait contrôlableQuand une base de code grossit, un couplage fort (tight coupling) entre modules finit par nuire aux performances
La solution repose sur le principe « programmer contre des interfaces, pas contre des implémentations »
Il suffit de définir clairement les frontières de chaque module, de séparer dans des fichiers distincts les interfaces qui n’exposent que le nécessaire, puis de faire en sorte que Claude ou ses collègues n’utilisent que ces interfaces
Cela réduit le contexte et permet à Claude de mieux fonctionner
Quand le projet prend encore de l’ampleur, le nombre d’interfaces peut à son tour devenir important ; à ce moment-là, il faut gérer cela en découpant à plus grande échelle ou en réduisant le périmètre des changements
On en est maintenant à un niveau où l’on peut les combiner même sur des projets assez importants
La phrase « Il ne me fallait pas une meilleure appli, mais un système capable de tolérer l’imperfection » m’a marqué
J’aime bien cette façon d’écrire où Claude n’a pas trouvé les idées, il s’est chargé de l’implémentation, tandis que moi, je me suis occupé du goût
On voit souvent en ce moment, y compris dans les e-mails, des phrases du genre « Nous n’avons pas réinventé la roue. Nous sommes la roue »
Le fait de ne pas utiliser de mots grandiloquents et de répéter les mêmes structures de phrases m’a paru très humain
Une IA mélange en général les schémas de phrases de façon plus aléatoire, alors qu’ici on garde plutôt un cadre cohérent
Ça donne l’impression de quelqu’un dont le sens de l’édition n’est pas encore très affûté mais qui essaie délibérément d’écrire avec style
Je me demande si d’autres y ont aussi senti une odeur d’IA
Cela dit, sur LinkedIn, ce style est devenu tellement omniprésent qu’hier j’ai fini par exploser et publier un message à ce sujet
J’ai l’impression qu’une combinaison subtile de valeurs affichées et d’ambiance générale joue sur notre détection de l’IA
Je n’ai encore jamais vu de grand projet mené avec succès en vibe coding
La plupart du temps, il s’agit de petits programmes qui existent déjà dans les données d’entraînement
Si c’est vraiment révolutionnaire, j’aimerais qu’on voie apparaître quelque chose comme un nouvel algorithme de compression ou une solution optimale au problème du voyageur de commerce
Les outils de codage par IA devraient se concentrer sur ce qu’ils font bien
Moi, j’utilise souvent ces outils pour créer de petits programmes d’automatisation métier
Grâce à eux, je peux faire des choses qui m’étaient impossibles auparavant, et ma productivité a été multipliée par dix
Comme l’explique l’article Perfect Software, l’application parfaite pour quelqu’un est celle qui correspond à ses goûts et à ses objectifs
Grâce aux LLM, il est devenu facile de créer ce type de logiciel parfait et personnalisé
Compétition 1, Compétition 2
Mon score a poussé les autres participants à améliorer leurs solutions
Si l’IA peut éliminer ce travail ennuyeux, les humains pourront se concentrer sur des tâches créatives
Ce genre de vibe coding appliqué à de petits problèmes est un usage du temps bien plus précieux
J’ai moi aussi créé il y a quelques jours une appli d’étagère à livres avec Claude à partir de la même idée
nindalf.com/books
Depuis, je lis davantage et il est devenu plus pratique de consulter mes passages surlignés et mes notes
Les suggestions d’UI de Claude étaient bien meilleures que ce que j’aurais conçu moi-même, et le backend était presque au même niveau
En revanche, il s’obstinait parfois sur des logiques de validation étranges ; quand je corrigeais moi-même, il reconnaissait aussitôt : « Vous avez raison ! » Cela restait assez rare
J’ai aussi développé une appli d’étagère à livres similaire, mais je n’ai toujours pas trouvé de bonne solution pour gérer les notes d’audiobooks
Ta version est intéressante aussi
J’ai tenté quelque chose de similaire moi aussi, mais dans mon cas c’était plutôt un échec de Claude
Je voulais rendre cliquables les images d’étagères sur andrewblinn.com
Mais Claude générait souvent de mauvais liens Goodreads et y ajoutait des identifiants invalides
La reconnaissance des tranches de livres était aussi imprécise, donc j’ai fini par faire le travail manuellement dans Figma
L’automatisation proposée par Claude était trop lente et trop coûteuse
J’ai aussi l’habitude de faire chaque année une page d’étagère statique en HTML avec les livres lus dans l’année
Autrefois, j’avais même écrit un billet en essayant de recréer Delicious Library
Ce n’était pas vraiment nécessaire, mais j’aimais beaucoup organiser mes livres
Je suis d’accord avec l’idée que « 460 livres, ce n’est pas un problème d’échelle. Savoir quand supprimer du code qui fonctionne, l’IA ne peut pas le faire à votre place »
J’ai moi aussi créé une appli avec 900 notes et des données sur 550 livres, et j’ai décidé de ne pas ajouter de scroll infini ni de recherche complexe tant que le navigateur tient le coup
Pour l’instant, la « recherche dans la page » suffit largement
J’ai bien aimé l’idée que « 90 % de précision, c’est suffisant »
Même si les LLM introduisent de nouvelles erreurs, le monde contient déjà beaucoup de systèmes tolérants aux erreurs
Cette manière de voir pourrait être utile même à ceux qui ont une position anti-IA
J’ai moi aussi créé en vibe coding une appli de journal de films sur moviesonthe.computer
Le fait de partir d’une idée claire, celle de « mon propre clone de Letterboxd », a permis d’avancer vite
Cette capacité à fabriquer des applis sur mesure est extrêmement puissante
En revanche, les outils actuels restent insuffisants pour apprendre aux non-développeurs une vraie manière de penser
Comme tu le dis, quelqu’un qui a déjà un bagage en programmation peut plus facilement formuler les bons prompts pour ce genre de projet
Honnêtement, l’utilisabilité du résultat produit par cette personne est catastrophique
Elle a peut-être ressenti un sentiment d’accomplissement, mais en pratique, cela ressemble davantage à un jouet de divertissement qu’à un vrai gain de productivité
Malgré tout, il y a des choses à apprendre dans ce type d’essais
Mais pour un outil personnel, le plaisir lui-même peut être le but
Moi aussi, quand j’étais jeune, je codais en BASIC juste pour m’amuser. Ce n’était pas productif, mais ça avait largement sa valeur