<?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: romantsisyk</title>
    <description>The latest articles on DEV Community by romantsisyk (@romantsisyk).</description>
    <link>https://dev.to/romantsisyk</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%2F4070290%2Fe23ad162-cd2f-4be7-a741-fcc6ed8b6698.jpg</url>
      <title>DEV Community: romantsisyk</title>
      <link>https://dev.to/romantsisyk</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/romantsisyk"/>
    <language>en</language>
    <item>
      <title>Structured Context vs Pixel Context: What Coding Agents Actually Need</title>
      <dc:creator>romantsisyk</dc:creator>
      <pubDate>Sun, 09 Aug 2026 23:00:43 +0000</pubDate>
      <link>https://dev.to/romantsisyk/structured-context-vs-pixel-context-what-coding-agents-actually-need-4fl8</link>
      <guid>https://dev.to/romantsisyk/structured-context-vs-pixel-context-what-coding-agents-actually-need-4fl8</guid>
      <description>&lt;p&gt;Context is becoming the bottleneck in AI-assisted development. Not model capability — models are improving fast enough that they're regularly not the constraint. What limits the quality of AI-generated code is the quality of context those models receive.&lt;/p&gt;

&lt;p&gt;For Figma-to-code workflows, context comes in two fundamentally different forms: &lt;strong&gt;pixel context&lt;/strong&gt; (screenshots, rendered images) and &lt;strong&gt;structured context&lt;/strong&gt; (typed IR, tokens, semantic relationships). These aren't just different formats for the same information. They're different categories of input, with different properties, different loss characteristics, and different ceilings on what an agent can produce from them.&lt;/p&gt;

&lt;p&gt;The industry is still largely using pixel context. That's a mistake. &lt;a href="https://figmascope.dev" rel="noopener noreferrer"&gt;figmascope&lt;/a&gt; exports structured context — the right input from the start. Here's how the two categories compare, and why the difference determines whether your generated code composes, diffs, and survives contact with a real design system.&lt;/p&gt;

&lt;h2&gt;
  
  
  What pixel context is
&lt;/h2&gt;

&lt;p&gt;Pixel context is any rasterized representation of a design: a screenshot exported from Figma, a PNG from "Export frame", a render from a design tool. It's what you get when you press Cmd+Shift+4 over your Figma canvas.&lt;/p&gt;

&lt;p&gt;Vision-capable LLMs process pixel context impressively well. They recognize UI patterns, identify layout regions, infer component types from visual appearance, and generate plausible code from images alone. If you've used Claude or GPT-4V for screenshot-to-code, you've seen this. The outputs look right more often than you'd expect.&lt;/p&gt;

&lt;p&gt;But "looks right" and "is right" are not the same thing — and the gap between them is where design system compliance, token fidelity, component identity, and reproducibility all live.&lt;/p&gt;

&lt;h2&gt;
  
  
  What structured context is
&lt;/h2&gt;

&lt;p&gt;Structured context is a typed, machine-readable representation that preserves the semantics of the design: what each element &lt;em&gt;is&lt;/em&gt;, not just what it &lt;em&gt;looks like&lt;/em&gt;. It includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Typed nodes:&lt;/strong&gt; every element has a kind (&lt;code&gt;FRAME&lt;/code&gt;, &lt;code&gt;TEXT&lt;/code&gt;, &lt;code&gt;INSTANCE&lt;/code&gt;, &lt;code&gt;VECTOR&lt;/code&gt;) that carries semantic meaning about its role in the layout&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Named values:&lt;/strong&gt; colors are token references, not hex strings; spacings are token keys, not pixel values&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spatial relationships:&lt;/strong&gt; layout direction, gap, padding, alignment — preserved as properties, not inferred from position&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Identity links:&lt;/strong&gt; component instances carry their source component ID; strings carry cross-reference keys&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hierarchy:&lt;/strong&gt; the full node tree, with parent-child relationships intact&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A structured IR is the design tree made explicit: each node has &lt;code&gt;kind&lt;/code&gt;, &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;absoluteBoundingBox&lt;/code&gt;, &lt;code&gt;children&lt;/code&gt;, fills resolved to token references where available, auto-layout properties if applicable, and &lt;code&gt;componentId&lt;/code&gt; on instances.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Pixel context tells an agent what a design looks like. Structured context tells it what a design means. A coding agent needs meaning to write code, not appearance. Appearance is what visual tests are for.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What gets lost in the pixel-to-structured direction
&lt;/h2&gt;

