Skip to main content

Blog

Sur le développement web, la performance, les outils — et, de temps à autre, quelque chose de plus grand.

iOSSafariWebKitLexicalcontenteditableDebugging

Quatre bugs tuaient la sélection de texte sur iOS — et chacun cachait le suivant

Un éditeur Lexical dans un drawer vaul fonctionnait partout sauf sur un vrai iPhone : les poignées de sélection refusaient de glisser, le défilement se verrouillait aux bords, la barre d'outils plongeait sous le clavier. Deviner ne réparait rien, car il n'y avait pas de coupable unique — ils étaient quatre, indépendants, et chacun masquait le suivant. Ce qui a marché : un banc de bissection — le même squelette avec un interrupteur par suspect, testé sur un appareil physique. Voici la chasse complète — le href qui empoisonne la sélection, les gestionnaires de drag de vaul, notre propre tap-focus, un conteneur qui bouge sous le doigt — plus l'autopsie du verrou de défilement et les trois écritures uniques de scrollTop qui ont rendu le rubber-band naturel, y compris la capture d'un swipe en plein rebond.

5 septembre 202615 min de lecture
Lire l'article
Claude CodeAICLIBashAutomationResilience

Une cascade d'agents : le terminal choisit celui qui fonctionne

Quand Claude est tombé en partie et que certains modèles ont cessé de répondre, j'ai voulu passer à Gemini — et j'ai découvert que mon repli était cassé depuis des mois. Voici comment en bâtir un qui tienne vraiment.

29 août 20269 min de lecture
Lire l'article
Claude CodeAIAutomationMonitoringlaunchdResilience

system-droid : un gardien qui vérifie et répare mes systèmes tout seul

Mes services locaux mouraient en silence : le brief du matin n'arrivait pas, les jetons expiraient, la sauvegarde se figeait. Alors j'ai construit un droïde sur launchd qui vérifie tout toutes les deux heures, répare via un agent Claude ce qui peut l'être sans risque, et ne m'écrit que lorsqu'il faut vraiment un humain.

17 août 202610 min de lecture
Lire l'article
Next.jsA/B TestingProxyPerformanceSSG

Une page statique qui est secrètement un test A/B

Un test A/B est en général monté de sorte que la page tombe du CDN vers un rendu à chaque requête. Ce n'est pas une fatalité. Garde chaque variante entièrement statique et laisse un proxy (le middleware renommé de Next.js) résoudre l'affectation via une plateforme d'expérimentation, à partir d'un device id stable — puis réécris seulement quand le visiteur n'est pas dans le contrôle. L'URL ne change jamais, le CDN met toujours en cache, et le chemin courant ne coûte rien.

14 août 20268 min de lecture
Lire l'article
VercelGitHub ActionsCI/CDDeploymentMonorepo

Déployer sur Vercel depuis la CI quand l'auteur du commit n'est pas membre de l'équipe

Déplace un dépôt dans une organisation GitHub et Vercel se met discrètement à bloquer tes déploiements : le commit « n'a pas pu être associé à un membre de l'équipe ». Voici comment je déploie plutôt depuis GitHub Actions avec la CLI Vercel — mes commits comptent toujours dans mon propre graphe GitHub, le tableau de bord montre toujours qui a poussé, et je ne paie pas un siège par contributeur.

10 août 20268 min de lecture
Lire l'article
Next.jsMemory LeakDockerAWS LambdaNode.js

Next.js Memory Leak : Fetch + Mode Standalone — 2 ans sans correctif

Next.js patche le fetch global et ajoute une couche de cache qui fuit à chaque requête. Sous Docker/K8s, cela provoque des crashes OOM toutes les quelques heures. Le bug existe depuis Next.js 14 et n'est toujours pas résolu dans 16.2.x.

Mis à jour 10 août 202610 min de lecture
Lire l'article
claude-codeproductivityclidevtools

Plusieurs comptes Claude Code sur un seul appareil

Comment utiliser deux (ou plus) comptes Claude Code en parallèle — personnel et entreprise — avec isolation complète grâce à une seule variable d'environnement.

Mis à jour 9 août 20264 min de lecture
Lire l'article
SolidJSSolidStartPerformanceSSGCode Splitting

Charger le contenu du blog à la demande dans SolidStart sans perdre le SSG

