<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Coder Legion - Recent posts tagged vue3</title>
<link>https://coderlegion.com/tag/vue3</link>
<description>Powered by Question2Answer</description>
<item>
<title>How I built a Social Recipe Extractor that turns short-form video links into structured recipes</title>
<link>https://coderlegion.com/17735/built-social-recipe-extractor-that-turns-short-form-video-links-into-structured-recipes</link>
<description>&lt;p&gt;I recently built a feature for &lt;a rel=&quot;nofollow&quot; href=&quot;https://recipe-finder.org&quot;&gt;https://recipe-finder.org&lt;/a&gt; that takes a TikTok, Instagram, or YouTube cooking link and turns it into a structured recipe.&lt;/p&gt;
&lt;p&gt;The goal was simple: recipe inspiration lives on social platforms, but the actual cooking steps are usually buried inside captions, spoken instructions, or fast cuts. I wanted a workflow where a user pastes a link and gets back something usable: a recipe title, ingredient list, instructions, and a cleaner format for the rest of the product.&lt;/p&gt;
&lt;h4 id=&quot;the-flow&quot;&gt;The Flow&lt;/h4&gt;
&lt;p&gt;The core user journey is straightforward:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The user pastes a supported social video URL.&lt;/li&gt;
&lt;li&gt;The frontend sends that URL to a protected backend endpoint.&lt;/li&gt;
&lt;li&gt;The backend normalizes the link, fetches available source metadata and text, and runs an extraction pass.&lt;/li&gt;
&lt;li&gt;The result is converted into a structured recipe object.&lt;/li&gt;
&lt;li&gt;The app returns a clean recipe view, keeps recent imports in history, and can reuse cached results for repeated links.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;What makes this interesting isn't just the form input—it's the cleanup step between raw social content and something a user can actually cook from. &lt;/p&gt;
&lt;p&gt;Here is a look under the hood at how it's built using Vue 3, TypeScript, and Node.js/Express.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;1-frontend-entry-point&quot;&gt;1. Frontend Entry Point&lt;/h4&gt;
&lt;p&gt;The feature lives behind authentication and opens as a dedicated page in the app. The page itself stays simple and hands the main workflow to a dedicated &lt;code&gt;Social Recipe Extractor&lt;/code&gt; component. &lt;/p&gt;
&lt;p&gt;To keep the UI predictable and sleek (opting for a dark mode aesthetic with vibrant orange accents for active states), the component manages four main states:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The pasted social link&lt;/li&gt;
&lt;li&gt;Loading and error feedback&lt;/li&gt;
&lt;li&gt;The extracted recipe result&lt;/li&gt;
&lt;li&gt;Recent import history and usage state&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This keeps the input on the left, the result on the right, and prior imports available without mixing feature logic across multiple pages.&lt;/p&gt;
&lt;h4 id=&quot;2-backend-owned-extraction-flow&quot;&gt;2. Backend-Owned Extraction Flow&lt;/h4&gt;
&lt;p&gt;The frontend does not parse social content directly. Instead, it sends the link to a backend route dedicated to social recipe extraction. &lt;/p&gt;
&lt;p&gt;That backend layer is responsible for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Validating the request&lt;/li&gt;
&lt;li&gt;Normalizing the URL into a canonical form&lt;/li&gt;
&lt;li&gt;Checking whether a usable cached import already exists&lt;/li&gt;
&lt;li&gt;Fetching source metadata and extracted text from the target platform&lt;/li&gt;
&lt;li&gt;Transforming unstructured content into a recipe-shaped response&lt;/li&gt;
&lt;li&gt;Returning a stable payload the frontend can render safely&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is the right ownership boundary because platform parsing, rate control, caching, and extraction quality all belong on the server. The frontend only ever deals with a typed response.&lt;/p&gt;
&lt;h4 id=&quot;3-structured-extraction&quot;&gt;3. Structured Extraction&lt;/h4&gt;
&lt;p&gt;The most important design choice was ensuring the pipeline doesn't stop at &quot;grab some text from the page.&quot; It pushes the output into a highly structured shape:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Recipe title&lt;/li&gt;
&lt;li&gt;Prep time&lt;/li&gt;
&lt;li&gt;Ingredients&lt;/li&gt;
&lt;li&gt;Instructions&lt;/li&gt;
&lt;li&gt;Normalized ingredients&lt;/li&gt;
&lt;li&gt;Source metadata (platform, thumbnail, title, author)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This matters because a structured result is much easier to reuse than a raw text dump. It allows the data to power future features without rebuilding the extraction logic each time.&lt;/p&gt;
&lt;h4 id=&quot;4-normalization-and-cleanup&quot;&gt;4. Normalization and Cleanup&lt;/h4&gt;
&lt;p&gt;Social content is inherently messy. Titles contain hashtags, descriptions are noisy, and ingredient mentions are often incomplete or informal. &lt;/p&gt;
&lt;p&gt;The implementation handles this by cleaning and normalizing content before &lt;em&gt;and&lt;/em&gt; after extraction:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;URL normalization&lt;/strong&gt; ensures equivalent links map to the same import record.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Title cleanup&lt;/strong&gt; prevents social-platform suffixes and noisy text from leaking into the recipe title.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Whitespace and escaped-text cleanup&lt;/strong&gt; is applied before extraction.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ingredient normalization&lt;/strong&gt; makes the output more consistent for downstream product use.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This cleanup layer is where a lot of the actual product quality is realized. &lt;/p&gt;
&lt;h4 id=&quot;5-caching-and-history&quot;&gt;5. Caching and History&lt;/h4&gt;
&lt;p&gt;Two product decisions make the feature feel significantly faster and more useful:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Cached imports&lt;/strong&gt; prevent unnecessary repeat processing for the same normalized link.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Import history&lt;/strong&gt; gives users a lightweight library of recently extracted recipes.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The extractor isn't just a one-shot tool; it becomes a reusable workflow inside the product.&lt;/p&gt;
&lt;h4 id=&quot;6-premium-friendly-usage-model&quot;&gt;6. Premium-Friendly Usage Model&lt;/h4&gt;
&lt;p&gt;Finally, the feature returns usage information along with the extraction result. That allows the UI to immediately show whether the user can continue importing, how much of their current allowance is used, and when an upgrade prompt should appear. &lt;/p&gt;
&lt;p&gt;This is a much better user experience than hard-failing late in the flow, as the interface can explain the state before the user hits a dead end.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;wrapping-up&quot;&gt;Wrapping Up&lt;/h4&gt;
&lt;p&gt;This is one of those features where the product value comes purely from reducing friction. People already save recipes from social media. The real improvement is turning that saved link into something searchable, reusable, and easier to cook from. &lt;/p&gt;
&lt;p&gt;If I were extending it further, the next logical step would be connecting the extracted, structured recipe directly into grocery list generation, smart meal planning, and nutrition analysis.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/17735/built-social-recipe-extractor-that-turns-short-form-video-links-into-structured-recipes</guid>
<pubDate>Wed, 13 May 2026 15:44:38 +0000</pubDate>
</item>
<item>
<title>I spent a year chasing AI hype and buying courses. Here is why I went back to Vue.</title>
<link>https://coderlegion.com/10722/i-spent-a-year-chasing-ai-hype-and-buying-courses-here-is-why-i-went-back-to-vue</link>
<description>&lt;p&gt;I’ll be honest: I got lost.&lt;/p&gt;
&lt;p&gt;For the past year, I abandoned my comfort zone. As a veteran Vue 2 developer, I felt the &quot;Fear Of Missing Out&quot; (FOMO) hitting me hard. Everywhere I looked, people were shouting: &lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;&quot;AI will replace you!&quot;&lt;/em&gt; &amp;gt; &lt;em&gt;&quot;Learn LLMs or become obsolete!&quot;&lt;/em&gt; &amp;gt; &lt;em&gt;&quot;Make passive income with AI-generated videos!&quot;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I have two kids to feed. The anxiety was real.&lt;/p&gt;
&lt;p&gt;So, I did what many terrified developers did. I stopped writing code and started chasing the wind. I bought the expensive courses on &quot;AI App Development&quot;. I tried to become a &quot;Content Creator&quot; using AI tools to churn out soulless videos. I tried to force myself to love the React ecosystem just because &quot;it has more AI libraries.&quot;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;I became a &quot;Leek&quot; (a term we use in China for people who get harvested by hype).&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;After a year of burning cash and time, I looked at my portfolio. I had zero real users, a bunch of &quot;Hello World&quot; AI demos, and a lingering feeling of emptiness. The AI tools improved my efficiency, sure, but they didn't solve the core problem: I wasn't building anything valuable.&lt;/p&gt;
&lt;h3 id=&quot;the-return-to-reality&quot;&gt;The Return to Reality&lt;/h3&gt;
&lt;p&gt;I had a reality check one late night. I realized that while everyone is trying to build the next ChatGPT wrapper, regular people still struggle with basic things.&lt;/p&gt;
&lt;p&gt;I create content, and I work with images daily. I realized that simple tasks like bulk resizing, converting formats, or compressing images without uploading them to a shady server (privacy matters!) are still annoying. &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Photoshop is too expensive and heavy for quick tasks.&lt;/li&gt;
&lt;li&gt;Most online tools are ad-ridden nightmares that steal your data.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So, I made a decision. &lt;strong&gt;Stop chasing the hype. Start shipping utility.&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&quot;from-vue-2-to-nuxt-4&quot;&gt;From Vue 2 to Nuxt 4&lt;/h3&gt;
&lt;p&gt;I went back to my roots, but I leveled up. I skipped the legacy Vue 2 patterns I was used to and dove straight into &lt;strong&gt;Vue 3 (Composition API)&lt;/strong&gt; and &lt;strong&gt;Nuxt&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;It was refreshing. No more fighting with Python environments or prompt engineering. Just pure, clean JavaScript/TypeScript.&lt;/p&gt;
&lt;p&gt;I built &lt;strong&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://bulkpictools.com&quot;&gt;BulkPicTools&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;It’s not an &quot;AI-powered, Blockchain-backed, Metaverse-ready&quot; platform. It’s a boring, useful tool.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;⚡️ &lt;strong&gt;Client-side only&lt;/strong&gt;: It runs entirely in your browser using WebAssembly and modern JS APIs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Privacy-first&lt;/strong&gt;: Your photos never leave your device. No server uploads.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Solves a real problem&lt;/strong&gt;: Bulk processing for creators who value their time.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;why-i-m-sharing-this&quot;&gt;Why I'm sharing this&lt;/h3&gt;
&lt;p&gt;I’m writing this for any other developer who feels inadequate because they aren't an &quot;AI Expert&quot; yet.&lt;/p&gt;
&lt;p&gt;You don't need to ride every wave. Your engineering skills—whether it's Vue, Rails, or PHP—are still valuable if you use them to solve real problems.&lt;/p&gt;
&lt;p&gt;I’m still learning the ropes with the latest Nuxt features, and the journey from &quot;Corporate Employee&quot; to &quot;Indie Hacker&quot; is terrifying. But at least now, I'm building something real again.&lt;/p&gt;
&lt;p&gt;If you have feedback on the tool or the Nuxt implementation, I’d love to hear it! &lt;/p&gt;
&lt;p&gt;Thanks for reading.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/10722/i-spent-a-year-chasing-ai-hype-and-buying-courses-here-is-why-i-went-back-to-vue</guid>
<pubDate>Thu, 29 Jan 2026 23:35:34 +0000</pubDate>
</item>
<item>
<title>Clean Async State Management with Pinia Colada</title>
<link>https://coderlegion.com/3728/clean-async-state-management-with-pinia-colada</link>
<description>&lt;hr&gt;
&lt;p&gt;Managing async state—think loading spinners, error handling, stale data—is notoriously messy. If you’ve wrestled with nested subscriptions or redundant fetch logic in Vue+Pinia apps, &lt;strong&gt;Pinia Colada&lt;/strong&gt; might be the game-changer you need.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;what-is-pinia-colada-&quot;&gt;What Is Pinia Colada?&lt;/h3&gt;
&lt;p&gt;Pinia Colada is a powerful data-fetching layer built on top of Pinia. It eliminates boilerplate by providing:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Automatic &lt;strong&gt;caching&lt;/strong&gt; and &lt;strong&gt;deduplication&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Smart query &lt;strong&gt;invalidation&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Declarative API for &lt;strong&gt;queries&lt;/strong&gt; (data fetches) and &lt;strong&gt;mutations&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Support for &lt;strong&gt;optimistic updates&lt;/strong&gt;, SSR, and tree-shaken size of \~2 KB&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&quot;quick-start&quot;&gt;Quick Start&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;npm install pinia @pinia/colada
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then in your Vue app setup:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-ts&quot;&gt;import { createPinia } from 'pinia'
import { PiniaColada } from '@pinia/colada'

