<?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: Utkarsh Bhatnagar</title>
    <description>The latest articles on DEV Community by Utkarsh Bhatnagar (@utkarshbhatnagar).</description>
    <link>https://dev.to/utkarshbhatnagar</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4235400%2F7af0e833-e6a1-4f1f-909b-a8dc314896a1.jpg</url>
      <title>DEV Community: Utkarsh Bhatnagar</title>
      <link>https://dev.to/utkarshbhatnagar</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/utkarshbhatnagar"/>
    <language>en</language>
    <item>
      <title>I built an AI agent skill that clones interactive WebGL sites pixel-for-pixel</title>
      <dc:creator>Utkarsh Bhatnagar</dc:creator>
      <pubDate>Mon, 09 Nov 2026 15:16:19 +0000</pubDate>
      <link>https://dev.to/utkarshbhatnagar/i-built-an-ai-agent-skill-that-clones-interactive-webgl-sites-pixel-for-pixel-24l2</link>
      <guid>https://dev.to/utkarshbhatnagar/i-built-an-ai-agent-skill-that-clones-interactive-webgl-sites-pixel-for-pixel-24l2</guid>
      <description>&lt;p&gt;Over the past week, I set out to clone an Awwwards-level scrollyte&lt;br&gt;
lling site with WebGL2 halftone shaders, 3D curved card runways, and client-side hydration.&lt;/p&gt;

&lt;p&gt;Every automated tool and generic AI prompt failed. Here are the 4 fundamental reasons why modern sites break during replication:&lt;/p&gt;

&lt;p&gt;The Silent WebGL Texture Stall: Modern sites use responsive  tags with .avif, .webp, and -m mobile variants. If even one variant 404s, image loading promises reject, leaving canvases stuck at opacity: 0.&lt;/p&gt;

&lt;p&gt;The Client Hydration Overwrite: Editing SSR HTML is useless on SvelteKit/Next.js sites because compiled client JS chunks (chunks/, nodes/) violently re-render their hardcoded strings upon mounting.&lt;/p&gt;

&lt;p&gt;Runway Collisions: Sticky plates driven by scroll timelines stay pinned and visually collide with downstream content without runtime IntersectionObserver guards.&lt;/p&gt;

&lt;p&gt;Dead 3D Canvases: Reference sites often disable pointer events (pointer-events: none) on 3D scenes to prevent touch hijacking, leaving visitors unable to click portfolio items.&lt;/p&gt;

&lt;p&gt;I solved this by building a mathematical 3D-to-2D perspective raycaster to hit-test cards, synchronizing dual-layer hydration, and automating responsive asset harvesting.&lt;/p&gt;

&lt;p&gt;I packaged everything into an open-source agent skill: GitHub: &lt;a href="https://github.com/utkarshxdev/pixel-perfect-cloner" rel="noopener noreferrer"&gt;https://github.com/utkarshxdev/pixel-perfect-cloner&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Would love feedback from anyone experimenting with agentic coding and browser engineering!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>showdev</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
