[{"data":1,"prerenderedAt":333},["ShallowReactive",2],{"tag-posts-rex":3},[4],{"id":5,"title":6,"author":7,"body":8,"category":300,"categorySlug":301,"date":302,"description":14,"excerpt":303,"extension":317,"location":318,"meta":319,"navigation":320,"path":321,"published":320,"seo":322,"slug":323,"stem":324,"tags":325,"timeToRead":331,"__hash__":332},"posts\u002Fposts\u002FProgrammation\u002F2026-01-29-sportequipement-vibe-coding.md","SportEquipement - Application de suivi de matériel sportif avec Vibe Coding","Ulrich Vandenhekke",{"type":9,"value":10,"toc":290},"minimark",[11,15,18,21,24,32,37,40,43,59,63,66,75,78,81,88,91,94,101,112,116,119,122,136,139,164,167,170,177,180,183,186,189,192,195,199,202,205,208,213,216,219,222,225,229,232,235,238,241,248,252,255,258,261,268,275,278,281,284,287],[12,13,14],"p",{},"Bonjour à tous,",[12,16,17],{},"Pour ceux qui me connaissent, vous savez que je fais un peu de vélo. Et comme tout cycliste moderne, j'utilise Strava.\nC'est l'outil de référence pour suivre ses sorties, comparer ses segments et analyser sa forme. Strava propose bien une\nfonctionnalité de \"Suivi d'équipement\" (pour savoir combien de kilomètres ont vos chaussures ou votre cadre), mais...\nc'est sommaire.",[12,19,20],{},"Si la version Web permet d'ajouter des composants (chaîne, cassette, etc.), l'application mobile a tout simplement\n\"oublié\" cette fonctionnalité.",[12,22,23],{},"J'ai eu quelques problèmes avec ma chaîne qui s'use en 2 000 km ou des plaquettes de frein à changer. Bref j'avais envie\nd'avoir des stats un peu précises sur le suivi de mon matériel. De la même manière je cours régulièrement et je voulais\nsavoir quand mes baskets atteignaient leur durée de vie maximale (ça, ça marche bien sur Strava).",[12,25,26,27,31],{},"Pour améliorer ce suivi j'ai décidé de créer ma propre solution : ",[28,29,30],"strong",{},"SportEquipement",".",[33,34,36],"h2",{"id":35},"sportequipement-cest-quoi","SportEquipement : C'est quoi ?",[12,38,39],{},"L'idée est simple : une application mobile, connectée à Strava et à Android Health Connect, qui récupère mes activités\net incrémente l'usure de chaque composant défini.",[12,41,42],{},"Pour la première version, je voulais aussi qu'elle soit \"Local First\". L'application tourne entièrement sur le téléphone.\nPas de serveur, application open source, et mes données restent chez moi. (Bon, j'ajouterai peut-être dans un futur un\nserveur pour synchroniser mes différents appareils et sécuriser les tokens Strava, mais chaque chose en son temps).",[12,44,45,46,53,54,31],{},"L'application est d'ailleurs disponible sur le ",[47,48,52],"a",{"href":49,"rel":50},"https:\u002F\u002Fplay.google.com\u002Fstore\u002Fapps\u002Fdetails?id=org.shadoware.sportequipment&hl=fr",[51],"nofollow","Play Store"," et le code source est sur mon ",[47,55,58],{"href":56,"rel":57},"https:\u002F\u002Fgogs.shadoware.org\u002FShadowareOrg\u002FSportsEquipment",[51],"Gitea perso",[33,60,62],{"id":61},"quelques-écrans","Quelques écrans",[12,64,65],{},"Cet écran montre la liste des équipements qui ont été ajoutés. On peut voir l'état d'usure de chaque équipement et si\nl'équipement est usé ou un de ces composants est usé on a une alerte visuelle.",[12,67,68],{},[69,70],"img",{"alt":71,"className":72,"src":74},"Liste des équipements",[73],"img-center","\u002FProgrammation\u002Fsportequipement\u002Fimage1.png",[12,76,77],{},"Sur l'écran détail d'un équipement, on y voit les informations détaillées de l'équipement mais aussi la liste des\ncomposants et l'usure des composants.",[12,79,80],{},"Un composant peut être usé par le kilométrage (ex: chaîne, pneu) ou par le temps (ex: liquide de frein).",[12,82,83],{},[69,84],{"alt":85,"className":86,"src":87},"Liste des composants \u002F Détail",[73],"\u002FProgrammation\u002Fsportequipement\u002Fimage2.png",[12,89,90],{},"Sur l'écran d'activité on récupère la liste des activités synchronisées depuis Strava ou Health Connect (pour l'instant\nune fois par jour). On peut créer des activités manuellement aussi si besoin. C'est l'ajout ou la suppression d'une activité\nqui impacte l'usure des équipements.",[12,92,93],{},"Les activités sont rattachées aux équipements via des types d'activités (l'équipement est attaché à un type d'activité,\net l'activité aussi).",[12,95,96],{},[69,97],{"alt":98,"className":99,"src":100},"Liste des activités",[73],"\u002FProgrammation\u002Fsportequipement\u002Fimage3.png",[12,102,103,104,108,109,31],{},"Mais si je vous écris aujourd'hui, ce n'est pas seulement pour vous présenter l'outil. C'est surtout pour vous raconter\n",[105,106,107],"em",{},"comment"," je l'ai développé. J'ai voulu tester le fameux ",[28,110,111],{},"\"Vibe Coding\"",[33,113,115],{"id":114},"développement-en-vibe-coding","Développement en Vibe Coding",[12,117,118],{},"Je souhaitais développer mon application rapidement. Je voulais également avoir ce que les agents IA avaient dans leurs\nneurones. En effet, j'ai une licence Github Copilot que j'utilisais principalement en mode auto-completion de code, un\npeu pour discuter, et parfois pour modifier du code sur un projet déjà existant. J'ai déjà \"Vibe Codé\" des scripts sans\nimpact dont le but était de faire des exécutions one-shot.",[12,120,121],{},"Sur ce projet, je me suis dit :",[123,124,125,133],"blockquote",{},[12,126,127,128,132],{},"Je ne suis plus développeur, je suis le chef de projet et le product owner. Je décris la fonctionnalité que je veux, et\nl'IA code pour moi. Je teste et si ça ne compile pas ou si ça ne marche pas comme je veux je fais un retour ",[129,130,131],"del",{},"au\ndeveloppeur"," à l'IA.",[12,134,135],{},"A la fin je regarderai le code généré et je verrai ce que l'IA vaut.",[12,137,138],{},"J'ai donc commencé à mettre différents types d'instructions :",[140,141,142,150,157],"ul",{},[143,144,145],"li",{},[47,146,149],{"href":147,"rel":148},"https:\u002F\u002Fgogs.shadoware.org\u002FShadowareOrg\u002FSportsEquipment\u002Fsrc\u002Fbranch\u002Fmain\u002F.github\u002Fcopilot-instructions.md",[51],"Expert en Kotlin et développement Android",[143,151,152],{},[47,153,156],{"href":154,"rel":155},"https:\u002F\u002Fgogs.shadoware.org\u002FShadowareOrg\u002FSportsEquipment\u002Fsrc\u002Fbranch\u002Fmain\u002F.github\u002Fprompts\u002Fui_ux.prompt.md",[51],"Agent expert en UI\u002FUX",[143,158,159],{},[47,160,163],{"href":161,"rel":162},"https:\u002F\u002Fgogs.shadoware.org\u002FShadowareOrg\u002FSportsEquipment\u002Fsrc\u002Fbranch\u002Fmain\u002F.github\u002Fprompts\u002Fdocumentation.prompt.md",[51],"Expert en documentation technique",[12,165,166],{},"Ces différents experts sont inspirés de prompts trouvés sur Internet et adaptés, modifiés et\u002Fou générés à l'aide de Github\nCopilot également.",[12,168,169],{},"Ensuite j'ai décrit mon projet en quelques lignes dans le prompt. Je lui ai demandé de me faire un plan, puis de le\ndévelopper.",[12,171,172,173,176],{},"Les deux premières semaines ont été grisantes. J'ai développé ",[28,174,175],{},"80% du logiciel"," en un temps record. Je regardais l'IA\ncoder, je cliquais sur le bouton continuer ou approuver (les outils MCP, le build, ...) et je jouais aux jeux vidéo pendant ce\ntemps.",[12,178,179],{},"Pour info les MCP c'est \"Model Context Protocol\", cela permet à Github Copilot d'accéder à des outils comme\nl'execution des commandes, la recherche sur internet, ...",[12,181,182],{},"Ma routine était simple : je demandais une fonctionnalité, l'IA générait le code, je compilais (pendant ce temps je\nfaisais autre chose : jeux vidéos, un autre programme ...). Une fois terminé, je lançais android studio, je compilais,\nje testais.",[12,184,185],{},"Si ça marchait, je passais à la fonctionnalité suivante. Si ça ne marchait pas, je donnais un retour à l'IA en lui\nexpliquant le problème (erreur de compilation, bug, comportement non conforme) et c'était reparti pour un tour.",[12,187,188],{},"Régulièrement je devais réinitialiser la conversation, je demandais donc à l'IA de mettre à jour le plan pour reprendre\ndans une nouvelle conversation. Généralement, je faisais cela quand l'IA commençait à faire n'importe quoi (oubli de ce\nsur quoi on travaillait initialement, pataugeait dans la semoule, ...). Les prémisses du pétage de plombs de l'IA passaient\nsouvent par un passage du français à l'anglais dans les réponses. La signification était probablement la perte du\ncontexte initial et des instructions de démarrage.",[12,190,191],{},"Au début, Copilot m'a pondu une architecture logicielle complexe, découpée en couches bien distinctes. Sur le papier,\nc'était beau (ça vient des instructions expert en développement kotlin qui demande une Clean architecture avec une\nséparation : Domain, Data, Feature, Core).",[12,193,194],{},"De mon coté, pour un projet perso, si j'avais dû développer le projet moi-même de zéro, j'aurais probablement fait\nbeaucoup plus simple et direct. Probablement une application avec des vues, une couche service et une couche DAO dans le\nmême projet. Mais là, c'était l'IA qui gérait l'architecture, donc je laissais faire. J'avançais à l'aveugle.",[33,196,198],{"id":197},"et-là-cest-le-drame","Et là, c'est le drame",[12,200,201],{},"Au bout de deux semaines, patatras. Je reçois une notification : je n'ai plus de crédits GitHub Copilot pour les\nrequêtes premium. Panne sèche.",[12,203,204],{},"J'ai bien tenté de reprendre avec un GPT4.1 ou GPT4o qui sont inclus en illimité, mais quand on a testé Gemini 3 ou\nClaude Sonnet 4.... qu'est que GPT4 est con....",[12,206,207],{},"Je me retrouve seul face à mon IDE, sans l'aide de copilot. J'étais le 15 du mois et il me restait 2 semaines avant le\nrenouvellement. Je me suis dit :",[123,209,210],{},[12,211,212],{},"Bon, c'est l'occasion de regarder un peu ce qu'il m'a écrit en détail et de faire une revue de code.",[12,214,215],{},"J'ai ouvert les fichiers. Et là... j'ai eu du sang qui m'a coulé des yeux, la cervelle qui m'est sortie par les oreilles ...",[12,217,218],{},"Le MCD (Modèle Conceptuel de Données) était inutilement complexe. Il y avait de la duplication de code partout. Pour\nfaire la même chose, l'IA avait parfois utilisé trois méthodes différentes à trois endroits du code, sans aucune\ncohérence globale. Il y avait du code mort, des variables inutilisées, des détours techniques incompréhensibles.",[12,220,221],{},"C'était fonctionnel, oui. Mais c'était sale. Très sale.",[12,223,224],{},"J'ai donc commencé à lister tous les problèmes architecturaux que j'ai vus dans le code (et attention il y en a\nprobablement d'autres). La suppression du code mort, je l'ai faite moi-même car à chaque fois l'IA n'était pas capable\nde le détecter si je ne lui donne pas le nom de la méthode.",[33,226,228],{"id":227},"le-grand-nettoyage","Le grand nettoyage",[12,230,231],{},"Dès que mes crédits ont été renouvelés, j'ai voulu tout nettoyer et donner à l'IA l'ensemble de ma revue de code.\nOptimiste, j'ai donné le grand listing de tout ce qui n'allait pas et de demander à l'IA une correction globale.",[12,233,234],{},"Échec total. C'était trop pour elle. Elle se perdait dans les corrections, me disait que tout était fait, mais seule une\npartie était terminée....",[12,236,237],{},"J'ai dû changer de stratégie. J'ai repris mon \"Vibe Coding\", mais cette fois-ci pour réparer les dégâts, problème par\nproblème, couche par couche (domaine, puis data, puis feature, puis core).",[12,239,240],{},"Puis je suis repassé en mode petite itération pour terminer les dernières fonctionnalités, corriger les derniers bugs. Et\nj'ai parfois dû mettre les mains dans le cambouis moi-même pour corriger des problèmes que l'IA n'arrivait pas à\nrésoudre.",[12,242,243,244,247],{},"Résultat des courses : j'avais fait 80% du projet (le prototype sale) en 2 semaines. Il m'a fallu ",[28,245,246],{},"un mois entier","\npour faire les 20% restants et nettoyer la base de code pour la rendre un peu plus propre.",[33,249,251],{"id":250},"conclusion","Conclusion",[12,253,254],{},"Aujourd'hui, l'application est sur le store Google, elle fonctionne bien, et elle répond à mon besoin initial.",[12,256,257],{},"Mais je ressors de cette expérience avec un sentiment mitigé. J'ai un étrange détachement vis-à-vis de ce projet.",[12,259,260],{},"J'ai l'impression d'avoir codé avec un stagiaire qui a de très bonnes connaissances théoriques sur l'architecture logicielle\nmais qui sans contrôle te crée une dette technique immense. Par contre il a l'avantage d'écrire très vite. Ce projet qui\na été fait en un mois - un mois et demi, m'aurait pris beaucoup plus de temps (sachant que je ne développe en perso que\nle soir et le week-end).",[12,262,263,264,267],{},"D'habitude, quand je code un logiciel, c'est mon \"bébé\". Je connais chaque ligne, chaque astuce, chaque défaut. Là...\nj'ai l'impression que ce n'est pas ",[28,265,266],{},"mon"," projet. Je me sens comme le Chef de Projet ou le client qui a passé commande.",[12,269,270,271,274],{},"Pour les petits scripts, les projets ",[28,272,273],{},"utilitaires",", l'intelligence artificielle est super pratique. Elle permet de\nconstruire rapidement un prototype fonctionnel. Mais sans maîtrise, le code n'est pas maintenable dans le temps (même\npar l'IA elle-même). Et je ne parle pas non plus des problématiques de sécurité, si j'avais un serveur sur cette\napplication.",[12,276,277],{},"Pour les projets de passionnés, ceux qu'on fait \"pour l'art\" ou pour le plaisir d'apprendre, je ne suis pas sûr de\nréitérer l'expérience aussi poussée. J'aime développer et c'est important pour moi de toucher la ligne de code.",[12,279,280],{},"J'ai aussi une autre inquiétude par rapport à l'avenir du métier de développeur. Un bon développeur pour l'instant est\ntoujours nécessaire pour superviser l'intelligence artificielle.",[12,282,283],{},"Mais les juniors qui arrivent sur le marché du travail vont-ils apprendre les bonnes pratiques de développement s'ils\nse reposent trop sur l'IA pour coder à leur place ? Est-ce que les juniors vont trouver du travail, même s'ils sont\ncompétents ?",[12,285,286],{},"Actuellement un développeur qui n'utilise pas l'IA risque de se retrouver à un moment dépassé sur le marché du travail.\nCe que j'aimais avec le développement c'est qu'avant n'importe qui pouvait faire du développement avec n'importe quel\nPC. Il y avait un coût d'apprentissage, tout le monde n'est pas fait pour faire du développement, mais c'était accessible\nfinancièrement aux personnes motivées.",[12,288,289],{},"Maintenant, il faut soit une très grosse carte graphique (et même là ce ne sont pas des modèles ultra performants), ou\nun abonnement payant. Il y a quelques versions gratuites mais elles sont là pour attirer. L'IA rend le développement plus\naccessible au niveau apprentissage, mais moins accessible financièrement et surtout dépendant d'un fournisseur.",{"title":291,"searchDepth":292,"depth":292,"links":293},"",2,[294,295,296,297,298,299],{"id":35,"depth":292,"text":36},{"id":61,"depth":292,"text":62},{"id":114,"depth":292,"text":115},{"id":197,"depth":292,"text":198},{"id":227,"depth":292,"text":228},{"id":250,"depth":292,"text":251},"Programmation","programmation","2026-01-29",{"type":9,"value":304},[305,307,309,311,313],[12,306,14],{},[12,308,17],{},[12,310,20],{},[12,312,23],{},[12,314,26,315,31],{},[28,316,30],{},"md","Lille, France",{"planet":320},true,"\u002Fpost\u002Fsportequipement-vibe-coding",{"title":6,"description":14},"sportequipement-vibe-coding","posts\u002FProgrammation\u002F2026-01-29-sportequipement-vibe-coding",[326,327,328,329,330],"developpement","ia","vibe coding","rex","android",10,"UjPK0msj1uJoiDCVdG4PiDDZUq_PLpB0i2SzFIOesPI",1777849582748]