Ton blog livre sans doute le corps de chaque article dans un seul bundle — le mien avait grossi jusqu'à 2,88 Mo, téléchargé même sur la page d'index où tu n'as besoin que des titres. Voici comment j'ai découpé la prose de chaque article dans un chunk chargé à la demande, tout en gardant chaque page entièrement rendue côté serveur pour le SEO.

5 août 20268 min de lecture
Lire l'article
ailearningcareermethodology

CRAFT : une méthode pour utiliser l'AI sans perdre son expertise

Nommer un problème sans proposer de solution ne fait que semer l'anxiété. Après l'article sur la déqualification par l'AI, voici l'ordonnance : CRAFT — cinq principes (Challenge First, Review Adversarially, Ask Why Not What, Friction on Purpose, Test Your Understanding) réunis sous un axiome unique : l'AI fait ce que vous maîtrisez déjà, vous faites ce que vous êtes encore en train d'apprendre. Une méthode pratique et mémorisable pour utiliser l'AI au quotidien sans éroder silencieusement vos compétences.

Mis à jour 5 août 20266 min de lecture
Lire l'article
JavaScriptAnalyticsEvent DelegationServer ComponentsPerformance

Un seul écouteur au lieu d'un composant client par bouton

Dès l'instant où vous ajoutez le suivi analytique d'un clic à un composant, celui-ci devient un composant client qui embarque du JavaScript. Multipliez ce geste à l'échelle d'un site et le suivi à lui seul fait gonfler votre bundle. Voici l'alternative, présente dans la plateforme depuis toujours : un unique écouteur délégué, des attributs de données déclaratifs, et des composants qui restent du pur HTML rendu côté serveur.

28 juillet 202610 min de lecture
Lire l'article
CSSHTMLAccordionFrontendPerformance

Un accordéon fluide avec zéro JavaScript

Tout le monde se rue sur un état React et un hook de mesure de hauteur pour construire un accordéon. Le navigateur en propose un nativement depuis des années — et depuis 2024, il s'anime à l'ouverture comme à la fermeture en CSS pur. Voici la technique complète : details[name], ::details-content, interpolate-size, et la propriété qui rend aussi la fermeture animée.

28 juillet 20269 min de lecture
Lire l'article
JavaScriptWebThird-Party ScriptsFrontendPatterns

Interceptez une valeur tierce dès l'instant où elle arrive sur window

Un script que vous ne contrôlez pas écrit son résultat dans un global de window à un moment que vous ne pouvez pas prévoir. La plupart du code se lance dans une course avec un timeout ou gaspille le main thread en polling. Voici le trick de l'accessor property qui transforme l'écriture en événement — plus le getter que vous ne devez pas oublier, et comment substituer entièrement la valeur.

27 juillet 20269 min de lecture
Lire l'article
CSSContainer QueriesTypographyFrontendPerformance

Ajuster le texte à son conteneur en CSS pur — sans JavaScript

Tout le monde écrit un hook JavaScript pour réduire le font-size jusqu'à ce que le texte tienne dans un conteneur. Voici une alternative pleinement fonctionnelle et sans JS, à base d'unités de container query, de clamp() et de césure selon la langue — y compris le piège de la cascade qui fait abandonner tant de gens.

24 juillet 202611 min de lecture
Lire l'article
Next.jsPerformanceCode SplittingTurbopackReact Server Components

next/dynamic ne vous sauvera pas : pourquoi les pages Next.js pilotées par un CMS embarquent chaque chunk

Nos pages Next.js pilotées par un CMS embarquaient les ~100 composants de section sur chaque route — malgré un usage exemplaire de next/dynamic. Nous avons épuisé tous les correctifs au niveau du bundler (import() direct, découpage des fichiers, config Turbopack, splitChunks de webpack) avant de trouver la vraie cause : la atteignabilité, pas le chunking. Un codegen au build + des rewrites ont réduit le first-load JS de 53%.

18 juillet 202614 min de lecture
Lire l'article
obsidianmiroautomationtoolsopen-source

Je sors mes boards de Miro pour les ramener dans Obsidian

Le bouton Export de Miro te donne un PNG ou un PDF — une photo des données, pas les données. Si tes boards sont des load-bearing maps of thinking accumulées sur des années, leur place est dans Obsidian : editable, searchable, dans un vault local. Comment j'ai sorti les boards de Miro via la REST API et converti vers Excalidraw / Obsidian Canvas — en gardant positions, couleurs, fontes, curved connectors, mindmap nodes — et la leçon dépasse Miro : tout SaaS mérite un exit plan AVANT la première utilisation.