app.use(createPinia())
app.use(PiniaColada, {/* optional plugins */})
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now you’re ready to use &lt;code&gt;useQuery&lt;/code&gt; and &lt;code&gt;useMutation&lt;/code&gt; everywhere.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;example-querying-data&quot;&gt;Example: Querying Data&lt;/h3&gt;
&lt;p&gt;Instead of manual loading flags, error state, and fetch logic:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-ts&quot;&gt;const { data, error, isPending, isLoading, refresh } = useQuery({
  key: ['users'],
  query: fetchUsers,
})
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then in the template, you can declaratively handle the three states:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;isPending&lt;/code&gt; — first fetch&lt;/li&gt;
&lt;li&gt;&lt;code&gt;isLoading&lt;/code&gt; — refreshes&lt;/li&gt;
&lt;li&gt;&lt;code&gt;error&lt;/code&gt; — if broken&lt;/li&gt;
&lt;li&gt;&lt;code&gt;data&lt;/code&gt; — once resolved&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&quot;mutations-amp-invalidation&quot;&gt;Mutations &amp;amp; Invalidation&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-ts&quot;&gt;const { mutate: addComment, isLoading } = useMutation({
  mutation: postComment,
  onSettled: async ({ id }) =&amp;gt; {
    await queryCache.invalidateQueries({ key: ['comments', id], exact: true })
  }
})
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This lets you optimistically update and ensure fresh data before closing modal dialogs or user notifications.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;why-you-ll-love-it&quot;&gt;Why You’ll Love It&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Minimal state boilerplate: No more juggling &lt;code&gt;isLoading&lt;/code&gt;, &lt;code&gt;isError&lt;/code&gt;, and &lt;code&gt;data&lt;/code&gt; manually.&lt;/li&gt;
&lt;li&gt;Built-in caching and deduplication for better UX and efficiency.&lt;/li&gt;
&lt;li&gt;Fully typed, tree-shakeable, zero deps (besides Pinia), and SSR-ready.&lt;/li&gt;
&lt;li&gt;Plugins like &lt;strong&gt;autoRefetch&lt;/strong&gt; and &lt;strong&gt;delay&lt;/strong&gt; help avoid flickers or stale data.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&quot;real-world-feedback&quot;&gt;Real-World Feedback&lt;/h3&gt;
&lt;p&gt;Reddit users highlight Pinia Colada's advantage for API-driven state:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;“This is what Pinia stores call service methods… API calls inside sweet local store. It’s perfect to avoid multiple fetches.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Others note:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;“Pinia is for global app state. For API caching use Tanstack Query… Pinia Colada consolidates the conundrum.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id=&quot;tl-dr-when-to-use-it&quot;&gt;TL;DR – When to Use It&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Use Pinia Colada when&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You want clean, reusable logic for API calls&lt;/li&gt;
&lt;li&gt;You care about efficient caching and UX consistency&lt;/li&gt;
&lt;li&gt;You prefer declarative state over imperative patterns&lt;/li&gt;
&lt;li&gt;You work with mutable server data and want stale-data control&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&quot;want-to-go-further-&quot;&gt;Want to Go Further?&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Explore &lt;strong&gt;optimistic updates&lt;/strong&gt;, SSR support, and GraphQL usage&lt;/li&gt;
&lt;li&gt;Combine with Vue Router Data Loaders and modular async handling&lt;/li&gt;
&lt;li&gt;Try plugins like auto-refetch and delay to polish UX&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Pinia Colada brings a modern, well-structured approach to async state in Vue apps—cutting boilerplate, reducing bugs, and improving developer happiness. Whether it's simple CRUD or complex dialogs or pagination, it's well worth a look.&lt;/p&gt;
&lt;hr&gt;
</description>
<category>Frontend Dev</category>
<guid isPermaLink="true">https://coderlegion.com/3728/clean-async-state-management-with-pinia-colada</guid>
<pubDate>Sat, 05 Jul 2025 08:33:04 +0000</pubDate>
</item>
<item>
<title>Velora Vue.js Admin Template (Free)</title>
<link>https://coderlegion.com/3654/velora-vue-js-admin-template-free</link>
<description>&lt;p&gt;&lt;strong&gt;Velora Vue.js Admin Template (Free Version)&lt;/strong&gt; is a clean, responsive, and modern admin dashboard built using &lt;strong&gt;Vue 3&lt;/strong&gt;, &lt;strong&gt;Vuetify 3&lt;/strong&gt;, and &lt;strong&gt;Vite&lt;/strong&gt;. Designed for developers who want a flexible and ready-to-use admin UI, Velora helps speed up dashboard and SaaS app development.&lt;/p&gt;
&lt;h4 id=&quot;features&quot;&gt;Features&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Vue 3 with Composition API&lt;/li&gt;
&lt;li&gt;✨ Vuetify 3 design system&lt;/li&gt;
&lt;li&gt;⚡ Vite for blazing-fast dev server&lt;/li&gt;
&lt;li&gt;Light/Dark Mode&lt;/li&gt;
&lt;li&gt;Pre-built pages: Dashboard, Login, Error, etc.&lt;/li&gt;
&lt;li&gt;Fully customizable and extendable&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;ideal-for-&quot;&gt;Ideal for:&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Developers building admin panels&lt;/li&gt;
&lt;li&gt;Dashboard interfaces&lt;/li&gt;
&lt;li&gt;Internal tools and SaaS backends&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;why-it-s-free-&quot;&gt;Why it's free?&lt;/h4&gt;
&lt;p&gt;We created this version to help indie developers, hobbyists, and startups get started with Vue and Vuetify faster. For more features and advanced pages, you can explore our premium version.&lt;/p&gt;
&lt;p&gt; &lt;strong&gt;Live Demo:&lt;/strong&gt;&lt;br&gt;
&lt;a rel=&quot;nofollow&quot; href=&quot;https://demos.icreatorstudio.com/velora-vuejs-vuetify-admin-template-free&quot;&gt;https://demos.icreatorstudio.com/velora-vuejs-vuetify-admin-template-free&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;strong&gt;Support &amp;amp; Premium Version:&lt;/strong&gt;&lt;br&gt;
&lt;a rel=&quot;nofollow&quot; href=&quot;https://icreatorstudio.com/product/velora-vuejs-admin-template&quot;&gt;https://icreatorstudio.com/product/velora-vuejs-admin-template&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Built by &lt;a rel=&quot;nofollow&quot; href=&quot;https://icreatorstudio.com&quot;&gt;iCreator Studio&lt;/a&gt; ✨&lt;/p&gt;
</description>
<category>Templates &amp; UI Kits</category>
<guid isPermaLink="true">https://coderlegion.com/3654/velora-vue-js-admin-template-free</guid>
<pubDate>Mon, 30 Jun 2025 10:29:56 +0000</pubDate>
</item>
</channel>
</rss>