Sébastien Rigaux

Liens sélectionnés

Veille technologique

Une sélection personnelle de liens, outils et idées que je souhaite garder et partager avec mes équipes.

Carte GitHub du repository reticlehq/reticle : son nom, une description de la perception à l’exécution pour les agents d’IA et une icône noire, avec les compteurs de contributeurs, d’utilisateurs, de discussions, d’étoiles et de forks.

Reticle aide les agents de code à vérifier ce qu’ils ont réellement construit, au lieu de s’en tenir au changement de code. Le repository présente un outil de perception à l’exécution pour les applications web et desktop ; reticle compare confronte deux builds en les pilotant dans un navigateur et relève les différences visibles, les appels réseau et les erreurs de console.

La vérification se fait depuis l’extérieur de l’application : aucun SDK n’est requis. Le comparateur peut opposer une version principale à une preview de pull request et, avec --base, classer les différences en régressions, cibles manquées ou changements.

Divyanshu Shekhar

Visuel Fimo avec le texte « Your website, with superpowers » et « Get found in AI answers and search », sur fond clair décoré de formes circulaires colorées.

Fimo propose aux équipes marketing de maintenir un site et d’améliorer sa visibilité dans les moteurs de recherche et les réponses d’IA grâce à des agents spécialisés en SEO, GEO, contenu, performance, accessibilité et conformité. La plateforme inclut aussi un éditeur visuel, l’hébergement, des previews et l’historique des changements.

Les agents s’exécutent selon un calendrier ou à la suite d’une modification du site. Les petites corrections peuvent être publiées automatiquement ; les changements qui exigent une décision arrivent sous forme de proposition avec preview, à approuver avant publication. Le site reste connecté à son framework existant, sans reconstruction, et les développeurs continuent de travailler dans le code.

Capture du site x18n en thème sombre : à gauche, le titre « i18n files, checked and maintained » ; à droite, une interface de traduction affichant des clés, leurs valeurs en plusieurs langues et une traduction française manquante.

x18n repère les clés de traduction manquantes, inutilisées ou incorrectes en croisant les appels du code et les fichiers de locale. Son CLI peut faire échouer la CI sur les erreurs, tandis que les commandes de recherche et de renommage relient les valeurs traduites à leurs usages.

Le même moteur alimente le CLI, l’extension VS Code et une interface web. Le renommage peut couvrir les fichiers de locale et le code, avec --dry-run pour examiner les changements avant écriture ; l’interface expose aussi des outils MCP pour les agents de programmation.

Bannière GitHub du dépôt avec son nom, une photo de profil et des compteurs de contributeurs, d’utilisateurs, de discussions, d’étoiles et de forks.

Ce plugin ESLint repère les useEffect qui compliquent inutilement le flux React et associe chaque anti-pattern à une alternative précise et à un lien vers la documentation. Il couvre notamment l’état dérivé, les mises à jour en chaîne et les effets utilisés comme gestionnaires d’événements.

Son analyse tient compte de l’état, des props, du contexte, des refs et des dépendances pour évaluer quand un effet s’exécute. Il propose des configurations recommandées ou strictes et fonctionne aussi avec Oxlint.

Nick van Dyke

Visuel noir avec un grand crâne gris en arrière-plan et le texte « Skullet — Smart Skeleton States ».

Skullet automatise les états de chargement sans placeholders dessinés à la main : le package npm affiche des données d’exemple invisibles, mesure les éléments, puis dessine des skeletons à leur forme pour limiter les décalages de mise en page.

La démonstration met en scène plusieurs interfaces, des métriques aux notifications, et soulève aussi la question du rendu côté serveur.

@lochieaxon

ToolEN

react-resizable-panels : trois modèles de layouts redimensionnables

react-resizable-panels.vercel.appPermalien
Visuel violet portant le texte « react resizable panels » à côté d’un symbole de chevrons et d’une barre verticale.

La documentation de react-resizable-panels présente des composants React pour construire des interfaces redimensionnables : panneaux en ligne ou en colonne, grilles ajustables en deux dimensions et workspaces à onglets réorganisables par glisser-déposer.

L’exemple de workspace montre comment fournir un modèle initial avec defaultModel et choisir le contenu d’un onglet via renderTabContent. Le package inclut ses définitions TypeScript.

Carte blanche sur fond bleu pâle affichant « Fixing a Hydration Mismatch Error and UI Flicker in React » et la mention « Blog ».

Dans Next.js, une valeur de localStorage peut faire diverger le HTML rendu côté serveur du premier rendu client. L’article compare les compromis : attendre le montage évite l’erreur, mais retire le contenu réel du HTML SSR ; initialiser les deux rendus avec la même valeur préserve ce contenu, au prix d’une mise à jour ultérieure pouvant provoquer un flicker.

