Mise à jour technique du site avec Claude Cowork
Résumé
Mon premier site Web personnel a été lancé en 2012 sous WordPress, et a migré sous Kirby en 2015 avant d’être entièrement refait en 2016 puis légèrement mis à jour en 2021. En mars 2026, porté par le développement des intelligences artificielles grand public, une refonte technique complète a été menée grâce à l’IA Claude Cowork : migration de Kirby 3.4.4 (2020) vers Kirby 5.3.2 (2026), correctifs de sécurité, optimisation des performances et nettoyage du code JS et CSS. Ce billet documente l’usage de Claude et l’ensemble des changements effectués.
« Ce que je remettais à plus tard, Claude l’a fait en 2h »
Ce site tourne depuis 2015 sur Kirby, un CMS PHP fonctionnant à base de fichiers statiques (des fichiers .txt rédigés en Markdown, un langage de balisage léger inventé en 2004 par John Gruber). Après plusieurs années sans mise à jour structurelle (faute de temps), une refonte technique complète a été menée en mars 2026 via Claude Cowork, testé grâce à une licence fournie par la HES-SO Genève.
Claude Cowork, rendu public en janvier 2026, est un logiciel d’automatisation de tâches développé par Anthropic. Contrairement à un assistant conversationnel classique de type chatbot (comme peut l’être la version de base de ChatGPT), Cowork dispose d’un accès direct aux fichiers stockés sur sa machine personnelle (on choisit en amont un dossier de fichiers dans lequel Claude peut intervenir) : il peut lire, analyser et modifier des fichiers sans que leur contenu ait besoin d’être copié-collé manuellement dans une interface de discussion.
Dans mon cas, l’opération a consisté à pointer Cowork vers le dossier de mon site Web sous Kirby, en local sur ma machine (avec bien sûr une sauvegarde préalable), puis à le laisser auditer l’ensemble des templates, snippets, contrôleurs et autres assets. L’objectif était que Claude repère lui-même les bugs, API dépréciées, incohérences et opportunités d’optimisation, le tout avant d’appliquer les corrections fichier par fichier, sous mon contrôle à chaque étape. Les modifications techniques du site pouvaient être prévisualisées avant déploiement par l’usage d’un serveur local PHP via le logiciel MAMP, dont j’ai l’habitude de me servir.

La mise en place a été plutôt rapide, juste le temps de m’habituer à la logique de Claude et d’installer quelques « connecteurs », à savoir des briques logicielles permettant à Claude d’interagir avec d’autres programmes (Google Chrome, Microsoft Office, etc.). L’ensemble de l’analyse, des corrections et du nettoyage des fichiers de template PHP, JavaScript et CSS a été mené en seulement deux heures de travail avec Claude. Une estimation prudente situerait à plusieurs jours de travail le temps que m’aurait nécessité ce même travail « manuellement » – le temps d’auditer le code fichier par fichier, de consulter et de comprendre la documentation Kirby 5, de la bibliothèque PHP 8.2, et de faire des tests techniques.

