<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Jay Rao</title>
    <description>The latest articles on DEV Community by Jay Rao (@jaydrao215).</description>
    <link>https://dev.to/jaydrao215</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3872456%2Fd518e727-04a2-46cd-996a-63d9860a474f.jpg</url>
      <title>DEV Community: Jay Rao</title>
      <link>https://dev.to/jaydrao215</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jaydrao215"/>
    <language>en</language>
    <item>
      <title>I built a design quality gate for AI-generated code — here's why visual regression isn't enough</title>
      <dc:creator>Jay Rao</dc:creator>
      <pubDate>Fri, 10 Apr 2026 21:42:42 +0000</pubDate>
      <link>https://dev.to/jaydrao215/i-built-a-design-quality-gate-for-ai-generated-code-heres-why-visual-regression-isnt-enough-5epf</link>
      <guid>https://dev.to/jaydrao215/i-built-a-design-quality-gate-for-ai-generated-code-heres-why-visual-regression-isnt-enough-5epf</guid>
      <description>&lt;p&gt;AI writes fast. Deslint keeps it clean.&lt;/p&gt;

&lt;h3&gt;
  
  
  The problem nobody's naming
&lt;/h3&gt;

&lt;p&gt;If you've shipped anything with Claude Code, Cursor, v0, Bolt, or Lovable in the last six months, you've seen this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// What the prompt said: "a pricing card that matches our design system"&lt;/span&gt;
&lt;span class="c1"&gt;// What landed in the PR:&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"bg-[#1a1a1a] p-[13px] mt-[19px] z-[9999] text-white"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h3&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"text-[22px] leading-[1.17]"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Pro&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h3&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;img&lt;/span&gt; &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"/check.svg"&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"/pricing"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;click here&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Six bugs in five lines:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;bg-[#1a1a1a]&lt;/code&gt; — arbitrary color, not a token&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;p-[13px]&lt;/code&gt;, &lt;code&gt;mt-[19px]&lt;/code&gt; — off-scale spacing&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;z-[9999]&lt;/code&gt; — arbitrary z-index, not a layer token&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;text-[22px] leading-[1.17]&lt;/code&gt; — arbitrary typography&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt; with no &lt;code&gt;alt&lt;/code&gt; — WCAG 1.1.1 Level A failure&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;"click here"&lt;/code&gt; — WCAG 2.4.4 Link Purpose failure&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Every one of these passes every test your repo runs today: TypeScript check ✓, ESLint ✓ (the standard recommended set), Prettier ✓, unit tests ✓. Your Playwright screenshot diff &lt;strong&gt;looks fine&lt;/strong&gt; because the card renders. Your Lighthouse CI &lt;em&gt;might&lt;/em&gt; catch #5 — but only after merge, only in CI, and only if you remember to wire it up.&lt;/p&gt;

&lt;p&gt;Multiply that by three developers using three different AI tools and by every PR that ships in a week, and your design system drifts by 8% per month. I know this number because I measured it on seven real codebases before writing a single rule.&lt;/p&gt;

&lt;p&gt;Visual regression testing was built for a world where humans wrote the code slowly and the bugs were in the CSS cascade. That world is over. AI writes fast, and the bugs are now in the &lt;em&gt;values&lt;/em&gt;. A diff tool sees the screenshot, not the &lt;code&gt;p-[13px]&lt;/code&gt;. A LLM reviewer can see both, but it's non-deterministic, expensive, and runs in the cloud.&lt;/p&gt;

&lt;p&gt;I wanted a tool that runs in my editor, catches these the moment they land, and tells me exactly which WCAG criterion I just violated. So I built one.&lt;/p&gt;

&lt;h3&gt;
  
  
  Meet Deslint
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/jaydrao215/deslint" rel="noopener noreferrer"&gt;Deslint&lt;/a&gt;&lt;/strong&gt; is an open-source ESLint plugin + CLI + MCP server that catches design-system drift and WCAG accessibility regressions in AI-generated frontend code.&lt;/p&gt;

&lt;p&gt;Three things make it different from everything else in this space:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. It's framework-agnostic from day one.&lt;/strong&gt; The same 20 rules work on React, Vue, Svelte, Angular, and plain HTML via a shared &lt;code&gt;createElementVisitor&lt;/code&gt; abstraction. Not "someday" — today, in v0.2.0, 14 of the 20 rules run on all five frameworks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. It's deterministic.&lt;/strong&gt; No LLM calls. Pure AST analysis. Your code never leaves the machine. That's not a footnote — it's the reason this tool can live in your CI pipeline and your editor without paying per-call costs or leaking your codebase to a cloud service. The architecture &lt;em&gt;is&lt;/em&gt; the privacy policy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. It closes the loop with AI agents via MCP.&lt;/strong&gt; The &lt;code&gt;@deslint/mcp&lt;/code&gt; server exposes &lt;code&gt;analyze_file&lt;/code&gt;, &lt;code&gt;analyze_project&lt;/code&gt;, and &lt;code&gt;analyze_and_fix&lt;/code&gt; as stdio tools. Cursor and Claude Code can call these tools in the same edit loop that wrote the bug, see the violations, and fix them — without a human catching it in review.&lt;/p&gt;