Pour synchroniser une sidebar sans ce clignotement, un script inline applique son état au DOM avant l’hydratation et le transmet à React, qui reprend les mêmes classes. L’article distingue aussi le cas d’un contrôle de thème isolé et celui d’un backdrop mobile géré par CSS.

Giorgi MoniavaRepéré via React Digest

Logo blanc de Decap sur un fond dégradé violet et rose.

Decap CMS ajoute une interface éditoriale aux sites statiques sans déplacer le contenu hors du repository Git. Les équipes peuvent gérer brouillons, relectures et publications, avec historique versionné et aperçu en temps réel pour les contributeurs non techniques.

La configuration déclarative tient dans un fichier config.yml et permet de définir collections, champs et workflows ; des widgets personnalisés étendent l’éditeur. Pour les équipes qui ont besoin d’accès centralisés ou de mieux absorber les limites d’API Git, Decap Turbo ajoute notamment authentification hébergée et proxy de base de données.

Bannière Taste Skill sur fond beige, avec le nom du projet à gauche et des maquettes d’interfaces empilées à droite.

Taste Skill fournit aux agents de code un système pour construire des sites d’entreprise moins génériques : palettes, layouts de hero, fragments d’interface et images réelles, avec une direction adaptée au type d’activité. Le dépôt propose des intégrations pour Claude Code et Codex, ainsi qu’un usage via npx skills.

Le point distinctif est le contrôle automatisé dans Chrome headless : la page est rendue à quatre largeurs, de 390 à 1440 px, et vérifiée pour les visuels vides, les contrastes, l’alignement ou les images manquantes sur réseau lent. Les effets WebGL et de scroll sont réservés aux pages tech, gaming et software, avec des replis statiques pour mobile et la réduction des animations.

Leonxlnx

Bannière GitHub du dépôt libracoder/kiri : son nom, une courte description du runtime de conteneurs, le portrait d’un homme et les compteurs de contributeurs, issues, discussions, stars et forks.

Kiri remplace Docker Desktop et OrbStack par un runtime de conteneurs léger pour macOS, Windows et Linux, compatible avec la CLI Docker, Compose et buildx. Le dépôt détaille aussi une interface native et la prise en charge de clusters Kubernetes et de machines Linux.

Son architecture repose sur une VM Linux et un agent Rust qui lance les conteneurs via clone3, sans runc, shim ni dockerd. Le projet publie des benchmarks comparant les temps de démarrage à ceux de Docker Desktop et OrbStack, ainsi que la méthode pour les reproduire.

Precious Okwu

Logo NewReleases : le mot « new » en bleu et « (releases) » en noir sur fond blanc.

NewReleases suit les nouvelles versions de projets et de paquets sur des plateformes comme GitHub, npm, NuGet ou Docker Hub, puis envoie des alertes par e-mail, messagerie instantanée ou webhook. Le service évite de vérifier manuellement chaque dépendance ou outil utilisé.

Les notifications peuvent être instantanées ou périodiques, et le suivi se configure avec des fichiers de dépendances comme package.json, requirements.txt ou go.mod. Des filtres par expressions régulières et par statut de préversion permettent d’affiner les versions signalées.

Janoš Guljaš

Bannière GitHub de Papra : nom du dépôt, icône de document vert clair sur fond noir, et statistiques de contributeurs, d’utilisations, d’étoiles et de forks.

Papra centralise le stockage et la gestion de documents dans une plateforme d’archivage open source. Recherche plein texte, filtres avancés, tags et import automatique par e-mail ou depuis un dossier facilitent le classement et la récupération des fichiers.

Le projet se déploie avec Docker et propose aussi une CLI, une API, des SDK et des webhooks pour l’intégrer à d’autres outils. La démo en ligne fonctionne uniquement en stockage local côté navigateur, sans backend.

Corentin Thomasset

Aperçu GitHub du dépôt pullboard-dev/pullboard, avec son nom, une description tronquée et les compteurs de contributeurs, issues, étoiles et forks.

Pullboard coordonne des agents de développement à partir de spécifications approuvées : chacun prend un item dans une worktree dédiée, passe un gate de tests, puis un autre agent vérifie le commit avant qu’il soit accepté. Les règles et l’activité restent dans le dépôt, avec un tableau local plutôt qu’un service hébergé.

Le point fort est le contrôle du flux : les exigences approuvées sont figées quand l’agent prend l’item, les lanes limitent les chemins modifiables et les transitions d’état suivent une machine commune aux commandes, à l’interface et à la documentation.

