<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Pixels and Prompts]]></title><description><![CDATA[A developer's journal on AI-assisted UI and full-stack development — covering React, AI tools, Figma-to-code workflows, and real production lessons.]]></description><link>https://gayatrikakumanu.hashnode.dev</link><image><url>https://cdn.hashnode.com/res/hashnode/image/upload/v1593680282896/kNC7E8IR4.png</url><title>Pixels and Prompts</title><link>https://gayatrikakumanu.hashnode.dev</link></image><generator>RSS for Node</generator><lastBuildDate>Sun, 04 Oct 2026 15:17:56 GMT</lastBuildDate><atom:link href="https://gayatrikakumanu.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Figma-to-Code at Scale: What Actually Drives Cost, Quota, and Quality]]></title><description><![CDATA[Or: why the "smart" way to fetch Figma designs turned out to be the expensive way.


TL;DR: The "fetch a lightweight outline first" advice is backwards — it cost almost as much as fetching everything ]]></description><link>https://gayatrikakumanu.hashnode.dev/figma-to-code-at-scale</link><guid isPermaLink="true">https://gayatrikakumanu.hashnode.dev/figma-to-code-at-scale</guid><category><![CDATA[AI]]></category><category><![CDATA[Web Development]]></category><category><![CDATA[designtocode reality capturing live]]></category><category><![CDATA[UI]]></category><category><![CDATA[Productivity]]></category><category><![CDATA[optimization]]></category><category><![CDATA[figma]]></category><category><![CDATA[Figma to Code]]></category><category><![CDATA[webdev]]></category><dc:creator><![CDATA[gayatrikakumanu25]]></dc:creator><pubDate>Thu, 24 Sep 2026 04:36:01 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6aa0aacfb41b12efc4dba3b8/df366368-d89c-429b-bc80-40c12091b092.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Or: why the "smart" way to fetch Figma designs turned out to be the expensive way.</em></p>
<hr />
<blockquote>
<p><strong>TL;DR:</strong> The "fetch a lightweight outline first" advice is backwards — it cost almost as much as fetching everything at once, and up to 2× more on plain, un-componentized files. The real cost isn't the token bill everyone watches — it's Figma's hard API quota (one bad fetch pattern turns a 50-screen project from half a day into <strong>42 months</strong> on a Starter plan) and the invisible tax of an AI agent re-reading everything it's ever fetched, every single turn. Fix the file first. Fetch each screen exactly once.</p>
</blockquote>
<p><strong>Jump to:</strong></p>
<ul>
<li><p><a href="#how-this-was-actually-measured">How this was measured</a></p>
</li>
<li><p><a href="#whats-actually-inside-a-figma-response">What's inside a Figma response</a></p>
</li>
<li><p><a href="#finding-1--the-files-construction-matters-more-than-anything-else">Finding 1 — File construction matters most</a></p>
</li>
<li><p><a href="#finding-2--fetch-the-outline-first-is-extra-cost-dressed-up-as-savings">Finding 2 — The outline-first trap</a></p>
</li>
<li><p><a href="#finding-3--splitting-one-screen-into-sections-multiplies-your-bill">Finding 3 — Splitting sections multiplies cost</a></p>
</li>
<li><p><a href="#finding-4--code-connects-output-is-nearly-half-duplicate-data">Finding 4 — Code Connect's duplicate data</a></p>
</li>
<li><p><a href="#finding-5--compact-specs-work-great-but-the-obvious-shortcut-throws-away-real-content">Finding 5 — Compact specs done right</a></p>
</li>
<li><p><a href="#zooming-out-the-three-costs-that-actually-dominate-real-projects">The three costs that dominate real projects</a></p>
</li>
<li><p><a href="#audit-the-file-before-you-spend-a-single-token">Audit before you fetch</a></p>
</li>
<li><p><a href="#the-playbook">The playbook</a></p>
</li>
</ul>
<hr />
<h2>The setup</h2>
<p>There's a piece of conventional wisdom floating around every Figma-to-code workflow: <strong>don't fetch the whole design at once — grab a lightweight outline first, then pull styling only for the bits you actually need.</strong> It sounds efficient. It sounds like something a senior engineer would nod along to.</p>
<p>So I tested it. I measured it, frame by frame, character by character. Turns out it's the wrong default.</p>
<p>On a file built with real components, that "smart" outline-first approach cost <em>almost as much</em> as just fetching everything in one go. On a file built from plain, un-componentized frames, it cost <strong>up to twice as much</strong>.</p>
<p>The things that actually moved the needle were less obvious:</p>
<ul>
<li><p>On a single screen, it came down to <strong>how the Figma file itself was built</strong>.</p>
</li>
<li><p>On a real, multi-screen project, two other things took over: <strong>how many times Figma lets you call its API</strong>, and <strong>the hidden tax of an AI agent re-reading everything it has ever fetched, every single turn.</strong></p>
</li>
</ul>
<p>Here's the full breakdown — think of it as a lab report with opinions.</p>
<hr />
<h2>How this was actually measured</h2>
<p>I pointed Figma's remote MCP server (the tool that lets AI agents talk to Figma) at six frames inside one file:</p>
<ul>
<li><p><strong>Five "plain" screens</strong> — landing page, shop, product detail, about, and article. No component instances. No auto-layout. Frames just placed at fixed pixel positions, with raw hard-coded colors instead of design tokens.</p>
</li>
<li><p><strong>One "proper" screen</strong> — the About page from Figma's own Simple Design System (SDS) example. This one's built the way design systems are supposed to be built: 61 component instances across 17 components, auto-layout everywhere, and <strong>Code Connect</strong> turned on (a Figma feature that links a design component directly to its real code counterpart).</p>
</li>
</ul>
<p>Every number below is labeled honestly, because "trust me" isn't a methodology:</p>
<table>
<thead>
<tr>
<th>Label</th>
<th>What it means</th>
</tr>
</thead>
<tbody><tr>
<td><strong>Measured</strong></td>
<td>An exact character count from a real tool response</td>
</tr>
<tr>
<td><strong>Validated</strong></td>
<td>Built by a custom emulator that reproduces Figma's output character-for-character on test cases</td>
</tr>
<tr>
<td><strong>Modeled</strong></td>
<td>Calculated from measured pieces, with assumptions clearly stated</td>
</tr>
</tbody></table>
<p>Token counts assume roughly 3–3.6 characters per token — a rough industry rule of thumb, not gospel. (The actual harness counts tokens exactly; the ratio is just for quick mental math.)</p>
<p><strong>Building the emulator paid off immediately.</strong> By reconstructing Figma's own metadata logic from scratch and comparing it line-by-line to real responses, I found out <em>why</em> the tool decides to show what it shows.</p>
<blockquote>
<p><strong>This almost got me.</strong> My first scan of the SDS page counted 177 nodes. Then I found out Figma's Plugin API silently skips hidden layers inside component instances by default — turning that on bumped the count to <strong>301</strong>. Fifty-eight nodes had been invisible the entire time. If I'd shipped the analysis on that first pass, every downstream number would've been wrong.</p>
</blockquote>
<hr />
<h2>What's actually inside a Figma response</h2>
<p>Before diving into findings, it helps to know what you're paying for. A <code>get_design_context</code> response — the main call an AI agent makes to understand a screen — is made of three parts:</p>
<ol>
<li><p><strong>The generated code itself.</strong> On the plain landing page, that's 28,566 characters. Half of it — 14,322 characters — is just Tailwind CSS class strings. Another 13% is metadata attributes (<code>data-node-id</code>, <code>data-name</code>) that exist purely for traceability, not for rendering anything.</p>
</li>
<li><p><strong>Fixed trailing instructions.</strong> Boilerplate Figma tacks onto <em>every</em> response — 1,454 characters on the landing page, ballooning to 4,367 on the SDS page because it now has to explain style tokens, Code Connect usage, and component props. On one tiny 5-node section, this boilerplate was <strong>48% of the entire response</strong>.</p>
</li>
<li><p><strong>A tiny inline screenshot.</strong> The landing page (1440×4811 pixels in reality) gets rendered down to 307×1024 — too small to even read the body text.</p>
</li>
</ol>
<p>The sneaky part: that "fixed instructions" chunk repeats on <em>every single call.</em> Fetch a screen in 10 pieces, and you pay for that boilerplate 10 times over. That single fact is the seed of nearly every finding below.</p>
<hr />
<h2>Finding 1 — The file's construction matters more than anything else</h2>
<table>
<thead>
<tr>
<th></th>
<th>Landing page (plain frames)</th>
<th>SDS About (real components + Code Connect)</th>
</tr>
</thead>
<tbody><tr>
<td>Visible nodes</td>
<td>131</td>
<td>243</td>
</tr>
<tr>
<td><code>get_design_context</code> size</td>
<td>30,020 chars (~8–10k tokens)</td>
<td>17,948 chars (~5–6k tokens)</td>
</tr>
<tr>
<td>Characters per visible node</td>
<td>229</td>
<td>74</td>
</tr>
</tbody></table>
<p>Read that again: the component-based page has <strong>almost double the number of visible nodes</strong> and still costs <strong>40% less</strong>. Why? Because with Code Connect wired up, each component instance comes back as a clean reference — <code>&lt;Header&gt;</code>, <code>&lt;Card&gt;</code>, <code>&lt;Button&gt;</code> — with its actual props, instead of the tool reverse-engineering a wall of Tailwind classes to <em>approximate</em> what that component looks like.</p>
<p>The plain-frame page didn't just cost more — it produced <strong>worse code</strong>. Because its root frame was absolutely positioned, the response was littered with 45 absolutely-positioned elements and 54 pixel-perfect offset classes like <code>top-[3857px]</code>. A nav bar sitting 39 pixels off-canvas came back as <code>left-[39px] right-[-39px]</code> — a snapshot of exactly where that one element happened to sit, not a layout that could ever be responsive.</p>
<p><strong>No clever fetching strategy fixes this.</strong> If the file itself is built badly, the output is built badly. Full stop.</p>
<p>This is bad on a single screen. It compounds fast once you're not just paying for one screen, but for the "smart" way of fetching it. →</p>
<hr />
<h2>Finding 2 — "Fetch the outline first" is extra cost dressed up as savings</h2>
<p>The advice sounds reasonable: call <code>get_metadata</code> first to get a sparse map of the file — layer IDs, names, types, positions — then selectively pull only the styling you need. Here's what that outline actually costs:</p>
<table>
<thead>
<tr>
<th></th>
<th>Landing page</th>
<th>SDS About</th>
</tr>
</thead>
<tbody><tr>
<td><code>get_metadata</code> size</td>
<td>11,859 chars</td>
<td>17,260 chars</td>
</tr>
<tr>
<td>As a share of the full response</td>
<td>40%</td>
<td><strong>96%</strong></td>
</tr>
</tbody></table>
<p>On the component-based page, the "lightweight" outline was almost the <em>entire size</em> of the full response you were trying to avoid paying for. Digging into why:</p>
<ul>
<li><p><strong>The collapse rule.</strong> An instance only collapses down to a single summary line if its direct children are themselves instances or plain text. If it contains a frame or a "slot," the whole thing gets listed out in full, internals and all.</p>
</li>
<li><p><strong>Long IDs.</strong> Every line inside an instance carries a full instance-path ID, for example:</p>
</li>
</ul>
<pre><code class="language-plaintext">I3:1200;2142:12360;2142:11561
</code></pre>
<p>Not exactly compact — and every single node in a deeply nested instance carries one.</p>
<ul>
<li><strong>Hidden layers.</strong> The metadata output <em>includes</em> hidden layers that the real code-generation call quietly drops.</li>
</ul>
<p>Figma's own internal guidance tells agents to call <code>get_design_context</code> directly and <em>not</em> to substitute the metadata call for it. The numbers back that up completely. Metadata only earns its keep in two specific situations:</p>
<ul>
<li><p>A screen too large to fit in one response — the outline lets you target a specific subtree.</p>
</li>
<li><p>A <code>get_design_context</code> call that already got truncated — the server automatically falls back to metadata on its own when a response is too big.</p>
</li>
</ul>
<p>So the "efficient" two-step approach is really a one-and-a-half-step approach that costs more than the one step it was trying to avoid. Naturally, the next instinct is to fetch in smaller pieces instead — which makes things worse, not better. →</p>
<hr />
<h2>Finding 3 — Splitting one screen into sections multiplies your bill</h2>
<p>Fetching a plain-frame page section-by-section means you pay for: the metadata outline, the same code split into pieces, <em>plus</em> the fixed instructions and a screenshot — repeated on every single call. Modeled from measured data:</p>
<table>
<thead>
<tr>
<th>Approach</th>
<th>Total characters</th>
<th>Cost vs. one direct call</th>
</tr>
</thead>
<tbody><tr>
<td>One direct call</td>
<td>30,020</td>
<td>1.0×</td>
</tr>
<tr>
<td>Metadata + 8 section calls</td>
<td>~48,600</td>
<td>1.6×, plus 8 screenshots</td>
</tr>
<tr>
<td>Metadata + 15 section calls</td>
<td>~57,100</td>
<td>1.9×, plus 15 screenshots</td>
</tr>
</tbody></table>
<p>Fewer, bigger calls are cheaper — and as the quota section below shows, they save your API call budget even harder than they save tokens.</p>
<p>Splitting calls is a token problem. Code Connect looked like the fix for token bloat generally — but it turns out even the "good" format is carrying dead weight. →</p>
<hr />
<h2>Finding 4 — Code Connect's output is nearly half duplicate data</h2>
<p>Code Connect output is already leaner than raw Tailwind, but it has a built-in redundancy: <strong>every prop gets emitted twice</strong>, alongside instance-swap IDs and slot placeholders that never get used downstream:</p>
<pre><code class="language-jsx">&lt;Button instanceSwapIconStart="3:130" iconStart="3:130" 
        textLabel="Sign in" label="Sign in" 
        variantVariant="Neutral" variant="Neutral" 
        variantState="Default" state="Default" ... /&gt;
