<?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: Shreyash Chaurasia</title>
    <description>The latest articles on DEV Community by Shreyash Chaurasia (@shreyashchaurasia).</description>
    <link>https://dev.to/shreyashchaurasia</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%2F3980907%2F1f4f6297-e2e8-40e3-b767-f5f9b236ba2a.jpeg</url>
      <title>DEV Community: Shreyash Chaurasia</title>
      <link>https://dev.to/shreyashchaurasia</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shreyashchaurasia"/>
    <language>en</language>
    <item>
      <title>Building AetherDraw: An Agent-Native Infinite Whiteboard with WebMCP</title>
      <dc:creator>Shreyash Chaurasia</dc:creator>
      <pubDate>Fri, 04 Sep 2026 16:21:50 +0000</pubDate>
      <link>https://dev.to/shreyashchaurasia/building-aetherdraw-an-agent-native-infinite-whiteboard-with-webmcp-330b</link>
      <guid>https://dev.to/shreyashchaurasia/building-aetherdraw-an-agent-native-infinite-whiteboard-with-webmcp-330b</guid>
      <description>&lt;h1&gt;
  
  
  Building AetherDraw: An Agent-Native Infinite Whiteboard with WebMCP
&lt;/h1&gt;

&lt;p&gt;Visual whiteboards like Excalidraw, Miro, and FigJam are the ultimate playground for human thinking. Whenever I need to design a system architecture, trace a data pipeline, or organize a brainstorm, I immediately open a canvas. Spatial layout feels natural to humans because our brains process relationships and hierarchies through physical arrangement.&lt;/p&gt;

&lt;p&gt;However, for AI agents, visual whiteboards have always been a complete black box.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Canvas Dilemma for AI Agents
&lt;/h2&gt;

&lt;p&gt;Today, if you want an AI model to interact with a spatial canvas, you are usually stuck with two poor options:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The Vision Approach:&lt;/strong&gt; Taking screenshots, feeding them into a multimodal LLM, and hoping the model can approximate pixel coordinates. This takes several seconds per step, burns tokens, and is prone to spatial hallucinations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Brittle Automation Approach:&lt;/strong&gt; Simulating fragile mouse drag-and-drop events on raw HTML5 canvas elements. A slight change in viewport pan, zoom, or browser window size breaks the entire interaction.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When the W3C Web Model Context Protocol (WebMCP) specification was published, the solution became obvious. Instead of forcing AI agents to squint at canvas pixels from the outside, the web application can expose its internal scene AST, geometric bounds, and layout algorithms directly to the browser runtime via &lt;code&gt;document.modelContext&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;That is why I built AetherDraw for the DevPost WebMCP Challenge 2026.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is AetherDraw?
&lt;/h2&gt;

&lt;p&gt;AetherDraw is an open-source, agent-native infinite whiteboard. It takes the battle-tested Excalidraw canvas engine and extends it with a suite of 11 schema-typed tools organized into four functional layers:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Spatial Inspection:&lt;/strong&gt; &lt;code&gt;get_canvas_state&lt;/code&gt;, &lt;code&gt;get_selected_elements&lt;/code&gt;, &lt;code&gt;find_elements&lt;/code&gt;&lt;br&gt;
Serializes the visual scene into a structured AST. The agent receives element bounds, labels, and connection maps in single-digit milliseconds.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Algorithmic Synthesis:&lt;/strong&gt; &lt;code&gt;create_diagram&lt;/code&gt;&lt;br&gt;
Accepts high-level node and edge definitions, computes non-overlapping layout coordinates via Dagre (Sugiyama DAG), centers the title, and auto-frames the camera to fit the screen.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Fine-Grained Mutation:&lt;/strong&gt; &lt;code&gt;add_elements&lt;/code&gt;, &lt;code&gt;update_elements&lt;/code&gt;, &lt;code&gt;delete_elements&lt;/code&gt;, &lt;code&gt;connect_elements&lt;/code&gt;&lt;br&gt;
Performs atomic edits, property changes, and smart cubic Bezier arrow routing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Layout &amp;amp; Theming:&lt;/strong&gt; &lt;code&gt;apply_auto_layout&lt;/code&gt;, &lt;code&gt;apply_theme&lt;/code&gt;, &lt;code&gt;export_canvas&lt;/code&gt;&lt;br&gt;
Reorganizes messy clusters and switches color palettes across 7 curated themes (Classic, Nordic Frost, Cyberpunk Neon, Pastel Dream, Blueprint, Minimal Dark, Solarized).&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  True Bi-Directional Co-Creation
&lt;/h2&gt;

&lt;p&gt;What makes this exciting is true human-agent collaboration:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You sketch a box with the pen tool and write "Auth Service".&lt;/li&gt;
&lt;li&gt;The agent calls &lt;code&gt;get_canvas_state&lt;/code&gt;, detects your hand-drawn box, understands its coordinates, and uses &lt;code&gt;connect_elements&lt;/code&gt; to wire it to the rest of the backend architecture.&lt;/li&gt;
&lt;li&gt;A smooth Bezier arrow connects the shapes in 1ms without cutting through the box or disturbing your text.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How the Layout and Routing Engine Works
&lt;/h2&gt;

&lt;p&gt;Rather than having the AI model guess (x, y) coordinates, AetherDraw offloads spatial layout to deterministic graph algorithms:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hierarchical DAGs:&lt;/strong&gt; Integrated Dagre computes vertex ranks and minimizes edge crossings in O(|V| + |E|) time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smooth Bezier Routing:&lt;/strong&gt; A custom routing engine calculates smooth cubic Bezier curves between shapes:
&lt;code&gt;B(t) = (1-t)^3 P0 + 3(1-t)^2 t P1 + 3(1-t) t^2 P2 + t^3 P3,  t in [0, 1]&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Obstacle Avoidance:&lt;/strong&gt; If intermediate shapes sit between source and target, the route diverts into outer gutter corridors to avoid line crossings.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Viewport Auto-Framing:&lt;/strong&gt; Mathematical camera fitting calculates diagram bounding boxes and applies a clamped zoom factor so the diagram fills the screen cleanly.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Live Telemetry &amp;amp; Developer Inspector
&lt;/h2&gt;

&lt;p&gt;To make WebMCP observable, AetherDraw includes a slide-out Developer Inspector that lists all registered tool schemas, streams live execution events, and displays execution duration timers down to the millisecond.&lt;/p&gt;

&lt;h2&gt;
  
  
  Links and Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live Application:&lt;/strong&gt; &lt;a href="https://aetherdraw.onrender.com" rel="noopener noreferrer"&gt;https://aetherdraw.onrender.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DevPost Project Page:&lt;/strong&gt; &lt;a href="https://devpost.com/software/aetherdraw" rel="noopener noreferrer"&gt;https://devpost.com/software/aetherdraw&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Video Demonstration:&lt;/strong&gt; &lt;a href="https://youtu.be/Eb6vBb6xG7I" rel="noopener noreferrer"&gt;https://youtu.be/Eb6vBb6xG7I&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/ShreyashChaurasia/AetherDraw" rel="noopener noreferrer"&gt;https://github.com/ShreyashChaurasia/AetherDraw&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WebMCP Manifest:&lt;/strong&gt; &lt;a href="https://aetherdraw.onrender.com/webmcp.json" rel="noopener noreferrer"&gt;https://aetherdraw.onrender.com/webmcp.json&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are interested in WebMCP or agentic web interfaces, feel free to check out the repo and try it out!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>javascript</category>
      <category>opensource</category>
      <category>webmcp</category>
    </item>
  </channel>
</rss>