Capture de l’interface Zerobyte affichant des tâches de sauvegarde planifiées, leur statut et leur dépôt de destination.

Zerobyte centralise la planification, la gestion et le suivi de sauvegardes chiffrées avec Restic, depuis une interface web. Il prend en charge des sources NFS, SMB, WebDAV, SFTP ou des répertoires locaux, et plusieurs destinations dont S3, GCS, Azure et rclone.

Le déploiement Docker Compose peut être allégé si seuls des dossiers déjà montés sont sauvegardés : retirer SYS_ADMIN et le périphérique FUSE réduit les capacités accordées au conteneur, mais empêche le montage direct des partages distants.

nicotsx

Capture d’un document montrant des liens vers Have I Been Pwned et multisearch, ainsi qu’un avertissement sur les sources de fuites de données.

Un workflow en trois agents vise à repérer les données personnelles exposées, trouver les procédures de suppression et préparer des demandes RGPD. Le document détaille les rôles, les consignes à fournir et la manière de faire collaborer les agents dans un chat de groupe Cue.

Le parcours garde une validation humaine avant l’envoi des e-mails et rappelle de ne jamais communiquer de mots de passe. Il distingue aussi les sites qui répertorient les fuites des organisations qui en sont à l’origine, pour éviter de contacter le mauvais interlocuteur.

Bannière du dépôt GitHub cloudflare/security-audit-skill, présentant sa description comme skill de coding agent et les compteurs de contributeurs, issues, étoiles et forks.

Ce skill transforme un coding agent en auditeur de sécurité en orchestrant un audit de dépôt en six phases, de la reconnaissance à la génération de rapports. Les constats sont structurés en données lisibles par machine et vérifiés indépendamment.

Chaque piste est soumise à un agent distinct chargé de tenter de la réfuter ; les résultats distinguent constats confirmés, pistes à valider et pistes rejetées. L’exécution de code cible exige un sandbox imposé par le système d’exploitation, sans réseau externe et avec des ressources limitées.

Un chien noir et blanc court après une balle de tennis verte sur un terrain.

Les quatre en-têtes Fetch Metadata indiquent au serveur d’où vient une requête et comment sa réponse sera utilisée. Andrew Lock détaille Sec-Fetch-Site, Sec-Fetch-Mode, Sec-Fetch-Dest et Sec-Fetch-User pour aider à distinguer, par exemple, une navigation légitime d’une requête intersite suspecte.

Des exemples opposent le chargement d’une image depuis un CDN à un fetch() JavaScript. Ces signaux, que JavaScript ne peut pas modifier, peuvent alimenter une Resource Isolation Policy et ajouter une couche de défense contre les requêtes CSRF.

Andrew LockRepéré via C# Digest

Logo en forme de cube composé de blocs gris, avec un bloc orange au centre.

Finbuckle.MultiTenant fournit à ASP.NET Core les briques de résolution des tenants, de configuration par tenant et d’isolation des données. Le démarrage combine une stratégie basée sur le host, un store alimenté par la configuration et le middleware UseMultiTenant().

Le middleware doit précéder ceux qui dépendent du tenant, comme l’authentification et l’autorisation. La bibliothèque propose aussi des intégrations pour les options, l’authentification et l’isolation des données avec Entity Framework Core.

Bannière « Multi-Tenant .NET, Part 4: Moving Day », avec des cartons de déménagement, un emblème de guilde et un portrait illustré.

Ce volet explique comment déplacer un tenant d’une base partagée vers une base dédiée sans arrêter l’application ni perturber les autres tenants. Le catalogue pilote le basculement, tandis que le même modèle EF Core et son filtre restent en place dans les deux modes.

La migration s’appuie sur une copie initiale, un passage temporaire en lecture seule, une copie delta et une vérification avant le cutover. Le runbook attend l’expiration du cache avant de rouvrir les écritures : les instances qui conservent encore l’ancienne connexion ne peuvent ainsi pas écrire dans la base partagée après le basculement.

BarretRepéré via C# Digest

Une main manipule des câbles réseau colorés devant des équipements installés en rack.

Avec une base par tenant, EF Core n’a plus besoin de filtre global, de colonne TenantId ni de clé de cache de modèle spécifique : le choix du tenant passe par une chaîne de connexion résolue depuis une base catalogue.

Cette isolation simplifie le modèle, mais déplace la complexité vers l’exploitation : chaque migration doit s’appliquer à toutes les bases. L’article détaille aussi le rôle de IDesignTimeDbContextFactory pour permettre à dotnet ef de créer le contexte sans requête ni tenant actif.

BarretRepéré via C# Digest