&lt;p&gt;The core failure mode of pixel context is irreversible information loss. When Figma renders a frame to PNG, it discards exactly the information that matters most for code generation:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The layer tree collapses.&lt;/strong&gt; There is no longer a "group of three items with 8px gaps." There is a region of pixels that suggests a group. The agent has to reconstruct the tree structure from visual evidence, and reconstruction is approximate. It will be wrong some percentage of the time — and that percentage grows as designs get more complex.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Token bindings disappear.&lt;/strong&gt; The orange background that maps to &lt;code&gt;color/action/primary&lt;/code&gt; becomes &lt;code&gt;#FF6B00&lt;/code&gt;. The agent generates a hardcoded hex. If your color ever changes, or you support dark mode, or you need to audit token usage, that hardcoded value is a liability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Component identity is gone.&lt;/strong&gt; Four instances of the same card component are four similar-looking rectangles. The agent may generate one reusable component or four similar-but-not-identical blocks, depending on how much structural similarity it infers. You want predictable output; you get probabilistic output.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Layout intent is ambiguous.&lt;/strong&gt; Is this a flex row or a grid? Is the spacing between items a gap, a margin, or padding on each item? The pixels don't say. The agent picks — and the picks differ between runs.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Figma → React pipeline, with and without structure
&lt;/h2&gt;

&lt;p&gt;Consider the path from Figma to production React.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;With pixel context:&lt;/strong&gt; Export PNG. Paste into Claude. Get JSX. Review JSX for correctness. Notice hardcoded values. Notice wrong component structure. Prompt for corrections. Iterate. Eventually get something plausible. Hand-edit to match the design system. Ship. Next screen: repeat from scratch because the previous run's outputs don't compose.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;With structured context:&lt;/strong&gt; Export a bundle (one click, runs in browser). Pass CONTEXT.md + screen IR to Claude with a system prompt specifying framework and design system conventions. Get JSX that uses your token names, your component names, and correct layout structure. Review for correctness. Ship. Next screen: same bundle, same agent, composable outputs because the inputs are consistent.&lt;/p&gt;

&lt;p&gt;The work savings are real but secondary. The primary gain is composability. Structured context enables outputs that compose across screens and agents. Pixel context doesn't — each screen's output is an island generated from a fresh inference pass.&lt;/p&gt;

&lt;h2&gt;
  
  
  Structure means: typed
&lt;/h2&gt;

&lt;p&gt;Every node in the IR has a &lt;code&gt;kind&lt;/code&gt;. This matters immediately. A &lt;code&gt;TEXT&lt;/code&gt; node generates a text element. A &lt;code&gt;FRAME&lt;/code&gt; with auto-layout generates a container. An &lt;code&gt;INSTANCE&lt;/code&gt; of &lt;code&gt;Button/Primary/Large&lt;/code&gt; generates a button component call with the right props. A &lt;code&gt;VECTOR&lt;/code&gt; generates an icon reference.&lt;/p&gt;

&lt;p&gt;The agent doesn't guess. It maps kinds to code primitives — rules specified in CONTEXT.md for the target framework: "For INSTANCE nodes, use the component name to determine the React component. For FRAME with layoutMode HORIZONTAL, use a flex row. For TEXT with style typography/heading.lg, use the Heading component." These are compiler-style rules, not inference tasks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Structure means: spatial
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;absoluteBoundingBox&lt;/code&gt; on each node gives position and size in the Figma coordinate space. Combined with auto-layout properties — &lt;code&gt;layoutMode&lt;/code&gt;, &lt;code&gt;itemSpacing&lt;/code&gt;, &lt;code&gt;paddingLeft/Right/Top/Bottom&lt;/code&gt;, alignment — the agent has everything it needs to generate correct layout code without pixel-counting.&lt;/p&gt;

&lt;p&gt;The bounding boxes also let the agent verify its own output: if a generated component has different dimensions than the IR specified, something went wrong. That's a testable property of structured context with no equivalent in pixel context.&lt;/p&gt;

&lt;h2&gt;
  
  
  Structure means: identity-aware
&lt;/h2&gt;