&lt;h3&gt;
  
  
  The 20 rules, grouped
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Design system (8):&lt;/strong&gt; &lt;code&gt;no-arbitrary-colors&lt;/code&gt;, &lt;code&gt;no-arbitrary-spacing&lt;/code&gt;, &lt;code&gt;no-arbitrary-typography&lt;/code&gt;, &lt;code&gt;no-arbitrary-zindex&lt;/code&gt;, &lt;code&gt;no-magic-numbers-layout&lt;/code&gt;, &lt;code&gt;no-inline-styles&lt;/code&gt;, &lt;code&gt;consistent-component-spacing&lt;/code&gt;, &lt;code&gt;consistent-border-radius&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Responsive &amp;amp; dark mode (3):&lt;/strong&gt; &lt;code&gt;responsive-required&lt;/code&gt;, &lt;code&gt;dark-mode-coverage&lt;/code&gt;, &lt;code&gt;missing-states&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Accessibility — WCAG 2.2 / 2.1 AA mapped (8):&lt;/strong&gt; &lt;code&gt;a11y-color-contrast&lt;/code&gt; (1.4.3), &lt;code&gt;image-alt-text&lt;/code&gt; (1.1.1), &lt;code&gt;heading-hierarchy&lt;/code&gt; (1.3.1 + 2.4.6), &lt;code&gt;form-labels&lt;/code&gt; (1.3.1 + 3.3.2), &lt;code&gt;link-text&lt;/code&gt; (2.4.4), &lt;code&gt;lang-attribute&lt;/code&gt; (3.1.1), &lt;code&gt;viewport-meta&lt;/code&gt; (1.4.4), &lt;code&gt;aria-validation&lt;/code&gt; (4.1.2).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quality gate (1):&lt;/strong&gt; &lt;code&gt;max-component-lines&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;13 WCAG Success Criteria evaluated end-to-end, both WCAG 2.2 AA and the 2.1 AA subset that ADA Title II actually cites.&lt;/p&gt;

&lt;h3&gt;
  
  
  What the validation actually looked like
&lt;/h3&gt;

&lt;p&gt;I don't trust rule counts, so I'll give you the honest numbers from the validation cohort:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;4,061 files&lt;/strong&gt; scanned across 7 real open-source projects (Cal.com, Dub.co, Elk, saas-starter, taxonomy, Vintor, and Vintor re-run).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;3,395 true violations&lt;/strong&gt; caught.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;0 false positives.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;0 crashes.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;602 files/sec&lt;/strong&gt; on a 1,838-file Cal.com scan (25× under the 15s/500-file budget).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;14/14 auto-fixers&lt;/strong&gt; verified correct on JSX, zero regressions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;1,145 tests&lt;/strong&gt; in the plugin itself, green on Node 20 + 22.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The 0% FP rate isn't an aspiration — it's a non-negotiable that every rule has to clear before it ships. I deferred five rules I considered for this release (&lt;code&gt;focus-indicators&lt;/code&gt;, &lt;code&gt;keyboard-navigation&lt;/code&gt;, &lt;code&gt;skip-navigation&lt;/code&gt;, &lt;code&gt;touch-target-size&lt;/code&gt;, &lt;code&gt;autocomplete-attribute&lt;/code&gt;) because their static-AST heuristics couldn't hit 0% FP on real code. Better to ship 8 accessibility rules that never lie than 13 that cry wolf.&lt;/p&gt;

&lt;h3&gt;
  
  
  What it catches that other tools miss
&lt;/h3&gt;

&lt;p&gt;Quick honest comparison:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;jsx-a11y&lt;/th&gt;
&lt;th&gt;tailwindcss plugin&lt;/th&gt;
&lt;th&gt;SonarQube&lt;/th&gt;
&lt;th&gt;CodeRabbit&lt;/th&gt;
&lt;th&gt;Deslint&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Design-system drift (colors, spacing, type)&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;partial&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;partial&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WCAG 2.2 / 2.1 mapping with report&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;partial&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Framework-agnostic (React/Vue/Svelte/Angular/HTML)&lt;/td&gt;
&lt;td&gt;JSX only&lt;/td&gt;
&lt;td&gt;JSX + HTML&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;multi&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ESLint v10 flat config&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tailwind v3 + v4 with &lt;code&gt;@theme&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;partial&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Local-first, zero cloud&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deterministic (no LLM calls)&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ADA Title II compliance report&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auto-fix&lt;/td&gt;
&lt;td&gt;some&lt;/td&gt;
&lt;td&gt;some&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;✓ (14/20 rules)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Nobody covers all nine rows. And the tools that use LLMs under the hood are non-deterministic — you can't gate a PR merge on a tool that returns a different answer on a re-run.&lt;/p&gt;

