Le problème : l'IA code à l'aveugle
Vous demandez à l'IA d'aligner trois cartes côte à côte. Elle écrit du CSS impeccable sur le papier : display:flex, gap:16px, tout est là. Vous rechargez la page... et la troisième carte déborde sur la droite, le texte chevauche l'image, et sur mobile tout est empilé n'importe comment.
Le problème n'est pas que l'IA est mauvaise en CSS. Le problème est qu'elle ne voit rien. Elle écrit du code d'interface comme un peintre les yeux bandés : elle connaît la théorie des couleurs, mais elle ne voit jamais la toile. Alors elle devine.
Un développeur humain, lui, regarde le résultat dans le navigateur. Il voit le débordement, il voit le désalignement, il corrige. C'est cette boucle de feedback visuel qui manque à l'IA par défaut. Et c'est exactement ce qu'on va lui rendre.
Le piège du « ça a l'air bon » : l'IA affirme avec aplomb que son interface est « parfaitement alignée et responsive ». Elle n'en sait rien : elle n'a jamais vu le rendu. Sans yeux, sa confiance n'a aucune valeur.
Fermer la boucle de feedback visuel
La solution tient en une idée simple : donner une capture d'écran à l'IA. Les modèles modernes sont multimodaux : ils lisent les images aussi bien que le texte. Dès qu'ils voient le rendu réel, ils repèrent ce qui cloche.
Le workflow gagnant boucle sur lui-même :
- Code : l'IA écrit le HTML/CSS de votre composant
- Capture : on prend une capture d'écran de la page rendue
- Montrer : on colle l'image dans la conversation
- Diagnostic : l'IA voit le débordement, le désalignement, la couleur ratée
- Correction : elle corrige le code en sachant ce qui n'allait pas
- Re-capture : on reboucle jusqu'à ce que le rendu soit propre
C'est la même boucle que pour un humain, sauf qu'on la rend explicite. L'IA passe de « j'écris du code et j'espère » à « je vois mon résultat et je le corrige ».
Automatiser les captures avec Playwright
Coller des captures à la main devient vite pénible. L'astuce des agents de code modernes : leur donner un outil pour prendre les captures eux-mêmes. Playwright pilote un vrai navigateur et capture une page en quelques lignes : y compris à plusieurs largeurs d'écran.
Capturer aux trois points de rupture classiques (mobile, tablette, desktop) révèle d'un coup tous les problèmes responsive :
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch();
const page = await browser.newPage();
// Les trois points de rupture à vérifier
const viewports = [
{ name: 'mobile', width: 375, height: 812 },
{ name: 'tablette', width: 768, height: 1024 },
{ name: 'desktop', width: 1440, height: 900 },
];
for (const vp of viewports) {
await page.setViewportSize({ width: vp.width, height: vp.height });
await page.goto('http://localhost:8000');
await page.screenshot({
path: `capture-${vp.name}.png`,
fullPage: true,
});
console.log(`Capture ${vp.name} (${vp.width}px) enregistrée`);
}
await browser.close();
})();
L'agent lance ce script, récupère les trois images, et les regarde. Si la grille casse à 768px, il le voit. Si un bouton déborde sur mobile, il le voit. Il corrige, relance le script, revérifie : sans intervention de votre part.
Playwright n'est qu'un exemple. Puppeteer, ou même une simple commande de capture du système, font le même travail : produire une image que l'IA peut lire.
Coller un bug visuel à l'IA
La technique marche aussi à l'envers. Vous tombez sur un affichage cassé que vous n'arrivez pas à décrire avec des mots ? Prenez une capture et collez-la directement dans une IA multimodale avec la question : « Qu'est-ce qui ne va pas dans ce rendu ? »
L'IA voit que le menu déborde, que deux blocs se chevauchent, qu'un contraste est illisible. Elle pointe le coupable probable dans le CSS bien plus vite que vous ne l'auriez décrit. Une image vaut mille tickets de bug.
Conseil : donner des yeux à l'IA réduit drastiquement les allers-retours du type « c'est cassé » / « non c'est bon » / « non toujours cassé ». Une IA qui voit son rendu corrige en une passe des bugs d'interface qu'elle ne détecterait jamais à l'aveugle.
The problem: AI codes blind
You ask the AI to align three cards side by side. It writes flawless CSS on paper: display:flex, gap:16px, it is all there. You reload the page... and the third card overflows to the right, text overlaps the image, and on mobile everything is stacked randomly.
The problem is not that the AI is bad at CSS. The problem is that it cannot see anything. It writes UI code like a blindfolded painter: it knows color theory, but it never sees the canvas. So it guesses.
A human developer looks at the result in the browser. They see the overflow, they see the misalignment, they fix it. This visual feedback loop is what the AI lacks by default. And it is exactly what we will give it back.
The "looks good" trap: the AI confidently claims its interface is "perfectly aligned and responsive". It has no idea — it never saw the render. Without eyes, its confidence is worthless.
Closing the visual feedback loop
The solution is one simple idea: give the AI a screenshot. Modern models are multimodal — they read images as well as text. As soon as they see the real render, they spot what is wrong.
The winning workflow loops on itself:
- Code — the AI writes the HTML/CSS of your component
- Screenshot — you take a screenshot of the rendered page
- Show — you paste the image into the conversation
- Diagnose — the AI sees the overflow, the misalignment, the wrong color
- Fix — it fixes the code knowing what was wrong
- Re-screenshot — you loop until the render is clean
It is the same loop a human uses, except we make it explicit. The AI moves from "I write code and hope" to "I see my result and fix it".
Automating screenshots with Playwright
Pasting screenshots by hand quickly gets tedious. The trick used by modern coding agents: give them a tool to take screenshots themselves. Playwright drives a real browser and captures a page in a few lines — including at multiple widths.
Capturing at the three classic breakpoints (mobile, tablet, desktop) reveals all responsive issues at once:
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch();
const page = await browser.newPage();
// The three breakpoints to check
const viewports = [
{ name: 'mobile', width: 375, height: 812 },
{ name: 'tablet', width: 768, height: 1024 },
{ name: 'desktop', width: 1440, height: 900 },
];
for (const vp of viewports) {
await page.setViewportSize({ width: vp.width, height: vp.height });
await page.goto('http://localhost:8000');
await page.screenshot({
path: `shot-${vp.name}.png`,
fullPage: true,
});
console.log(`Screenshot ${vp.name} (${vp.width}px) saved`);
}
await browser.close();
})();
The agent runs this script, grabs the three images, and looks at them. If the grid breaks at 768px, it sees it. If a button overflows on mobile, it sees it. It fixes, re-runs the script, re-checks — with no input from you.
Playwright is just one example. Puppeteer, or even a simple system screenshot command, do the same job: produce an image the AI can read.
Pasting a visual bug to the AI
The technique also works in reverse. You hit a broken layout you cannot describe in words? Take a screenshot and paste it straight into a multimodal AI with the question: "What is wrong with this render?"
The AI sees the menu overflowing, two blocks overlapping, an unreadable contrast. It points at the likely culprit in the CSS far faster than you could have described it. A picture is worth a thousand bug tickets.
Tip: giving the AI eyes drastically cuts the "it is broken" / "no it is fine" / "no still broken" round-trips. An AI that sees its render fixes UI bugs in one pass that it would never catch blind.
Mettez en place la boucle de feedback visuel avec ce prompt :
Tu viens de coder cette section. Écris un petit script Playwright qui capture la page http://localhost:8000 à trois largeurs : 375px (mobile), 768px (tablette) et 1440px (desktop), en fullPage. Lance-le, regarde les trois captures, et dis-moi pour chaque largeur ce qui est désaligné, déborde ou casse. Corrige ensuite le CSS, relance le script et reboucle jusqu'à ce que le rendu soit propre aux trois largeurs.
Sans relire la leçon : explique avec tes mots pourquoi donner une capture d'écran à l'IA change tout, et ce que le script page.screenshot() apporte à la boucle.
page.screenshot() automatise l'étape « voir » à plusieurs largeurs, ce qui ferme la boucle code → capture → diagnostic → correction → re-capture sans intervention humaine.Tu as demandé un script qui capture la page pour vérifier le responsive. L'IA propose ceci. Tu le relis avant de le lancer : accepter ou rejeter, et pourquoi ?
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch();
const page = await browser.newPage();
await page.setViewportSize({ width: 1440, height: 900 });
await page.goto('http://localhost:8000');
await page.screenshot({ path: 'capture.png' });
await browser.close();
})();
fullPage: true : sans lui, seule la zone visible est capturée et l'IA ne voit pas le bas de page. Le réflexe : boucler sur les trois points de rupture en fullPage, sinon tu donnes à l'IA un seul œil sur trois.Écrivez un prompt qui demande à l'IA de fermer la boucle de feedback visuel. Il doit mentionner : une capture d'écran (screenshot), la vérification responsive à plusieurs largeurs (mobile/desktop), et le fait de reboucler/corriger après avoir vu le rendu.
Sans remonter dans la leçon : pourquoi l'IA produit-elle des interfaces cassées par défaut, et quelle est la seule chose à lui fournir pour fermer la boucle ?
L'IA voit, vérifie, corrige, et en profite souvent pour ajouter de la complexité inutile. La dernière leçon, garder le code simple, vous donne les réflexes pour résister à la surenchère et exiger la solution la plus claire, pas la plus impressionnante.
Leçon 17 : Garder le code simple →