</code></pre>
<p>On the SDS page, <strong>209 prop attributes were flat-out duplicated</strong>. Add in the swap IDs and slot placeholders and that's 6,374 characters — <strong>46.9% of the code</strong> — doing nothing but repeating itself.</p>
<p>A small post-processing script strips it clean, and a test confirms every value and tag structure survives untouched:</p>
<pre><code class="language-jsx">&lt;NavigationPill label="Products" state="Active" /&gt;
</code></pre>
<p>That's 13,581 characters of code trimmed down to 7,207 — <strong>with zero information lost</strong>, and the output ends up looking a lot more like something a human developer would actually write.</p>
<p>Stripping duplication is a good habit. But the more aggressive move — cutting content, not just noise — is where things get genuinely risky. →</p>
<hr />
<h2>Finding 5 — Compact specs work great, but the "obvious" shortcut throws away real content</h2>
<p>A custom extractor can build a <strong>compact spec</strong>: list each component's props exactly once, plus all the text content, nothing more. On the SDS page that came out to 8,690 characters — <strong>48% of the full response, with nothing missing.</strong></p>
<p>Here's the trap: the version most tutorials describe stops descending the moment it hits a component instance, on the theory that "the component already owns its internals, why re-read them." That produced a tiny 374-character output. Looks like a 98% savings — except it had <strong>silently thrown away the navigation labels, every card's title and body text, and all 24 footer links.</strong></p>
<p>On a real design system, the actual <em>content</em> of a page lives inside nested instances and their properties — not just at the top level. The rule that actually works: <strong>skip a component's own internal layer structure, but keep descending into its nested instances and text.</strong></p>
<p>Every finding so far is about a single screen. A real project is dozens of screens — and at that scale, the per-screen savings above stop being the story entirely. →</p>
<hr />
<h2>Zooming out: the three costs that actually dominate real projects</h2>
<p>A single screen is a nice benchmark. A real project is dozens of screens — and at that scale, three costs take over completely.</p>
<h3>1. Re-reading — the invisible tax</h3>
<p>Every tool result you fetch stays in the conversation and gets <strong>re-sent to the model on every future turn.</strong> With prompt caching active, writing something to cache costs 1.25× the normal input price, and each subsequent read costs just 0.1×. Do the math: a result that sticks around for 25 more turns costs about <strong>3.75× its own size</strong> — and roughly <strong>26× its size without caching at all.</strong> Large responses fetched early in a long session are the single most expensive habit you can form.</p>
<h3>2. Accumulation — the pile-up</h3>
<p>Every screen you fetch in one session just stacks on top of the last. Modeled at ~3.3 characters per token:</p>
<img src="https://cdn.hashnode.com/uploads/covers/6aa0aacfb41b12efc4dba3b8/ae45aba9-764a-4332-a5e4-f55e176d7d93.png" alt="" style="display:block;margin:0 auto" />