&lt;p&gt;When four nodes in the IR share a &lt;code&gt;componentId&lt;/code&gt;, the agent knows they're instances of the same component. It generates the component definition once, derives props from the variants, and renders four calls. This is the correct output — and it's not achievable from pixel context without significant prompt engineering that essentially asks the agent to re-derive structure the design file already had.&lt;/p&gt;

&lt;p&gt;String cross-references work the same way. When multiple text nodes reference &lt;code&gt;stringRef.key: "action.continue"&lt;/code&gt;, the agent knows to use a single i18n lookup, not three hardcoded strings. The identity information is in the IR; the agent just reads it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Structure means: version-controllable
&lt;/h2&gt;

&lt;p&gt;Plain JSON files diff cleanly. A changed padding value shows up as a one-line change in the per-screen IR. A renamed token shows up as a find-replace diff across the tokens file. A new component instance shows up as an added object in the children array.&lt;/p&gt;

&lt;p&gt;This is design version history that's actually useful for engineers. Not "the design was updated on Tuesday" but "here are the three properties that changed between the v2 and v3 exports of this screen." You can put that in your PR description, run automated checks on it, and audit whether the code change matches the design change.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where this leads: design context infrastructure
&lt;/h2&gt;

&lt;p&gt;The tooling category forming here isn't "Figma export, but better." It's a new layer in the stack: &lt;strong&gt;design context infrastructure&lt;/strong&gt;. Its job is to transform design source (Figma files, component libraries, token systems) into structured, agent-readable, version-controlled artifacts that feed the code generation layer.&lt;/p&gt;

&lt;p&gt;This layer sits between the design tool and the coding agent, with responsibilities neither side currently owns: snapshot management, semantic extraction, token resolution, component inventory, cross-screen string indexing, bundle versioning. Treating it as infrastructure means it's automated, versioned, CI-runnable, defined-format, and inspectable — the same way a build system is infrastructure for code: not the code, not the binary, but the reliable, reproducible pipeline that converts one to the other.&lt;/p&gt;

&lt;h2&gt;
  
  
  Honest: pixels still matter
&lt;/h2&gt;

&lt;p&gt;Structured context bundles include 2x PNGs of every exported screen. Not because the PNG drives code generation, but because visual confirmation matters. An agent should be able to cross-reference its generated output against the PNG. A developer should be able to look at the screen without opening Figma. The PNG is a sanity check, not a specification.&lt;/p&gt;

&lt;p&gt;That distinction — pixels for confirmation, structure for specification — is the right mental model. You don't eliminate pixel context; you demote it to its correct role. It's the QA artifact, not the build input.&lt;/p&gt;

&lt;p&gt;The same way you wouldn't give a compiler a screenshot of your source code: you give it the source, and you use screenshots for documentation. The design file is the source. The bundle is the compilation artifact. The PNG is the documentation image.&lt;/p&gt;

&lt;h2&gt;
  
  
  One design, multiple targets
&lt;/h2&gt;

&lt;p&gt;Structured context enables a workflow pixel context can't: one design, multiple targets. The same IR can feed a React/Tailwind generator, a Jetpack Compose generator, and a SwiftUI generator. The underlying design is the same; the target-specific context (framework primitives, naming conventions, layout APIs) lives in CONTEXT.md, which is generated per-target.&lt;/p&gt;

&lt;p&gt;This is multi-target codegen that actually scales. You export one bundle from the design, run three agents with three different CONTEXT.md files, and get three implementations that are structurally equivalent — because they were generated from the same IR, not from three separate inference passes over three screenshots.&lt;/p&gt;

&lt;p&gt;The bottleneck for this workflow isn't model capability. It's context quality. Structured context is what makes it possible.&lt;/p&gt;