Ce type de maintenance, habituellement chronophage et invisible dans le résultat final, est pourtant indispensable pour assurer la longévité d’un site Web : compatibilité avec les versions récentes de PHP, réduction des failles de sécurité, fonctionnement avec de nouveaux plugins, amélioration de l’intelligibilité du code source, et optimisation des temps de chargement des pages.
Premier contact avec les IA de « niveau 2 »
Surtout, ce premier contact avec Claude m’a permis d’expérimenter, de façon troublante et fascinante, ce que l’entrepreneur Tariq Krim appelle les IA (LLM) de « niveau 2 », à savoir des agents d’usage avancés permettant de réaliser des séries de tâches les unes à la suite des autres :
« Niveau 1 : casualGPT
C’est ce que ChatGPT et Claude ont bien traité dès leur lancement et qui a permis la magie. Des tâches relativement simples pour la machine, mais magiques pour nous : correction de texte, résumé, reformulation. Une capacité de synthèse qui ne nous étonne plus. Cet usage est un marché de masse, car il correspond au besoin naturel que nous avons de poser des questions, demander des explications, ou tout simplement qu’on écrive nos mails.
Exemples typiques :
- « Corrige les fautes dans ce texte »
- « Résume-moi cet article »
- « Écris un mail de relance pour mon client »
- « Explique-moi la différence entre X et Y »
- « Donne-moi des idées de cadeaux pour un anniversaire »
- « Traduis ce paragraphe en anglais »
C’est plus ou moins de l’assistance conversationnelle. Le modèle répond, vous repartez. Pas de suivi, pas de complexité, pas de contexte à maintenir sur la durée.
Niveau 2 : travail appliqué
C’est le niveau que beaucoup de gens sont en train de découvrir. De la synthèse et de l’analyse qui sont de bonne qualité, qui permettent de faire des choses bien supérieures. Une forme de logique maïeutique. Claude Code est d’une certaine manière la porte d’entrée là-dessus. Et sur ce niveau 2, il y a clairement un avantage à Claude par rapport à ChatGPT, c’est évident.
Exemples typiques :
- Coder une application complète en maintenant la cohérence sur des dizaines de fichiers.
- Analyser un corpus de documents et en extraire une synthèse structurée avec les contradictions identifiées.
- Reprendre un projet là où on l’a laissé sans devoir tout réexpliquer.
- Exécuter précisément une tâche complexe en plusieurs étapes sans dériver.
- Travailler sur un document long en gardant le contexte du début à la fin.
- Faire du refactoring de code en comprenant l’architecture globale.
La différence fondamentale : le modèle doit maintenir un contexte, comprendre ce qu’il a fait, se souvenir de vos instructions, et exécuter exactement ce que vous lui demandez. Pas approximativement. Exactement.
Et ça, on va le voir, ça coûte très cher. 200 dollars au minimum à mon avis.
Niveau 3 : super professionnel
Faire des choses que vous, vous mettriez beaucoup, beaucoup de temps à faire, ou qui peuvent dépasser votre niveau cognitif. C’est là que tous les acteurs veulent aller, la première étape vers l’AGI et la super intelligence. C’est une forme de co-construction de très haut niveau.
Exemples typiques :
- Analyser des milliers de documents juridiques et identifier les failles contractuelles qu’un avocat mettrait des semaines à trouver.
- Générer des hypothèses scientifiques originales à partir d’une revue de littérature exhaustive.
- Optimiser une supply chain en prenant en compte des centaines de variables interdépendantes.
- Produire une stratégie d’investissement personnalisée en temps réel.
- Créer un plan de recherche complet avec méthodologie, anticipation des objections, et identification des angles morts.
Le business model du niveau 3 pourrait être du revenue sharing sur les découvertes ou le travail. OpenAI parlait avant de vendre ces services à 2 000 ou 20 000 euros par mois, mais je n’ai pas réentendu cela. »
Vers un nouveau « design des programmes »
De fait, en attendant ce 3e stade, encore hypothétique pour le plus grand nombre, le saut qualitatif est réel entre les niveaux 1 et 2. Claude Cowork donne l’impression d’un saut dans le temps, d’un dialogue intime avec la machine que l’on orchestre tâche par tâche, ce qui oblige à savoir les expliquer, les structurer… et les vérifier. Le « design des programmes » (du nom de ma thèse de doctorat soutenue en 2013), à savoir les façons qu’ont les logiciels d’exister en tant qu’objets culturels tout en étant « variables », prend alors un nouveau relief. Des agents d’automatisation comme Claude Cowork affectent plus que nos méthodes de travail : ils ouvrent de nouveaux rapports à la machine dont les définitions sont encore complexes à saisir. S’agit-il d’un médium qui pense (« a medium that thinks »), comme le propose le théoricien des médias Lev Manovich ?
Prochaines étapes
Maintenant que le code source a été remis à plat (détails des changements ci-dessous), l’objectif est de continuer les tests avec Claude, mais cette fois pour améliorer l’interface et ajouter de nouvelles fonctions à ce site, ainsi que du contenu. D’autres billets de blog suivront !