<table>
<thead>
<tr>
<th>Screens fetched in one session</th>
<th>Plain frames</th>
<th>Code Connect</th>
<th>Compact spec</th>
</tr>
</thead>
<tbody><tr>
<td>5</td>
<td>~45k tokens</td>
<td>~27k</td>
<td>~13k</td>
</tr>
<tr>
<td>12</td>
<td>~109k</td>
<td>~65k</td>
<td>~32k</td>
</tr>
<tr>
<td>25</td>
<td>~227k</td>
<td>~136k</td>
<td>~66k</td>
</tr>
</tbody></table>
<p>This isn't just a cost problem — it's an <strong>accuracy problem.</strong> By the twelfth screen, the agent is writing new code while eleven <em>other</em> screens' worth of markup is still sitting in its context, quietly competing for attention.</p>
<h3>3. Quota — the hard ceiling</h3>
<p>Figma counts every MCP read call against a monthly or daily limit. Current published limits: <strong>20 calls/month</strong> on Starter, <strong>200/day and 10/minute</strong> on Professional Dev or Full seats, rising to <strong>600/day</strong> on Enterprise. Here's the trap that catches people off guard: <strong>limits follow whichever plan owns the file</strong> — not your own seat. A file parked in Drafts, or owned by a Starter-tier team, gets Starter-tier limits, even if you personally have a Professional seat. (I hit the Starter limit myself, partway through this very analysis.)</p>
<p>For a modeled 50-screen project:</p>
<table>
<thead>
<tr>
<th>Flow</th>
<th>Read calls</th>
<th>Pro Dev seat (200/day)</th>
<th>Starter (20/month)</th>
</tr>
</thead>
<tbody><tr>
<td>One context call + one screenshot per screen</td>
<td>~101</td>
<td>half a day</td>
<td>5 months</td>
</tr>
<tr>
<td>Structure-first, component-based pages</td>
<td>~401</td>
<td>2 days</td>
<td>20 months</td>
</tr>
<tr>
<td>Structure-first, plain-frame pages</td>
<td>~851</td>
<td>4.3 days</td>
<td><strong>42 months</strong></td>
</tr>
</tbody></table>
<p>Read that last row again. <strong>The fetch strategy alone decides whether a project takes half a day or spills across a week — or, in the worst case, becomes mathematically impossible on a Starter plan.</strong></p>
<hr />
<h2>The header and footer are a third of every screen — stop re-fetching them</h2>
<p>On the SDS page, the Header and Footer alone accounted for <strong>34.6% of the generated code and 40% of the compact spec.</strong> On a real site, those same two components appear on <em>every single screen.</em> Build them once, then fetch only the page body on every subsequent screen — or tell your extractor to simply skip components that already exist in your codebase. Across a 20-screen project, that one change removes <strong>roughly a third of all remaining fetches.</strong></p>
<hr />
<h2>Audit the file before you spend a single token</h2>
<p>Here's the part that's almost too good to be true: most of these outcomes are <strong>predictable before you fetch anything at all</strong>, just by looking at how the file is structured. A readiness audit scores each frame on four signals — how many component instances it uses, how much of it uses auto-layout, whether its fills use design tokens or raw colors, and how its root layout is set up.</p>
<p>Scores for the six frames tested here:</p>
<table>
<thead>
<tr>
<th>Frame</th>
<th>Readiness score</th>
<th>Verdict</th>
</tr>
</thead>
<tbody><tr>
<td>SDS About</td>
<td>~85</td>
<td>Ready to go</td>
</tr>
<tr>
<td>Landing, Shop, About, Article, Product</td>
<td>~15–21</td>
<td>Fix the file first</td>
</tr>
</tbody></table>
<p>The best part: this audit runs on Figma's <strong>REST API</strong>, which <strong>doesn't touch your MCP quota at all.</strong> It checks every frame in one request, and it hands design a clear to-do list <em>before</em> engineering even starts. It is always cheaper to fix a Figma file up front than to throw away and rewrite code that was generated from a broken one.</p>
<hr />
<h2>The playbook</h2>
<p><strong>Phase 0 — Audit everything.</strong> One REST call, zero MCP quota spent. Sort every screen into <em>ready</em>, <em>needs cleanup</em>, or <em>fix first</em> — and hand the fix-first list straight to design.</p>
<p><strong>Phase 1 — Build the foundations, once.</strong></p>
<ul>
<li><p>Fetch design variables one time and map them onto your own token system.</p>
</li>
<li><p>Build the shared header/footer/layout shell once.</p>
</li>
<li><p>Keep a running record of which components now exist in code.</p>
</li>
</ul>
<p><strong>Phase 2 — One subagent per screen.</strong></p>
<ul>
<li><p>Each subagent fetches its own screen exactly once, skipping components already built in Phase 1.</p>
</li>
<li><p>It builds the screen, then reports back a <em>short summary</em> — never the raw design data.</p>
</li>
<li><p>The main session never holds more than one screen's worth of design context at a time.</p>
</li>
</ul>
<p><strong>Phase 3 — Verify once per screen</strong> against a screenshot big enough to actually read. Only re-fetch the specific sections that fail the visual comparison.</p>
<p><strong>Rules that apply across every phase:</strong></p>
<ol>
<li><p>Call <code>get_design_context</code> directly. Skip the metadata call unless the screen is genuinely too large or the response truncates.</p>
</li>
<li><p>One call per screen — never one call per section.</p>
</li>
<li><p>If a component is already mapped via Code Connect, use it as-is. Never reimplement it from scratch. (Note: Code Connect requires an Organization or Enterprise plan plus a Full or Dev seat.)</p>
</li>
<li><p>Strip Code Connect's duplicate props, or switch to a compact spec, whenever context space is tight.</p>
</li>
<li><p>Keep production files inside a paid team — not personal Drafts — so your quota follows the plan you're actually paying for.</p>
</li>
</ol>
<hr />
<h2>Where this analysis has limits (being honest about it)</h2>
<ul>
<li><p><strong>Sample size.</strong> Six frames, one file, one design system. The <em>direction</em> of these findings is solid; the exact percentages will shift on other files.</p>
</li>
<li><p><strong>Server version.</strong> Only the remote MCP server was tested here — not other integration paths.</p>
</li>
<li><p><strong>Token math.</strong> Token counts are conversions from exact character counts using an assumed ratio — always run an actual token counter before quoting these numbers as fact.</p>
</li>
<li><p><strong>Figma can change the rules.</strong> Response formats, boilerplate instructions, and quota limits are all things Figma controls and can update at any time. The measurement method here is built specifically so it can be re-run whenever that happens.</p>
</li>
</ul>
<p><strong>What's worth measuring next:</strong> the same comparison on a production design system with deeper component nesting, and a direct measure of <em>output quality</em> — specifically, counting how many components get reused versus recreated from scratch across a batch of agent-built screens. That number is the one that ultimately decides whether any of these savings actually matter in practice.</p>
<hr />
<h2>The takeaway</h2>
<p>Everyone optimizes for the token bill, because it's the cost you can see. On the files measured here, the real costs were hiding in three other places entirely:</p>
<ol>
<li><p>A design file that turned every button into hand-carved, bespoke markup.</p>
</li>
<li><p>A fetch pattern that quietly burned an entire day's API quota before lunch.</p>
</li>
<li><p>An agent writing its twelfth screen with eleven other screens' worth of markup still crowding its context window.</p>
</li>
</ol>
<p><strong>Fix the file first. Fetch each screen exactly once. Give every screen a clean, fresh context window.</strong></p>
<p>If you've hit Figma's rate limit mid-project, I'd like to know your plan tier and screen count — drop it in the comments.</p>
<hr />
<p><em>I write about AI-assisted UI and full-stack development — the practical, measured side of building with AI tools rather than just the hype. More of this series is coming as I move from UI-focused work into full-stack.</em></p>
]]></content:encoded></item></channel></rss>