&lt;p&gt;Export your structured context bundle from the &lt;a href="https://figmascope.dev" rel="noopener noreferrer"&gt;figmascope app&lt;/a&gt;, then use it with &lt;a href="https://figmascope.dev/blog/cursor-figma-workflow" rel="noopener noreferrer"&gt;Cursor&lt;/a&gt;, &lt;a href="https://figmascope.dev/blog/claude-code-figma-workflow" rel="noopener noreferrer"&gt;Claude Code&lt;/a&gt;, or &lt;a href="https://figmascope.dev/blog/aider-figma-workflow" rel="noopener noreferrer"&gt;Aider&lt;/a&gt; for multi-target, composable UI generation.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>design</category>
      <category>figma</category>
    </item>
    <item>
      <title>Why Pasting Figma Screenshots into Claude Fails (And What to Use Instead)</title>
      <dc:creator>romantsisyk</dc:creator>
      <pubDate>Sun, 09 Aug 2026 22:27:56 +0000</pubDate>
      <link>https://dev.to/romantsisyk/why-pasting-figma-screenshots-into-claude-fails-and-what-to-use-instead-46d0</link>
      <guid>https://dev.to/romantsisyk/why-pasting-figma-screenshots-into-claude-fails-and-what-to-use-instead-46d0</guid>
      <description>&lt;p&gt;Here's the workflow that's become default in every design-to-code team right now: export a frame from Figma, paste the PNG into Claude or Cursor, type "build this", and iterate on the hallucinated output. It works just well enough to feel productive. It doesn't work well enough to ship from.&lt;/p&gt;

&lt;p&gt;This isn't a model capability problem. It's an input problem. A screenshot is the worst possible representation of a Figma design for an LLM to reason about — and yet it's almost universally what teams reach for first. The structured alternative is what &lt;a href="https://figmascope.dev" rel="noopener noreferrer"&gt;figmascope&lt;/a&gt; exports: a context bundle of typed IR, design tokens, component inventory, and UI strings that the agent can read instead of guess. Let's walk through everything a screenshot silently destroys.&lt;/p&gt;

&lt;h2&gt;
  
  
  The hierarchy is gone
&lt;/h2&gt;

&lt;p&gt;A Figma file is a tree. Frames contain auto-layout groups, which contain component instances, which contain text and fill layers. That tree encodes the layout intent: this row is a flex container, this card is a padded box, these three items are siblings with 16px gaps between them.&lt;/p&gt;

&lt;p&gt;A screenshot flattens that tree to a grid of pixels. The LLM sees shapes and colors. It does not see the layout structure — it infers it. And inference is lossy in both directions: the model may reconstruct structure that looks right visually but is wrong semantically (a fixed-width div instead of a flex child, absolute positioning instead of auto-layout), or it may see structural ambiguity and pick one arbitrarily.&lt;/p&gt;

&lt;p&gt;You can't tell from a PNG whether a horizontal row of items is implemented with &lt;code&gt;display: flex&lt;/code&gt;, CSS Grid, a custom HStack, or three absolutely-positioned divs. They're visually identical. The LLM picks one. The pick changes between runs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Semantics don't survive rasterization
&lt;/h2&gt;

&lt;p&gt;The LLM can see that a rectangle with rounded corners contains some text and an icon. What it can't see:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is this a &lt;code&gt;Button&lt;/code&gt; component or a custom card?&lt;/li&gt;
&lt;li&gt;If it's a button, what variant is it — primary, secondary, ghost?&lt;/li&gt;
&lt;li&gt;Is the icon decorative or meaningful?&lt;/li&gt;
&lt;li&gt;Does this element have interactive states in the design system, or is it one-off?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Semantics in Figma live in the layer tree: component names, variant properties, node kinds. A &lt;code&gt;Button/Primary/Large&lt;/code&gt; component is explicitly typed. In a screenshot, it's a rounded rectangle with a shadow and a label. The model guesses "this is probably a button" correctly most of the time — and then guesses "this is probably the primary variant" based on color, which may or may not match your design system's actual naming.&lt;/p&gt;

&lt;p&gt;Small mismatches compound. A ghost button rendered as an outlined button. A tooltip rendered as a modal trigger. A disabled state rendered as active. Each of these is one screenshot-inference step away from the source of truth.&lt;/p&gt;

&lt;h2&gt;
  
  
  Spacing systems don't resolve to numbers
&lt;/h2&gt;

&lt;p&gt;Look at a screenshot of a card with padding. What's the padding? You can't tell without measuring pixels, knowing the canvas scale, knowing the export resolution, and doing the math. The LLM does the math badly — it estimates, it rounds, and it has no way to know if your spacing system uses an 8px base grid or a 4px one or something custom.&lt;/p&gt;

