{"pageProps":{"locale":{"code":"fr","domain":"frenchstack.fr","lang":"fr-FR","json":{"TRANSLATE":"Traduire en","EN":"Anglais","FR":"Français","NO_TRANSLATION_AVAILABLE":"Aucune traduction disponible","PROFILE_OF":"Profil de","FILTER_BY_TAG":"Filtrer par tag","REMOVE_FILTER":"Supprimer le filtre","RESULT":"Résulat","RESULTS":"Résulats","FORM_CONTACT_SUPPORT":"Support","FORM_CONTACT_SALES":"Devis","FORM_CONTACT_BUGS":"Rapport de bug","FORM_LOADING":"Chargement","FORM_SEND":"Envoyer","FORM_VERIFY":"Vérifier","FORM_NAME":"Nom","FORM_TOPIC":"Sujet","FORM_PHONE":"Téléphone","FORM_EMAIL":"Email","FORM_MESSAGE":"Message","FORM_DOMAIN_PLACEHOLDER":"exemple.fr","FORM_DOMAIN_AVAILABLE":"Félicitations, le domaine <span data-selector='domain'></span> est disponible !","FORM_DOMAIN_TAKEN":"Désolé, le domaine <span data-selector='domain'></span> est pris.","SUBSCRIBE":"S'abonner","SUCCESS_CONTACT":"Votre message a bien été envoyé ! Nous vous répondrons dans les plus brefs délais.","SOMETING_WENT_WRONG":"Oops, une erreur s'est produite. Veuillez réessayer ultérieurement.","PERFORMANCE":"Performance","ACCESSIBILITY":"Accessibilité","BEST_PRACTICES":"Bonnes pratiques","SEO":"Référencement","MOBILE":"Mobile","TABLET":"Tablette","DESKTOP":"Ordinateur","VISITORS":"Visiteurs","ENGAGEMENT":"Engagement","CONVERSIONS":"Conversions","JAN":"Janv","FEB":"Févr","MAR":"Mars","APR":"Avr","MAY":"Mai","JUN":"Juin","JUL":"Juil","AUG":"Août","SEP":"Sept","OCT":"Oct","NOV":"Nov","DEC":"Déc","METHOD_PHONE":"Téléphone","METHOD_EMAIL":"Email","FOOTER_TAGLINE":"Nous créons des expériences numériques uniques pour les marques et les entreprises."},"subdomains":{"blog":"blog","clients":"references","videos":"videos","services":"services"},"ogSection":"Technologie"},"slugs":["fr","blog","fallow-codebase-intelligence-typescript"],"component":"article","article":{"id":"content/articles/fr/fallow-codebase-intelligence-typescript.mdx","heroSection":{"heroTitle":"Fallow : la qualité de code au rythme des agents IA","heroSubtitle":"Retour d'expérience sur un garde-fou déterministe","heroBadge":"","heroColoredWords":"1","heroBreakTitle":"","heroDescription":{"type":"root","children":[{"type":"p","children":[{"type":"text","text":"Comment un analyseur statique écrit en Rust cadre mes agents IA et transforme fonctions trop longues et fichiers fourre-tout en unités claires, nommées et faciles à faire évoluer."}]}]},"heroSubtitleIsInline":false,"heroHasBackground":false,"heroImage":"/images/code-laptop.png","heroVideoBackground":"","heroStyle":{"heroBg":"","heroMaxWidth":"","heroMs":"","heroTitleMb":"","heroTitleColor":"","heroContentBg":"","heroContentAlign":"","heroContentBlur":"","heroBlurImage":"","navbarBg":"","navbarBorderColor":"","navbarLinkActive":"","navbarLinkHover":""},"imageAlt":"code laptop","imageWidth":5184,"imageHeight":3456},"seoSection":{"metaTitle":"Fallow et agents IA : retour d'expérience sur la qualité de code","metaDescription":"Retour d'expérience : Fallow, analyseur statique TypeScript écrit en Rust, sert de source de vérité à mes agents IA et les guide pour découper fonctions et fichiers en unités claires, bien nommées et bien rangées.","metaTags":"Fallow, TypeScript, agent IA, qualité de code, complexité cognitive, refactoring, Claude Code, Codex, analyse statique, MCP, vibe coding","socialImageWidth":0,"socialImageHeight":0},"heroUpdatedAt":"2026-10-18T09:00:00.000Z","localeCode":"fr","slug":"fallow-codebase-intelligence-typescript","url":"/fr/blog/fallow-codebase-intelligence-typescript","ogId":"fallow-codebase-intelligence-typescript-blog-fr","ogImagePath":"/og/fallow-codebase-intelligence-typescript-blog-fr.png","type":"Article","title":"Fallow : la qualité de code au rythme des agents IA","subtitle":"Retour d'expérience sur un garde-fou déterministe pour TypeScript","browserUrl":"","textPreview":{"type":"root","children":[{"type":"p","children":[{"type":"text","text":"Fallow mesure la complexité, le code mort et la duplication d'un projet TypeScript. Branché sur mes agents IA, il fait de chaque commit l'occasion de découper fonctions et fichiers en unités bien nommées et bien rangées."}]}]},"subdomainKey":"blog","subdomain":"blog","draft":true,"logoAlt":"","logoWidth":0,"logoHeight":0,"icon":"code","body":{"type":"root","children":[{"type":"p","children":[{"type":"text","text":"Les agents IA écrivent désormais une large part du code de mes projets. Ils livrent vite et bien avec une tendance constante : "},{"type":"text","text":"enrichir l'existant","bold":true},{"type":"text","text":" plutôt que de créer un nouveau concept. Au fil des demandes, une fonction de 20 lignes en compte 100, un fichier de 100 lignes en compte 500, et les noms ne décrivent plus qu'une partie de ce qu'ils contiennent."}]},{"type":"p","children":[{"type":"text","text":"Fallow","bold":true},{"type":"text","text":" corrige cette dérive avec une efficacité redoutable. Avant chaque commit, mon agent exécute Fallow pour mesurer les fonctions et les fichiers du projet : tant que le verdict n'est pas vert, l'IA découpe. La procédure assure un code composé de petites fonctions, rangées dans des fichiers à responsabilité unique, dont le nom dit exactement ce qu'ils font."}]},{"type":"hr","children":[{"type":"text","text":""}]},{"type":"h2","children":[{"type":"text","text":"Fallow en bref"}]},{"type":"p","children":[{"type":"a","url":"https://fallow.tools","title":"Fallow - Codebase intelligence","children":[{"type":"text","text":"Fallow"}]},{"type":"text","text":" est un analyseur statique "},{"type":"text","text":"open source","italic":true},{"type":"text","text":" pour "},{"type":"text","text":"TypeScript et JavaScript","bold":true},{"type":"text","text":", distribué sous licence MIT sous la forme d'un binaire Rust unique. Il construit un graphe complet du dépôt (modules, exports, dépendances, fonctions) et en tire quatre familles d'analyses :"}]},{"type":"ul","children":[{"type":"li","children":[{"type":"lic","children":[{"type":"text","text":"Complexité","bold":true},{"type":"text","text":" : Mesure de la complexité cyclomatique et cognitive de chaque fonction, score de maintenabilité de chaque fichier et note de santé du projet sur 100."}]}]},{"type":"li","children":[{"type":"lic","children":[{"type":"text","text":"Code mort","bold":true},{"type":"text","text":" : Détection des fichiers, exports, types et dépendances que plus rien n'utilise."}]}]},{"type":"li","children":[{"type":"lic","children":[{"type":"text","text":"Duplication","bold":true},{"type":"text","text":" : Repérage des blocs copiés d'un fichier à l'autre, y compris dans le CSS et les composants Vue, Svelte ou Astro."}]}]},{"type":"li","children":[{"type":"lic","children":[{"type":"text","text":"Architecture","bold":true},{"type":"text","text":" : Contrôle des frontières entre couches et des dépendances circulaires."}]}]}]},{"type":"p","children":[{"type":"text","text":"L'analyseur n'embarque "},{"type":"text","text":"aucun modèle de langage","bold":true},{"type":"text","text":" : la même entrée produit toujours le même résultat. Il ne requiert ni compilateur TypeScript ni runtime Node.js, et analyse le monorepo de Next.js ("},{"type":"text","text":"20 558 fichiers","bold":true},{"type":"text","text":") en moins de "},{"type":"text","text":"3 secondes","bold":true},{"type":"text","text":" selon les mesures publiées par le projet."}]},{"type":"p","children":[{"type":"text","text":"Ce déterminisme en fait le bon partenaire d'un agent IA : l'agent propose, Fallow mesure."}]},{"type":"p","children":[{"type":"text","text":"Sources : ","italic":true},{"type":"a","url":"https://github.com/fallow-rs/fallow/blob/main/BENCHMARKS.md","title":null,"children":[{"type":"text","text":"BENCHMARKS.md","italic":true}]},{"type":"text","text":" du projet (mesures de juin 2026) et ","italic":true},{"type":"a","url":"https://fallow.tools","title":null,"children":[{"type":"text","text":"fallow.tools","italic":true}]},{"type":"text","text":", consultés en octobre 2026.","italic":true}]},{"type":"hr","children":[{"type":"text","text":""}]},{"type":"h2","children":[{"type":"text","text":"Un garde-fou dans la boucle de l'agent"}]},{"type":"p","children":[{"type":"text","text":"Au rythme des agents, je ne relis plus chaque ligne une à une. Demander à un agent « d'écrire du code simple » reste une intention : sans mesure, il n'a aucun moyen de savoir si la contrainte est respectée."}]},{"type":"p","children":[{"type":"text","text":"Fallow devient le garde-fou de chaque commit."}]},{"type":"p","children":[{"type":"text","text":"La mise en place tient en une commande. "},{"type":"text","text":"fallow agent install","code":true},{"type":"text","text":" installe les "},{"type":"text","text":"skills","italic":true},{"type":"text","text":" qui apprennent à l'agent à lire les résultats, déclare le serveur MCP de Fallow, ajoute ses consignes au fichier "},{"type":"text","text":"AGENTS.md","code":true},{"type":"text","text":" et pose un verrou sur "},{"type":"text","text":"git commit","code":true},{"type":"text","text":" dans Claude Code et Codex :"}]},{"type":"code_block","lang":"bash","value":"# Configurer les agents du projet : skills, serveur MCP, AGENTS.md et verrou sur git commit\nnpx fallow agent install\n\n# Ce que l'agent lance pour vérifier son travail avant de committer\nnpx fallow audit --format json --quiet\n\n# Les fichiers à reprendre en priorité, avec une recommandation pour chacun\nnpx fallow health --targets","children":[{"type":"text","text":""}]},{"type":"p","children":[{"type":"text","text":"Le schéma ci-dessous montre la boucle que suit l'agent à la fin de chaque tâche :"}]},{"type":"mdxJsxFlowElement","name":"agentLoop","children":[{"type":"text","text":""}],"props":{"steps":[{"actor":"agent","title":"Développement","detail":"Implémentation de la demande, sans contrainte particulière"},{"actor":"fallow","title":"Mesure","detail":"Signalement des fonctions trop complexes, des fichiers à scinder, des exports inutiles et des blocs dupliqués","inLoop":true},{"actor":"agent","title":"Découpage","detail":"Extraction des étapes en fonctions nommées et des responsabilités en fichiers dédiés","inLoop":true},{"actor":"git","title":"Commit","detail":"Accepté seulement sur un verdict « pass »"}],"loopLabel":"jusqu'au vert","caption":"Le verrou bloque le commit tant que Fallow rend un verdict « fail »."}},{"type":"p","children":[{"type":"text","text":"Le découpage s'opère à deux échelles :"}]},{"type":"ul","children":[{"type":"li","children":[{"type":"lic","children":[{"type":"text","text":"Fonction","bold":true},{"type":"text","text":" : Seuils par défaut de "},{"type":"text","text":"20","bold":true},{"type":"text","text":" en complexité cyclomatique, "},{"type":"text","text":"15","bold":true},{"type":"text","text":" en complexité cognitive et "},{"type":"text","text":"60 lignes","bold":true},{"type":"text","text":" par fonction, que je conserve tels quels."}]}]},{"type":"li","children":[{"type":"lic","children":[{"type":"text","text":"Fichier","bold":true},{"type":"text","text":" : Score de maintenabilité calculé à partir de la taille, de la densité de complexité, du code mort et des dépendances, et recommandations classées par priorité, comme « scinder un fichier dont trop d'autres dépendent » ou « extraire la fonction "},{"type":"text","text":"parseRow","code":true},{"type":"text","text":" d'un fichier de 520 lignes »."}]}]}]},{"type":"p","children":[{"type":"text","text":"Fallow ne dit pas comment corriger : il désigne ce qui est trop long, trop imbriqué, trop central ou répété, et laisse à l'agent le soin de "},{"type":"text","text":"découper et ranger","bold":true},{"type":"text","text":"."}]},{"type":"p","children":[{"type":"text","text":"Source : ","italic":true},{"type":"a","url":"https://fallow.tools/docs/explanations/health/","title":null,"children":[{"type":"text","text":"Health explained","italic":true}]},{"type":"text","text":", documentation de Fallow consultée en octobre 2026.","italic":true}]},{"type":"hr","children":[{"type":"text","text":""}]},{"type":"h2","children":[{"type":"text","text":"Retour d'expérience : un bot de réservation"}]},{"type":"p","children":[{"type":"text","text":"J'ai codé un petit bot en "},{"type":"text","text":"TypeScript","bold":true},{"type":"text","text":" qui réserve automatiquement mes séances de sport, dont les places partent en quelques minutes. Une fois stabilisé, j'ai confié le projet à un agent IA pour qu'il l'intègre à "},{"type":"text","text":"Home Assistant","bold":true},{"type":"text","text":" : interface graphique, réservations pilotables et notifications sur le téléphone."}]},{"type":"p","children":[{"type":"text","text":"L'agent a livré vite et tout fonctionnait mais chaque évolution avait enrichi le code existant. Une seule fonction contenait la connexion à l'API, la récupération du planning, le choix du créneau puis la réservation, et toute l'interface tenait dans un seul fichier."}]},{"type":"p","children":[{"type":"text","text":"Une fois Fallow branché, l'agent n'a pas coupé au hasard pour faire baisser un chiffre : il a isolé chaque "},{"type":"text","text":"étape métier","bold":true},{"type":"text","text":" dans une fonction dédiée, avec un nom qui dit ce qu'elle fait."}]},{"type":"mdxJsxFlowElement","name":"functionSplit","children":[{"type":"text","text":""}],"props":{"name":"tryReserve","caption":"88 lignes où la connexion, le planning, le choix du créneau et la réservation s'entremêlent.","label":"découpé par l'agent","parts":[{"name":"getAuthAndBooked","params":"config","comment":"se connecter et lister mes réservations","weight":5},{"name":"getSessions","params":"planning","comment":"ne garder que les séances","weight":3},{"name":"pickLatestPerWeek","params":"sessions","comment":"le dernier créneau du jour, semaine par semaine","weight":4},{"name":"tryBookSession","params":"session","comment":"vérifier les places, puis réserver","weight":7}],"result":"La fonction principale passe de 88 à 28 lignes et se lit désormais comme une recette."}},{"type":"p","children":[{"type":"text","text":"Le même mouvement s'est répété à l'échelle des fichiers. L'interface tenait dans un "},{"type":"text","text":"App.tsx","code":true},{"type":"text","text":" de "},{"type":"text","text":"501 lignes","bold":true},{"type":"text","text":" : l'agent l'a répartie en "},{"type":"text","text":"7 composants","bold":true},{"type":"text","text":" réutilisables, un fichier de types partagés et un "},{"type":"text","text":"hook","italic":true},{"type":"text","text":" dédié, ramenant "},{"type":"text","text":"App.tsx","code":true},{"type":"text","text":" à "},{"type":"text","text":"116 lignes","bold":true},{"type":"text","text":". L'envoi des notifications, écrit 3 fois, n'existe plus qu'à un seul endroit sous le nom "},{"type":"text","text":"notifyBookingSuccess","code":true},{"type":"text","text":"."}]},{"type":"mdxJsxFlowElement","name":"callout","children":[{"type":"text","text":""}],"props":{"title":"Pourquoi les noms et le rangement s'améliorent","variant":"success","content":{"type":"root","children":[{"type":"p","children":[{"type":"text","text":"Une fonction de 100 lignes ou un fichier de 500 lignes peuvent porter un nom vague. Une fonction de 10 lignes ou un composant à responsabilité unique doivent être nommés avec précision, sans quoi le code qui les appelle devient illisible. En imposant des unités courtes, Fallow oblige l'agent à "},{"type":"text","text":"nommer et ranger chaque responsabilité","bold":true},{"type":"text","text":" : l'arborescence devient le plan du projet, et un nouvel agent trouve directement le bon fichier sans parcourir tout le projet."}]}]}}},{"type":"hr","children":[{"type":"text","text":""}]},{"type":"h2","children":[{"type":"text","text":"Une source de vérité pour cadrer l'agent"}]},{"type":"p","children":[{"type":"text","text":"Un agent IA intervient sur un projet comme le ferait un développeur : il cherche le bon fichier, lit ce qui l'entoure et modifie ce qu'il comprend. Un code généré prompt après prompt, sans jamais être refactoré, accumule dès les premières demandes les traits d'un code "},{"type":"text","text":"legacy","italic":true},{"type":"text","text":" : fichiers fourre-tout, noms approximatifs, logique dupliquée. Chaque demande suivante coûte alors plus de lecture, et chaque modification touche des parties que l'agent n'a pas vues."}]},{"type":"p","children":[{"type":"text","text":"Fallow inverse cette pente sans exiger une expertise en architecture logicielle. Les règles de découpage, de nommage et de rangement n'ont plus à être détaillées dans chaque prompt, ni contrôlées à la relecture : elles sont mesurées, et le verdict s'impose à l'agent. Le bénéfice se lit sur trois plans :"}]},{"type":"ul","children":[{"type":"li","children":[{"type":"lic","children":[{"type":"text","text":"Moins de régressions","bold":true},{"type":"text","text":" : Des fonctions courtes et des fichiers à responsabilité unique, où chaque modification reste circonscrite à la partie concernée."}]}]},{"type":"li","children":[{"type":"lic","children":[{"type":"text","text":"Moins de jetons","bold":true},{"type":"text","text":" : Une navigation guidée par des noms explicites, sans relecture de fichiers entiers pour trouver la bonne ligne."}]}]},{"type":"li","children":[{"type":"lic","children":[{"type":"text","text":"Plus de maîtrise","bold":true},{"type":"text","text":" : Un critère objectif et reproductible pour valider le travail de l'agent, là où une consigne en langage naturel reste invérifiable."}]}]}]},{"type":"p","children":[{"type":"text","text":"C'est pour les profils moins familiers de l'architecture logicielle que ce cadre pèse le plus. Des bonnes pratiques longues à acquérir et difficiles à formuler deviennent un verdict lisible à chaque commit, et sur un projet existant, "},{"type":"text","text":"fallow audit","code":true},{"type":"text","text":" ne bloque que les problèmes introduits par la modification en cours : le nettoyage avance au fil des demandes, sans tout reprendre d'un coup."}]},{"type":"p","children":[{"type":"text","text":"Si votre code vous inspire moins de confiance que vous le souhaiteriez, confiez Fallow à votre agent : il se charge du nettoyage sans que vous ayez à lui dicter chaque règle. Fallow ne bride pas la créativité de l'agent : il la "},{"type":"text","text":"canalise","bold":true},{"type":"text","text":" dans un cadre mesurable, et la qualité ne se décrète plus, elle se vérifie."}]},{"type":"mdxJsxFlowElement","name":"buttons","children":[{"type":"text","text":""}],"props":{"buttons":[{"icon":"gitHub","label":"Fallow sur GitHub","link":"https://github.com/fallow-rs/fallow","style":"primary"},{"icon":"codeFile","label":"Documentation","link":"https://fallow.tools/docs","style":"light"}]}}]},"dateCreate":"2026-08-26T09:00:00.000Z","dateUpdate":"2026-10-18T09:00:00.000Z","author":{"id":"content/authors/fr/nicolas-roehm-bettcher.mdx","heroSection":{"heroTitle":"Nicolas Roehm","heroSubtitle":"Ingénieur logiciel","heroBadge":"","heroColoredWords":"","heroBreakTitle":"","heroDescription":{"type":"root","children":[{"type":"p","children":[{"type":"text","text":"Fondateur de French Stack, je conçois des solutions informatiques complètes."}]},{"type":"p","children":[{"type":"text","text":"Développeur full-stack, j'interviens principalement sur des projets frontend avec Angular, React ou Vue."}]},{"type":"p","children":[{"type":"text","text":"Passionné de design, voici quelques-unes de mes "},{"type":"a","url":"https://www.artstation.com/nicolas-roehm","title":"ArtStation - Nicolas Roehm","children":[{"type":"text","text":"conceptions graphiques"}]},{"type":"text","text":"."}]},{"type":"mdxJsxFlowElement","name":"socialLinks","children":[{"type":"text","text":""}],"props":{"links":[{"icon":"gitHub","link":"https://github.com/NicolasRoehm"},{"icon":"stackOverflow","link":"https://stackoverflow.com/users/7462178/nicolas-roehm?tab=profile"},{"icon":"linkedIn","link":"https://fr.linkedin.com/in/nicolas-roehm-bettcher"}]}}]},"heroSubtitleIsInline":true,"heroHasBackground":false,"heroImage":"/images/nicolas-roehm-bettcher.png","heroVideoBackground":"","heroStyle":{"heroBg":"linear-gradient(312deg, #0800ff 0%, #4300ff00 70%)","heroMaxWidth":"","heroMs":"25%","heroTitleMb":"0.5rem","heroTitleColor":"","heroContentBg":"","heroContentAlign":"","heroContentBlur":"","heroBlurImage":"","navbarBg":"#fff0","navbarBorderColor":"","navbarLinkActive":"#6785be","navbarLinkHover":"#6785be"},"imageAlt":"nicolas roehm bettcher","imageWidth":0,"imageHeight":0},"seoSection":{"metaTitle":"Nicolas Roehm, Ingénieur logiciel","metaDescription":"Passionné d'informatique, je conçois des sites web dans leur intégralité : design, developpement, référencement, e-reputation, e-mailling, hébergement","metaTags":"Nicolas Roehm, Ingénieur logiciel, web, mobile, site internet","socialImageWidth":0,"socialImageHeight":0},"heroUpdatedAt":"2024-12-09T00:38:50.025Z","localeCode":"fr","slug":"nicolas-roehm-bettcher","url":"/fr/nicolas-roehm-bettcher","ogId":"nicolas-roehm-bettcher-fr","ogImagePath":"/og/nicolas-roehm-bettcher-fr.png","type":"Author","title":"Nicolas Roehm-Bettcher","avatar":"/images/nicolas-roehm-avatar.png","lname":"Roehm","fname":"Nicolas","name":"Nicolas Roehm","translations":[{"localeCode":"en","title":"Nicolas Roehm-Bettcher","slug":"nicolas-roehm-bettcher","url":"/en/nicolas-roehm-bettcher"}]},"translations":[],"tags":[{"id":"content/tags/fr/typescript.mdx","localeCode":"fr","title":"TypeScript","slug":"typescript","url":"/fr/blog/typescript"}]},"page":{"id":"content/subdomains/fr/blog.mdx","heroSection":{"heroTitle":"Actualités digitales","heroSubtitle":"","heroBadge":"","heroColoredWords":"2","heroBreakTitle":"","heroShape":"shiny","heroGradient":"business-gradient","heroDescription":{"type":"root","children":[{"type":"p","children":[{"type":"text","text":"Explorez les dernières avancées en "},{"type":"text","text":"design web","bold":true},{"type":"text","text":", "},{"type":"text","text":"SEO","bold":true},{"type":"text","text":", "},{"type":"text","text":"marketing digital","bold":true},{"type":"text","text":", "},{"type":"text","text":"développement web","bold":true},{"type":"text","text":" et bien plus."}]},{"type":"p","children":[{"type":"text","text":"Nos articles décryptent les "},{"type":"text","text":"technologies innovantes","bold":true},{"type":"text","text":" et les "},{"type":"text","text":"standards du web","bold":true},{"type":"text","text":" qui façonnent l'"},{"type":"text","text":"avenir du numérique","bold":true},{"type":"text","text":"."}]},{"type":"p","children":[{"type":"text","text":"Restez connecté, suivez-nous sur les "},{"type":"text","text":"réseaux sociaux","bold":true},{"type":"text","text":"."}]}]},"heroSubtitleIsInline":false,"heroHasBackground":false,"heroImage":"/images/blog-news-web.jpg","heroVideoBackground":"","heroStyle":{"heroBg":"linear-gradient(353deg, rgba(255,129,0,0.64) 0%, #0018ffe0 120%)","heroMaxWidth":"","heroMs":"","heroTitleMb":"","heroTitleColor":"","heroContentBg":"","heroContentAlign":"","heroContentBlur":"","heroBlurImage":"","navbarBg":"","navbarBorderColor":"","navbarLinkActive":"","navbarLinkHover":""},"imageAlt":"blog news web","imageWidth":0,"imageHeight":0},"seoSection":{"metaTitle":"Actualité numérique","metaDescription":"Magazine en ligne pour apprendre le Web, trouver des ressources, parcourir les tendances et déguster un café chaud","metaTags":"inspiration web, tutoriels développement web, tendances web","socialImageWidth":0,"socialImageHeight":0},"heroUpdatedAt":"2024-12-12T18:23:51.381Z","localeCode":"fr","slug":"blog","url":"/fr/blog","ogId":"blog-fr","ogImagePath":"/og/blog-fr.png","type":"Subdomain","title":"Blog","subdomainKey":"blog","subdomain":"blog","translations":[{"localeCode":"en","title":"Blog","slug":"blog","url":"/en/blog"}],"canShare":true,"canComment":true,"hasAuthor":true,"tagsInPanel":true,"cardContainer":"col-md-6","cardTemplate":"default"},"neighbors":[null,null],"global":{"id":"content/global/fr/settings.json","localeCode":"fr","header":{"nav":[{"href":"index","label":"Accueil"},{"href":"blog","label":"Blog"},{"href":"videos","label":"Vidéos"},{"href":"services","label":"Prestations"},{"href":"references","label":"Références"},{"href":"a-propos","label":"À propos"},{"href":"contact","label":"Contact"}]},"footer":{"social":[{"website":"x","account":"RoehmNicolas"},{"website":"instagram","account":"roehm.nicolas"},{"website":"facebook","account":"thefrenchstack"},{"website":"youtube","account":"@frenchstack"}],"hasSocial":true,"nav":[{"title":"L'agence","links":[{"href":"references","label":"Références"},{"href":"a-propos","label":"À propos"},{"href":"contact","label":"Contact"}]},{"title":"Prestations","links":[{"href":"services/creation-graphique","label":"Graphisme"},{"href":"services/developpement-web-mobile","label":"Développement"},{"href":"services/marketing-web","label":"Marketing"},{"href":"services/formation-informatique","label":"Formation"}]},{"title":"Blog","links":[{"href":"blog/angular","label":"Angular"},{"href":"blog/jquery","label":"jQuery"}]},{"title":"Vidéos","links":[{"href":"videos/marketing-audiovisuel","label":"Marketing audiovisuel"}]}]},"bottom":{"dateCreate":"2015-12-27T05:55:00.000Z","nav":[{"href":"mentions-legales","label":"Mentions légales"},{"href":"politique-de-confidentialite","label":"Politique de confidentialité"}],"hasLinks":true},"contactInfo":{"contactMethods":[{"id":"email","icon":"envelope","value":"frenchstack@gmail.com"},{"id":"phone","icon":"phone","value":"0651570751"}]}}},"__N_SSG":true}