<?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: Olebogeng Mbedzi</title>
    <description>The latest articles on DEV Community by Olebogeng Mbedzi (@olebogengmbedzi).</description>
    <link>https://dev.to/olebogengmbedzi</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%2F603869%2F4013551d-dedc-471a-afdf-4a14f98d508f.png</url>
      <title>DEV Community: Olebogeng Mbedzi</title>
      <link>https://dev.to/olebogengmbedzi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/olebogengmbedzi"/>
    <language>en</language>
    <item>
      <title>Stop Maintaining Manual Skeletons in React</title>
      <dc:creator>Olebogeng Mbedzi</dc:creator>
      <pubDate>Tue, 20 Jan 2026 22:24:57 +0000</pubDate>
      <link>https://dev.to/olebogengmbedzi/stop-maintaining-manual-skeletons-in-react-4mj3</link>
      <guid>https://dev.to/olebogengmbedzi/stop-maintaining-manual-skeletons-in-react-4mj3</guid>
      <description>&lt;p&gt;If you've built a React application recently, you've likely implemented "Skeleton Screens": those gray, pulsating boxes that signify content is loading.&lt;/p&gt;

&lt;p&gt;They provide a great user experience, but a &lt;strong&gt;terrible developer experience&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem: The "Twin Component" Trap
&lt;/h2&gt;

&lt;p&gt;To implement a skeleton correctly, you typically create a separate component (e.g., &lt;code&gt;&amp;lt;UserCardSkeleton /&amp;gt;&lt;/code&gt;) that visually mimics your real component.&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;// The Real Component&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;UserCard&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&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="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"p-4 rounded-xl border flex gap-4"&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="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;avatar&lt;/span&gt;&lt;span class="si"&gt;}&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;"w-12 h-12 rounded-full"&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;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h2&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-lg font-bold"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h2&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;p&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-gray-500"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;role&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;p&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;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;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// The Skeleton (The "Twin")&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;UserCardSkeleton&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&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="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"p-4 rounded-xl border flex gap-4"&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="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"w-12 h-12 rounded-full bg-gray-200 animate-pulse"&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;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;"h-4 w-32 bg-gray-200 rounded mb-2 animate-pulse"&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="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"h-3 w-24 bg-gray-200 rounded animate-pulse"&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;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;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This works fine... until you change the design.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scenario:&lt;/strong&gt; You decide to move the avatar to the right side.&lt;br&gt;
&lt;strong&gt;Result:&lt;/strong&gt; You update &lt;code&gt;&amp;lt;UserCard /&amp;gt;&lt;/code&gt;. But if you forget to open &lt;code&gt;&amp;lt;UserCardSkeleton /&amp;gt;&lt;/code&gt;, your users see a jarring "layout shift".&lt;/p&gt;

&lt;p&gt;You are effectively maintaining &lt;strong&gt;two UIs&lt;/strong&gt; for every one component.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Solution: Runtime DOM Measurement
&lt;/h2&gt;

&lt;p&gt;What if the code could just look at our component and figure it out?&lt;/p&gt;

&lt;p&gt;I built a library called &lt;strong&gt;&lt;code&gt;shimmer-from-structure&lt;/code&gt;&lt;/strong&gt; to do exactly that.&lt;/p&gt;
&lt;h3&gt;
  
  
  How it works
&lt;/h3&gt;

&lt;p&gt;Instead of creating a skeleton, you wrap your &lt;strong&gt;real&lt;/strong&gt; component in a &lt;code&gt;&amp;lt;Shimmer&amp;gt;&lt;/code&gt; provider and pass it some mock data.&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="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Shimmer&lt;/span&gt; &lt;span class="p"&gt;}&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;shimmer-from-structure&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// 1. Define loading data structure&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;userTemplate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Loading Name...&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Loading...&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;avatar&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/placeholder.png&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Option&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="c1"&gt;// 2. Wrap your component&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Shimmer&lt;/span&gt; 
      &lt;span class="na"&gt;loading&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;isLoading&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; 
      &lt;span class="na"&gt;templateProps&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;userTemplate&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="cm"&gt;/* 3. Render your REAL component */&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;UserCard&lt;/span&gt; &lt;span class="na"&gt;user&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;userTemplate&lt;/span&gt;&lt;span class="si"&gt;}&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="nc"&gt;Shimmer&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When &lt;code&gt;loading={true}&lt;/code&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; The library renders your &lt;code&gt;UserCard&lt;/code&gt; with transparent text.&lt;/li&gt;
&lt;li&gt; It uses &lt;code&gt;useLayoutEffect&lt;/code&gt; to measure the DOM geometry.&lt;/li&gt;
&lt;li&gt; It finds every &lt;code&gt;img&lt;/code&gt;, &lt;code&gt;text&lt;/code&gt;, and &lt;code&gt;button&lt;/code&gt; node.&lt;/li&gt;
&lt;li&gt; It overlays a pixel-perfect shimmer animation.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Why this is better
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Zero Maintenance&lt;/strong&gt;: If you move the avatar to the right, the shimmer automatically moves to the right.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Pixel Perfect&lt;/strong&gt;: The skeleton matches the exact height/width of your text content.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Visual Stability&lt;/strong&gt;: It preserves container backgrounds and borders.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Try it out
&lt;/h2&gt;