&lt;p&gt;So it guesses. It generates &lt;code&gt;padding: 12px&lt;/code&gt; when the design says 16. It generates &lt;code&gt;gap: 8px&lt;/code&gt; when the design says 12. These numbers look plausible in isolation but they're wrong — and if your design system uses spacing tokens like &lt;code&gt;spacing.md&lt;/code&gt; or &lt;code&gt;Spacing/400&lt;/code&gt;, the LLM doesn't know about them at all. It hardcodes literals that will drift from your system the moment anything changes.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The LLM isn't hallucinating. It's doing exactly what you'd do with only a screenshot: guessing. You're just surprised when the guesses are wrong because you could see the right answer in the Figma file all along.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Token relationships vanish
&lt;/h2&gt;

&lt;p&gt;Your designer set that background to &lt;code&gt;#7F5CFE&lt;/code&gt;. In Figma, that hex is bound to a variable: &lt;code&gt;color/brand/primary&lt;/code&gt;. That binding is meaningful — it means the color participates in theming, it means dark mode swaps it, it means if the brand color changes you update one variable and every instance updates.&lt;/p&gt;

&lt;p&gt;In the screenshot: it's purple. The LLM generates &lt;code&gt;background-color: #7F5CFE&lt;/code&gt;. The token relationship is gone. Your codebase now has a hardcoded hex that will never track with your design system. Multiply this by every component on the screen.&lt;/p&gt;

&lt;p&gt;The same applies to typography scales, border radii, and shadow definitions. Every value in a well-maintained Figma file is potentially a named token. Every value in a screenshot is just a number.&lt;/p&gt;

&lt;h2&gt;
  
  
  Component reuse is invisible
&lt;/h2&gt;

&lt;p&gt;A well-composed screen reuses components. The four product cards are four instances of the same &lt;code&gt;ProductCard&lt;/code&gt; component. The avatar in the nav and the avatar in the comment thread are both instances of &lt;code&gt;Avatar/Medium&lt;/code&gt;. This matters for code: you want one React component, not four hand-rolled variations that will diverge.&lt;/p&gt;

&lt;p&gt;From a screenshot, the LLM sees four visually similar rectangles. It may generate one reusable component — or it may generate four nearly-identical blocks of JSX because it didn't notice they were the same. There's no signal in the image to tell it which is correct.&lt;/p&gt;

&lt;p&gt;Structured context carries &lt;code&gt;componentId&lt;/code&gt; on every instance node. The agent knows: these four nodes are all &lt;code&gt;ProductCard&lt;/code&gt;. Generate it once, render it four times with different props. That's the output you want. That's the output you can't get from pixels.&lt;/p&gt;

&lt;h2&gt;
  
  
  String identity is lost
&lt;/h2&gt;

&lt;p&gt;You have a "Continue" button on three different screens. Are those three instances the same string, or did a designer write them independently? In a well-structured Figma file, they reference the same string key. That means one &lt;code&gt;i18n&lt;/code&gt; entry, one change propagates everywhere.&lt;/p&gt;

&lt;p&gt;In three screenshots: three times the LLM generates a hardcoded string. If you're building an internationalised app, you now have three strings to find and replace instead of one to look up. Small thing. Compounds across a real codebase.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the LLM hallucinates: it re-derives structure every time
&lt;/h2&gt;

&lt;p&gt;The model has no memory of previous runs. Every time you paste the same screenshot, it reconstructs the structure from scratch. The reconstruction is probabilistic — which means the same screenshot + same prompt + same model can produce measurably different outputs on different runs. Same design, different code. Different component names, different className patterns, different layout choices.&lt;/p&gt;

&lt;p&gt;This is not a model bug. It's the expected behavior of a probabilistic model given insufficient constraints. The screenshot provides insufficient constraints. The model fills the gaps — and the gaps are filled differently each time.&lt;/p&gt;

&lt;p&gt;You can partially work around this with longer, more detailed prompts — "use Tailwind, use 8px grid, use these component names..." — but then you've manually specified the structure that should have been in the design file all along. You're doing the extraction work the tool should do.&lt;/p&gt;

&lt;h2&gt;
  
  
  The reproducibility problem
&lt;/h2&gt;

&lt;p&gt;Teams that use screenshots for design-to-code handoff hit the same wall: the output is not reproducible. Two developers, same Figma screenshot, independently prompt Claude — they get different component structures, different className patterns, different nesting decisions. Now you have two codebases that look the same visually but are architecturally inconsistent.&lt;/p&gt;