30 juin 20266 min de lecture
Lire l'article
claude-codeproductivityclidevtools

Claude Code Multi-Profile, v2 : une architecture XDG propre

Après un mois sur l'ancienne approche par alias, j'ai refait mon setup multi-profile Claude Code dans une structure compatible XDG sous ~/.config/claude-profiles/. La vraie raison n'était pas la propreté — c'était la découverte que ~/.claude.json est un fichier séparé à la racine du home dans lequel vivaient discrètement les serveurs MCP ajoutés via --scope user.

Mis à jour 23 juin 20269 min de lecture
Lire l'article
ailearningcareerengineering

Le silence que l'AI a éteint

Vaut-il encore la peine d'apprendre à programmer si l'AI existe ? La réponse bruyante se trompe des deux côtés. Avec la base de preuves 2025–2026 (Nature, Anthropic, AI & Society), la question n'est pas "AI ou pas", mais quelles compétences céder à l'AI et lesquelles garder pour toi — et il y a une chose qui a vraiment changé : avant, la réalité te forçait à apprendre par friction, l'AI a éteint cette pression en silence.

22 juin 20268 min de lecture
Lire l'article
claude-codeagentsaiprompt-engineeringautomation

Comment écrire des agents Claude Code qui ne te mentent pas

Deux règles pour construire des pipelines d'agents Claude Code fiables : un agent par spécialisation, et des commandes shell plutôt que des prompts partout où une réponse quantitative est en jeu.

29 mai 20266 min de lecture
Lire l'article
ObsidianClaudeMCPAutomationAI

Comment connecter Claude Desktop à Obsidian — Un parcours à travers 4 serveurs MCP

Une histoire réelle de recherche d'un moyen stable d'automatiser le refactoring du vault Obsidian via Claude. Ce qui a cassé, ce qui a fonctionné, et pourquoi VaultForge s'est avéré être la seule option fonctionnelle.

3 mai 20269 min de lecture
Lire l'article
physicsphilosophyconsciousnessblack-holescosmology

Les trous noirs comme univers récursifs : de la physique au sens de l'existence

Et si chaque trou noir était un Big Bang d'un nouvel univers ? Une exploration de la cosmologie récursive et de la clôture cognitive.

17 avril 202610 min de lecture
Lire l'article
aicmsweb-developmentopinionworkflow

L'IA a tué le CMS — du moins pour les sites simples

Pourquoi les systèmes de gestion de contenu traditionnels deviennent inutiles pour les portfolios, blogs et pages d'atterrissage.

17 avril 20268 min de lecture
Lire l'article
ObsidianPerplexityMCPAIProductivity

Comment connecter Perplexity AI à Obsidian via MCP — Prise de notes directe depuis le chat

Configurez Perplexity Desktop pour lire et écrire dans votre Obsidian vault en utilisant le serveur MCP filesystem. Recherchez sur le web et sauvegardez dans vos notes en une conversation.

12 avril 20265 min de lecture
Lire l'article
Claude CodeAIObsidianAutomationProductivity

Digest Quotidien AI avec Claude Code CLI et Obsidian — Zéro Dépendance

Comment j'ai construit un agent de recherche d'actualités quotidien avec un script bash de 6 lignes, le mode headless de Claude Code et macOS launchd.

12 avril 20267 min de lecture
Lire l'article
next.jsreact-19dark-modezustandperformance

Mode sombre Next.js sans flash ni avertissements React 19

Comment remplacer next-themes par Zustand + useServerInsertedHTML pour un mode sombre sans clignotement dans Next.js 15+.

11 avril 20268 min de lecture
Lire l'article
Next.jsCSSPerformanceTurbopackSCSS

Comment j'ai éliminé 94 fichiers CSS bloquant le rendu dans Next.js 16 avec une fonctionnalité Turbopack peu documentée

Après des jours à essayer chaque approche — de experimental.inlineCss aux hacks MutationObserver — j'ai découvert les Turbopack Import Attributes qui résolvent le problème de CSS bloquant le rendu dans Next.js App Router.

8 avril 202612 min de lecture
Lire l'article