&lt;p&gt;You can install it from NPM:&lt;br&gt;
&lt;code&gt;npm install shimmer-from-structure&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Repo:&lt;/strong&gt; &lt;a href="https://github.com/darula-hpp/shimmer-from-structure" rel="noopener noreferrer"&gt;https://github.com/darula-hpp/shimmer-from-structure&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'd love to hear your feedback in the comments! 👇&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>react</category>
      <category>skeleton</category>
      <category>programming</category>
    </item>
    <item>
      <title>I built a tool to find where React components come from — even in big Next.js projects</title>
      <dc:creator>Olebogeng Mbedzi</dc:creator>
      <pubDate>Tue, 11 Nov 2025 19:00:23 +0000</pubDate>
      <link>https://dev.to/olebogengmbedzi/i-built-a-tool-to-find-where-react-components-come-from-even-in-big-nextjs-projects-5he2</link>
      <guid>https://dev.to/olebogengmbedzi/i-built-a-tool-to-find-where-react-components-come-from-even-in-big-nextjs-projects-5he2</guid>
      <description>&lt;h1&gt;
  
  
  I built a tool to find where React components come from — even in big Next.js projects
&lt;/h1&gt;

&lt;p&gt;Have you ever stared at a React component in the browser and thought:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Wait… which file does &lt;em&gt;this&lt;/em&gt; element come from again?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That was me, almost daily, while working on large Next.js and Vite projects.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;&lt;a href="https://www.npmjs.com/package/react-source-lens" rel="noopener noreferrer"&gt;react-source-lens&lt;/a&gt;&lt;/strong&gt; — a small developer tool that lets you &lt;strong&gt;hover over any React element and instantly see the file path and line number&lt;/strong&gt; where it was defined.&lt;/p&gt;




&lt;h3&gt;
  
  
  🎯 The problem
&lt;/h3&gt;

&lt;p&gt;When debugging complex React apps, you often end up in this loop:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;See a button, card, or modal in the browser.
&lt;/li&gt;
&lt;li&gt;Open DevTools → Components tab.
&lt;/li&gt;
&lt;li&gt;Try to guess which file it came from.
&lt;/li&gt;
&lt;li&gt;Switch to VS Code → search → open → check.
&lt;/li&gt;
&lt;li&gt;Repeat.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It’s slow, context-breaking, and frustrating — especially in large codebases with nested components.&lt;/p&gt;




&lt;h3&gt;
  
  
  💡 The idea
&lt;/h3&gt;

&lt;p&gt;React internally stores a “Fiber tree” that connects each rendered element to its component function.&lt;br&gt;&lt;br&gt;
I realized that if I could &lt;strong&gt;read that Fiber tree&lt;/strong&gt; and correlate it to source metadata, I could display file info right in the browser — no guessing, no searching.&lt;/p&gt;

&lt;p&gt;So that’s what &lt;code&gt;react-source-lens&lt;/code&gt; does.&lt;/p&gt;


&lt;h3&gt;
  
  
  ⚙️ How it works
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;It traverses React’s internal Fiber tree to get component display names.
&lt;/li&gt;
&lt;li&gt;It uses optional metadata (if available) to map those components to their file paths.
&lt;/li&gt;
&lt;li&gt;Optionally, you can enable a &lt;strong&gt;lightweight Babel plugin&lt;/strong&gt; that injects file + line info during build time for 100% accuracy.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;🧠 I initially tried building an &lt;strong&gt;SWC plugin&lt;/strong&gt; for Next.js, but ran into compatibility issues — so I started with Babel since it’s widely supported.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h3&gt;
  
  
  🚀 Quick start
&lt;/h3&gt;

&lt;p&gt;Install it in your dev environment:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm install react-source-lens --save-dev&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Then wrap a part of your app:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { useReactSourceLens } from "react-source-lens";

function App() {
  useReactSourceLens()
  return (
      &amp;lt;YourApp /&amp;gt;
  );
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hover any element in your app, press your shortcut key, and see the file path + line appear instantly ✨&lt;/p&gt;

&lt;p&gt;🧠 Under the hood&lt;br&gt;
If you’re curious, react-source-lens works without modifying React itself.&lt;br&gt;
It simply walks the React Fiber tree through the DOM node references that React attaches internally (__reactFiber$...).&lt;/p&gt;

&lt;p&gt;From there, it reconstructs the hierarchy and, when available, displays the data-source-file and data-source-line attributes injected at build time by the Babel plugin.&lt;/p&gt;

&lt;p&gt;It’s a neat intersection of React internals and developer tooling.&lt;/p&gt;

&lt;p&gt;💬 What’s next&lt;br&gt;
I’m currently exploring:&lt;/p&gt;

&lt;p&gt;⚡ SWC integration (for faster builds in Next.js)&lt;/p&gt;

&lt;p&gt;🪟 Inline overlay view for file + line info&lt;/p&gt;

&lt;p&gt;🌳 Visual tree mode for complex UIs&lt;/p&gt;

&lt;p&gt;If that sounds useful, drop a star ⭐ on GitHub or leave a suggestion — I’m building this for the community.&lt;/p&gt;

&lt;p&gt;🔗 Links&lt;br&gt;
📦 NPM: &lt;a href="https://www.npmjs.com/package/react-source-lens" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/react-source-lens&lt;/a&gt;&lt;br&gt;
💻 &lt;a href="https://github.com/darula-hpp/react-source-lens" rel="noopener noreferrer"&gt;https://github.com/darula-hpp/react-source-lens&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Thanks for reading! If you’d like to follow my dev experiments and open-source work, you can find me on X &lt;a href="https://x.com/OlebogengMbedzi" rel="noopener noreferrer"&gt;OlebogengMbedzi&lt;/a&gt;&lt;br&gt;
. 🧡&lt;/em&gt;&lt;/p&gt;

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