&lt;p&gt;This makes code review harder. It makes refactoring harder. It makes design system compliance auditing impossible. You can't diff "what did the agent generate from this design" if the answer changes every run.&lt;/p&gt;

&lt;p&gt;Structured context fixes reproducibility because it fixes the inputs. A deterministic input bundle — the same JSON with the same node IDs, component names, token values, and spatial relationships — produces much more consistent output across runs, agents, and developers. Not perfectly deterministic: the model is still probabilistic. But the variance drops dramatically when the structure is specified rather than inferred.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a screenshot gives you vs. what the IR gives you
&lt;/h2&gt;

&lt;p&gt;Take a product card: image, title, subtitle, price, an "Add to cart" button. Here's what each input gives the agent:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Screenshot input:&lt;/strong&gt; A rectangle with an image at the top, two lines of text, a number, and a button. Colors are inferred. Padding is estimated. Whether this is a component or one-off is unknown. The button variant is inferred from color. The spacing system is unknown.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;IR input:&lt;/strong&gt; Node kind &lt;code&gt;FRAME&lt;/code&gt;, name &lt;code&gt;ProductCard&lt;/code&gt;, component ID linking to the component definition. Auto-layout with vertical direction, 16px gap, 16px horizontal padding, 12px vertical padding. Child nodes: &lt;code&gt;IMAGE&lt;/code&gt; (fills width, fixed height), &lt;code&gt;TEXT&lt;/code&gt; with &lt;code&gt;stringRef.key: "product.title"&lt;/code&gt; and style &lt;code&gt;typography/heading.sm&lt;/code&gt;, &lt;code&gt;TEXT&lt;/code&gt; with &lt;code&gt;stringRef.key: "product.subtitle"&lt;/code&gt; and style &lt;code&gt;typography/body.md&lt;/code&gt;, &lt;code&gt;TEXT&lt;/code&gt; with fill &lt;code&gt;color/price&lt;/code&gt;, &lt;code&gt;INSTANCE&lt;/code&gt; of &lt;code&gt;Button/Primary/Medium&lt;/code&gt;. Background fill &lt;code&gt;color/surface.card&lt;/code&gt;. Border radius &lt;code&gt;radius/card&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The IR gives the agent a spec. The screenshot gives it a suggestion.&lt;/p&gt;

&lt;h2&gt;
  
  
  The frame: this is the documentation problem
&lt;/h2&gt;

&lt;p&gt;We solved this exact problem for source code decades ago. You don't give an agent a screenshot of your codebase and ask it to reason about architecture. You give it the code — the structured, parseable, semantically-meaningful representation. The abstract syntax tree, not a picture of the editor.&lt;/p&gt;

&lt;p&gt;Figma designs are structured data. They have a well-defined tree structure with typed nodes and named values, and the Figma API exposes it completely. The only reason the screenshot workflow persists is that extracting the structure and formatting it as context has friction.&lt;/p&gt;

&lt;p&gt;Reducing that friction is what &lt;a href="https://figmascope.dev" rel="noopener noreferrer"&gt;figmascope&lt;/a&gt; does. You paste the Figma URL, the export runs in your browser, and you get a ZIP with structured context: &lt;code&gt;CONTEXT.md&lt;/code&gt;, &lt;code&gt;tokens.json&lt;/code&gt;, per-screen IR, component inventory, strings manifest. Everything the agent needs, none of it inferred from pixels.&lt;/p&gt;

&lt;p&gt;Keep the screenshots for visual confirmation — the bundle includes 2x PNGs for exactly that. Use the structure for everything else. If you're on Claude Code, the &lt;a href="https://figmascope.dev/blog/claude-code-figma-workflow" rel="noopener noreferrer"&gt;full handoff pipeline walkthrough&lt;/a&gt; shows the pattern end-to-end; there are also variants for &lt;a href="https://figmascope.dev/blog/cursor-figma-workflow" rel="noopener noreferrer"&gt;Cursor&lt;/a&gt; and &lt;a href="https://figmascope.dev/blog/aider-figma-workflow" rel="noopener noreferrer"&gt;Aider&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>figma</category>
      <category>ai</category>
      <category>webdev</category>
      <category>claude</category>
    </item>
  </channel>
</rss>