— — —
Détails des changements techniques effectués par Claude
N.B. : cette partie a été générée par Claude et relue par mes soins.
Migration de Kirby 3 (2020) à Kirby 5 (2026)
- Les fonctions statiques de Kirby 2
c::set(),str::en minuscule,url::paramsToString()etgrandchildren()avaient déjà été retirées : leur présence sous forme de commentaires ou de code « mort » a été supprimée. strftime(), déprécié en PHP 8.1, avait été remplacé par le gestionnaireintl(format ICU type'MMMM yyyy') : ce comportement a été vérifié et consolidé dans l’ensemble des templates.$site->url('null')causait une erreur 500 sous Kirby 5. Il a été remplacé parkirby()->urls()->index(), la seule forme correcte de l’API actuelle.preg_replace(), avec un sujetnull, entraînait une dépréciation en PHP 8.2. Il a été corrigé par un cast explicite(string)$textdans le hookkirbytext:beforedeconfig.php.excerptToChars(), une fonction inexistante dans Kirby 5, a été remplacée par la méthode nativeexcerpt().
Optimisation des fichiers JavaScript
- jQuery était chargé sans être réellement utilisé. L’ensemble des comportements dépendants a été réécrit en JavaScript natif (vanilla JS), soit : le toggle du menu mobile (burger / fermeture), les notes de bas de page disposées en inline (affichage au clic), les boutons « lire la suite / lire moins » et la navigation par sections (flèches haut/bas).
- La gestion du thème « sombre » a été unifiée autour de
localStorage: suppression du double système cookie etlocalStorage. - Le formulaire TinyLetter, dont le gestionnaire
onsubmitinline, a été déplacé dans le fichier JS principal. - Quatre fichiers JavaScript orphelins ont été supprimés :
browser-detection.js,browser-detection-cssua.js,sun-cookie.jsetjquery-library.3.5.1.js. Le fichierjquery-slider-juxtapose.jsa été renommé enslider-juxtapose.js.
Corrections de sécurité et d’accessibilité
- Ajout de
rel="noopener noreferrer"sur les lienstarget="_blank"manquants. - Correction d’une faille XSS dans
home.php: les paramètres d’URL (param('tag'),param('author'), etc.) étaient affichés sans échappement viaurldecode(). Ils ont été « enveloppés » danshtml(). - Mise à jour des URL
http://vershttps://. - Mise à jour du lien
hal.archives-ouvertes.frvershal.science(domaine migré en 2023). - Côté accessibilité, les iframes (YouTube, Vimeo, Reveal.js, Figma, PDF) ont reçu un attribut
titledescriptif, et l’attribut obsolèteframeborder="0"a été supprimé.
Corrections de bugs
role_projectt()(doublet) dansgrid-item-project.php: la section « Rôle » ne s’affichait jamais, même quand le champ était renseigné.- Les noms de snippets dans
error.phppointaient verslast_publicationsetlast_lectures(inexistants) au lieu desection-last-publicationsetsection-last-lectures. La page 404 était donc cassée. event.preventDefaultsans parenthèses danscv-date-filter.js: la fonction était référencée mais jamais appelée, le filtre de dates ne bloquait pas la soumission du formulaire ;- L’attribut
type="text"sur une balise<textarea>(invalide en HTML) a été retiré. - Une balise
</div>fermait un élément<section class="main">dansdefault.php.
Optimisations de performance
- Dans
search.php, quatre bouclesforeachdistinctes traversaient chacune$site->index()->listed()pour collecter les tags (notions, auteurs, objets, médias). Elles ont été fusionnées en un seul passage avec collecte simultanée des quatre types. - Dans
home-loop-tags.php, douze bouclesforeachsuccessives sur$articles->flip()ont été remplacées par un passage unique qui répartit les articles par catégorie dans un tableau associatif avant affichage. - Dans
search.php, le tri alphabétique des tags utilisaitnatcasesort(), incapable de gérer les accents (« École » après « Zèbre ») : remplacé parnew Collator('fr_FR')qui s’appuie sur l’extensionintldéjà utilisée pour les dates.
Nettoyage du code PHP
- Les balises courtes
<?(sansecho) ont été remplacées par<?phpdans plusieurs snippets. - Les appels
include($kirby->root('site') . '/snippets/...')ont été remplacés par le helper Kirbysnippet(), qui gère correctement le contexte des variables. - Les blocs
isDescendantOfrépétitifs dansgrid-item-archives.phpethome-loop-tags.phpont été refactorisés avec des tableaux et des boucles. - Le
controllers/search.phpa été nettoyé de six lignes de tentatives de recherche commentées. - La variable redondante
$pages = $pagedans les snippetssection-last-*.phpa été supprimée.
Refonte des fichiers CSS
- Les en-têtes de section dans
styles.cssont été uniformisés. Les trois premières sections utilisaient un style/*---*/différent du reste du fichier en/*///*/. - Les labels des points de rupture (breakpoints) dans
responsive.cssont été corrigés. Les trois breakpoints portaient tous le labeliPad in portrait & landscape, qui a été remplacé par des descriptions plus précises :Grand écran — max. 1365 px,Tablettes — max. 1024 px,Mobile — max. 767 px. - Les règles CSS vides contenant uniquement des commentaires de débogage (
/* color:red; */,/* background:pink; */, etc.) ont été supprimées. - Des blocs commentés et inutiles ont été retirés de
print.css,styles.cssetdark.css.