&lt;h3&gt;
  
  
  The MCP self-correction loop
&lt;/h3&gt;

&lt;p&gt;This is the story I'm most excited about. When you install &lt;code&gt;@deslint/mcp&lt;/code&gt; into Cursor or Claude Code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @deslint/mcp &lt;span class="nb"&gt;install &lt;/span&gt;cursor
&lt;span class="c"&gt;# or&lt;/span&gt;
npx @deslint/mcp &lt;span class="nb"&gt;install &lt;/span&gt;claude
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your AI agent gains three new tools over stdio:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;analyze_file&lt;/code&gt; — lint one file, return violations + Design Health Score&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;analyze_project&lt;/code&gt; — scan the whole project, return score + top violations&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;analyze_and_fix&lt;/code&gt; — lint, then apply auto-fixes in a temp scratch directory, return the diff, &lt;em&gt;never touch the workspace file until the diff is approved&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here's what the actual flow looks like against a broken Button component:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;[MCP]  → initialize                              12 ms
[MCP]  ← server: @deslint/mcp 0.2.0
[MCP]  → analyze_file Button.tsx                 89 ms
[MCP]  ← 6 violations: 4 design-system, 2 a11y
&lt;/span&gt;&lt;span class="gp"&gt;       → no-arbitrary-colors       bg-[#&lt;/span&gt;1a1a1a]
&lt;span class="go"&gt;       → no-arbitrary-spacing      p-[13px]
       → no-arbitrary-zindex       z-[9999]
&lt;/span&gt;&lt;span class="gp"&gt;       → image-alt-text            &amp;lt;img&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;missing alt
&lt;span class="go"&gt;       → link-text                 "click here"
       → heading-hierarchy         h1 → h3 skip
[MCP]  → analyze_and_fix Button.tsx              597 ms
&lt;/span&gt;&lt;span class="gp"&gt;[MCP]  ← 4 of 6 fixed (design-system auto-fixed;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;2 a11y need prompts&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Round trip: &lt;strong&gt;701 ms&lt;/strong&gt; for a real 6-violation file. No sleep loops. No cloud calls.&lt;/p&gt;

&lt;h3&gt;
  
  
  What you can do in the next 30 seconds
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-D&lt;/span&gt; @deslint/eslint-plugin
npx deslint init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your &lt;code&gt;eslint.config.js&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;deslint&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@deslint/eslint-plugin&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="nx"&gt;deslint&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;configs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;recommended&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="c1"&gt;// ... your other configs&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx deslint scan         &lt;span class="c"&gt;# 0-100 Design Health Score&lt;/span&gt;
npx deslint fix &lt;span class="nt"&gt;--all&lt;/span&gt;    &lt;span class="c"&gt;# auto-fix everything safely fixable&lt;/span&gt;
npx deslint compliance ./dist  &lt;span class="c"&gt;# WCAG compliance HTML report&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  What's next
&lt;/h3&gt;

&lt;p&gt;v0.3.0 is already queued:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cross-file design graph: &lt;em&gt;"47 Button components across 23 files — here's how they've diverged."&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;CSS scanning (not just class names) — unlocks &lt;code&gt;focus-indicators&lt;/code&gt; and &lt;code&gt;touch-target-size&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Port the last 5 JSX-only rules to full cross-framework parity.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Try it, break it, tell me what's wrong
&lt;/h3&gt;

&lt;p&gt;Deslint is MIT-licensed. Repo: &lt;strong&gt;&lt;a href="https://github.com/jaydrao215/deslint" rel="noopener noreferrer"&gt;github.com/jaydrao215/deslint&lt;/a&gt;&lt;/strong&gt;. Interactive demo + docs: &lt;strong&gt;&lt;a href="https://deslint.com" rel="noopener noreferrer"&gt;deslint.com&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If you run it against your codebase and it throws a false positive, open an issue with the file. If it catches a real bug, I'd love to hear which one.&lt;/p&gt;

</description>
      <category>eslint</category>
      <category>a11y</category>
      <category>ai</category>
      <category>tailwindcss</category>
    </item>
  </channel>
</rss>
