Bird
Raised Fist0
Astroframework~15 mins

RSS feed generation in Astro - Deep Dive

Choose your learning style10 modes available
Overview - RSS feed generation
What is it?
RSS feed generation is the process of creating a special file that lists updates from a website in a simple format. This file allows people or apps to get new content automatically without visiting the site. In Astro, you can build this file using your website's data and templates. It helps share your latest posts or news easily with others.
Why it matters
Without RSS feeds, users would have to check websites manually for updates, which is slow and inefficient. RSS feeds let people subscribe and get new content delivered automatically, saving time and keeping them informed. For website owners, RSS feeds help reach a wider audience and keep readers engaged without extra effort.
Where it fits
Before learning RSS feed generation in Astro, you should understand basic Astro components and how to fetch or organize your website content. After mastering RSS feeds, you can explore advanced content syndication, podcast feeds, or integrating feeds with other platforms like newsletters or social media.
Mental Model
Core Idea
RSS feed generation is like creating a simple, organized list of your website's latest updates that others can subscribe to and read automatically.
Think of it like...
Imagine a newspaper delivery service that sends you only the headlines and summaries of new articles every morning, so you don't have to visit the newsstand daily. RSS feeds work the same way for websites.
Website Content ──> RSS Generator ──> RSS XML File ──> User's RSS Reader

┌───────────────┐     ┌───────────────┐     ┌───────────────┐     ┌───────────────┐
│ Website Posts │ ──▶ │ RSS Feed Code │ ──▶ │ RSS XML File  │ ──▶ │ RSS Reader App│
└───────────────┘     └───────────────┘     └───────────────┘     └───────────────┘
Build-Up - 6 Steps
1
FoundationUnderstanding RSS Feed Basics
🤔
Concept: Learn what an RSS feed is and why websites use it.
RSS stands for Really Simple Syndication. It is a file, usually in XML format, that lists recent updates from a website. This file includes titles, links, and summaries of new content. RSS readers or apps use this file to show users the latest posts without visiting the website.
Result
You understand that RSS is a simple list of updates in a special format that helps users get new content automatically.
Knowing what RSS is and its purpose helps you see why generating this file is useful for websites and users alike.
2
FoundationBasics of Astro Project Structure
🤔
Concept: Learn how Astro organizes files and how to add new files for RSS.
Astro projects have a folder structure with pages, components, and public assets. To generate an RSS feed, you create a special file that runs at build time to gather your posts and output the RSS XML file. This file usually lives in the 'src/pages' or 'src/utils' folder.
Result
You know where to place your RSS generation code in an Astro project and how it fits into the build process.
Understanding Astro's structure is key to integrating RSS feed generation smoothly into your site.
3
IntermediateFetching Content for RSS Feed
🤔Before reading on: Do you think RSS feeds require all website content or only recent updates? Commit to your answer.
Concept: Learn how to select and prepare the content that will appear in the RSS feed.
Usually, RSS feeds include only recent posts or updates. In Astro, you fetch your posts from markdown files, a CMS, or APIs. You then extract necessary data like title, date, summary, and URL. This data forms the items in your RSS feed.
Result
You can gather and prepare the right content to include in your RSS feed.
Knowing how to filter and format content ensures your RSS feed stays relevant and useful to subscribers.
4
IntermediateCreating RSS XML with Astro
🤔Before reading on: Do you think RSS XML is generated manually or with helper libraries? Commit to your answer.
Concept: Learn how to build the RSS XML file using Astro's build-time features and optional libraries.
You can write code in Astro that runs during build to create an XML string following RSS format. Libraries like 'rss' or 'feed' can help build this XML easily. The XML includes channel info (site title, link) and items (posts). You save this XML as 'rss.xml' in the public folder.
Result
You generate a valid RSS XML file that lists your site's recent posts.
Understanding how to produce correct XML ensures your feed works with all RSS readers.
5
AdvancedAutomating RSS Feed Updates
🤔Before reading on: Do you think RSS feeds update automatically or need manual regeneration? Commit to your answer.
Concept: Learn how to automate RSS feed generation so it updates whenever your site content changes.
In Astro, RSS feed generation happens at build time. When you add or update posts, rebuilding the site regenerates the RSS feed automatically. You can also set up continuous deployment to rebuild your site on content changes, keeping the feed fresh without manual work.
Result
Your RSS feed always reflects the latest content without extra effort.
Knowing how build-time generation works helps you maintain accurate feeds effortlessly.
6
ExpertOptimizing and Extending RSS Feeds
🤔Before reading on: Can RSS feeds include media like images or podcasts? Commit to your answer.
Concept: Explore advanced RSS features like adding images, categories, or podcast enclosures to enrich your feed.
RSS supports extra tags like for audio files, for topics, and for feed icons. You can extend your Astro RSS generator to include these for richer feeds. Also, consider feed validation tools to ensure compatibility. Optimizing feed size and caching improves performance for large sites.
Result
You create powerful, feature-rich RSS feeds that serve diverse content types and audiences.
Understanding RSS extensions and optimization techniques lets you build professional-grade feeds that stand out.
Under the Hood
RSS feed generation in Astro happens during the build process. Astro runs your code that gathers content data, formats it into XML following RSS standards, and writes this XML file to the public directory. This file is then served as a static asset. RSS readers fetch this XML file regularly to check for updates. The XML structure uses specific tags like , , , and <link> to organize information.</div><div class="dlm-design-reason "><div class="dlm-design-reason-label">Why designed this way?</div><div>RSS was designed as a simple, standardized XML format to allow easy sharing of website updates across different platforms and readers. Astro generates RSS feeds at build time to keep the process fast and static, avoiding runtime overhead. This design fits static site generation well, ensuring feeds are always in sync with site content without extra server logic.</div></div><div class="dlm-ascii-visual mechanism-diagram "><pre>┌───────────────┐ ┌───────────────┐ ┌───────────────┐ ┌───────────────┐ │ Content Files │ ───▶ │ Astro Build │ ───▶ │ RSS XML File │ ───▶ │ Public Folder │ └───────────────┘ └───────────────┘ └───────────────┘ └───────────────┘ RSS Readers fetch the RSS XML file from the Public Folder to display updates.</pre></div></div></article><article class="content-card dlm-card"><div class="code-articles-card-header"><span class="card-icon project"><span class="new-material-symbols icon-hw-24"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#EF4444"><path d="M193.33-80q-30.25 0-51.79-21.54T120-153.33v-173.34q0-30.25 21.54-51.79T193.33-400h573.34q30.25 0 51.79 21.54T840-326.67v173.34q0 30.25-21.54 51.79T766.67-80H193.33Zm-6.66-66.67h586.66v-186.66H186.67v186.66Zm252-558.66 86-153.34q4.33-7.66 11.33-11 7-3.33 14.67-1.33 7.66 2 13.3 6.5 5.63 4.5 7.36 13.5L600-677.33 768-724q9-2.33 16.17.67 7.16 3 11.5 9 4.33 6 4.66 13.33.34 7.33-5 15L694-541.33l43 25q12 7.33 15.17 20.66 3.16 13.34-4.17 25.34t-21 15.16q-13.67 3.17-25.67-4.16l-71.33-44q-12.67-7.67-15.33-21.5-2.67-13.84 5.66-25.84l51-75.33-124.66 29-22-123.33-65.34 113-106.66-77.34L387-557.33l-129.33 22.66L288-516.33q12 6.66 15.5 19.66t-3.17 25q-6.66 12-20 15.5-13.33 3.5-25.33-3.16l-132.67-76q-7.66-4.34-10.83-11.34t-1.17-14.66q2-7.67 6.84-12.84 4.83-5.16 13.83-7.16l172.33-29.34-46-170q-2.33-9 .34-15.83 2.66-6.83 8.66-11.17 6-4.33 13.67-4.66 7.67-.34 15.33 5l143.34 102Zm41 246ZM480-240Z"></path></svg></span></span><span class="codefly-card-title">Myth Busters - <!-- -->4<!-- --> Common Misconceptions</span></div><div class="code-articles-card-body"><div class="dlm-myths-grid"><div class="dlm-myth-card "><div class="dlm-myth-front "><div class="dlm-myth-self-check">Quick: Do you think RSS feeds update live on the website without rebuilding? Commit to yes or no.</div><div class="dlm-myth-belief"><span class="dlm-myth-label"><span class="new-material-symbols icon-hw-20"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#EF4444"><path d="m480-433.33 124.67 124.66Q614.33-299 628-299q13.67 0 23.33-9.67Q661-318.33 661-332q0-13.67-9.67-23.33L526.67-480l124.66-124.67Q661-614.33 661-628q0-13.67-9.67-23.33Q641.67-661 628-661q-13.67 0-23.33 9.67L480-526.67 355.33-651.33Q345.67-661 332-661q-13.67 0-23.33 9.67Q299-641.67 299-628q0 13.67 9.67 23.33L433.33-480 308.67-355.33Q299-345.67 299-332q0 13.67 9.67 23.33Q318.33-299 332-299q13.67 0 23.33-9.67L480-433.33ZM480-80q-82.33 0-155.33-31.5-73-31.5-127.34-85.83Q143-251.67 111.5-324.67T80-480q0-83 31.5-156t85.83-127q54.34-54 127.34-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 82.33-31.5 155.33-31.5 73-85.5 127.34Q709-143 636-111.5T480-80Z"></path></svg></span>Common Belief:</span><span>RSS feeds update instantly whenever new content is added to the website.</span></div><div class="dlm-myth-tap">Tap to reveal reality <svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 16 16" class="yellow-icon-color ms-1 mb-1" height="18" width="18" xmlns="http://www.w3.org/2000/svg"><path d="M8.5 1.75v2.716l.047-.002c.312-.012.742-.016 1.051.046.28.056.543.18.738.288.273.152.456.385.56.642l.132-.012c.312-.024.794-.038 1.158.108.37.148.689.487.88.716q.113.137.195.248h.582a2 2 0 0 1 1.99 2.199l-.272 2.715a3.5 3.5 0 0 1-.444 1.389l-1.395 2.441A1.5 1.5 0 0 1 12.42 16H6.118a1.5 1.5 0 0 1-1.342-.83l-1.215-2.43L1.07 8.589a1.517 1.517 0 0 1 2.373-1.852L5 8.293V1.75a1.75 1.75 0 0 1 3.5 0"></path></svg></div></div><div class="dlm-myth-back d-none"><div class="dlm-myth-reality"><span class="dlm-myth-label"><span class="new-material-symbols icon-hw-20"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#10B981"><path d="m422-395.33-94-94q-9.67-9.67-24-9.67t-24.67 10.33q-9.66 9.67-9.66 24 0 14.34 9.66 24l119.34 120q10 10 23.33 10 13.33 0 23.33-10L680-555.33q10.33-10.34 10.33-24.67 0-14.33-10.33-24.67-10.33-9.66-25-9.33-14.67.33-24.33 10L422-395.33ZM480-80q-82.33 0-155.33-31.5-73-31.5-127.34-85.83Q143-251.67 111.5-324.67T80-480q0-83 31.5-156t85.83-127q54.34-54 127.34-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 82.33-31.5 155.33-31.5 73-85.5 127.34Q709-143 636-111.5T480-80Z"></path></svg></span>Reality:</span><span>RSS feeds generated by Astro update only when the site is rebuilt, not live in real-time.</span></div><div class="dlm-myth-why"><span class="dlm-myth-label"><span class="new-material-symbols icon-hw-20"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#10B981"><path d="M459-60q-10-3.33-19-10L186.67-260q-12.34-9-19.5-23.33-7.17-14.34-7.17-30v-500q0-27 19.83-46.84Q199.67-880 226.67-880h506.66q27 0 46.84 19.83Q800-840.33 800-813.33v500q0 15.66-7.17 30-7.16 14.33-19.5 23.33L520-70q-9 6.67-19 10t-21 3.33q-11 0-21-3.33Zm-21.67-394-70.66-70.67q-10-10-23.34-9.83-13.33.17-23.33 9.83-10 10-10.17 23.5-.16 13.5 9.84 23.5l95 94.34q10 10 23.33 10 13.33 0 23.33-10l179.34-179.34q10-10 9.5-23.33-.5-13.33-10.17-23.33-10-10-23.5-10.17-13.5-.17-23.5 9.83L437.33-454Z"></path></svg></span>Why it matters:</span><span>Expecting live updates can cause confusion if subscribers don't see new posts until after a rebuild.</span></div></div></div><div class="dlm-myth-card "><div class="dlm-myth-front "><div class="dlm-myth-self-check">Quick: Do you think RSS feeds can include full website styling and scripts? Commit to yes or no.</div><div class="dlm-myth-belief"><span class="dlm-myth-label"><span class="new-material-symbols icon-hw-20"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#EF4444"><path d="m480-433.33 124.67 124.66Q614.33-299 628-299q13.67 0 23.33-9.67Q661-318.33 661-332q0-13.67-9.67-23.33L526.67-480l124.66-124.67Q661-614.33 661-628q0-13.67-9.67-23.33Q641.67-661 628-661q-13.67 0-23.33 9.67L480-526.67 355.33-651.33Q345.67-661 332-661q-13.67 0-23.33 9.67Q299-641.67 299-628q0 13.67 9.67 23.33L433.33-480 308.67-355.33Q299-345.67 299-332q0 13.67 9.67 23.33Q318.33-299 332-299q13.67 0 23.33-9.67L480-433.33ZM480-80q-82.33 0-155.33-31.5-73-31.5-127.34-85.83Q143-251.67 111.5-324.67T80-480q0-83 31.5-156t85.83-127q54.34-54 127.34-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 82.33-31.5 155.33-31.5 73-85.5 127.34Q709-143 636-111.5T480-80Z"></path></svg></span>Common Belief:</span><span>RSS feeds can include the full look and interactive features of a website.</span></div><div class="dlm-myth-tap">Tap to reveal reality <svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 16 16" class="yellow-icon-color ms-1 mb-1" height="18" width="18" xmlns="http://www.w3.org/2000/svg"><path d="M8.5 1.75v2.716l.047-.002c.312-.012.742-.016 1.051.046.28.056.543.18.738.288.273.152.456.385.56.642l.132-.012c.312-.024.794-.038 1.158.108.37.148.689.487.88.716q.113.137.195.248h.582a2 2 0 0 1 1.99 2.199l-.272 2.715a3.5 3.5 0 0 1-.444 1.389l-1.395 2.441A1.5 1.5 0 0 1 12.42 16H6.118a1.5 1.5 0 0 1-1.342-.83l-1.215-2.43L1.07 8.589a1.517 1.517 0 0 1 2.373-1.852L5 8.293V1.75a1.75 1.75 0 0 1 3.5 0"></path></svg></div></div><div class="dlm-myth-back d-none"><div class="dlm-myth-reality"><span class="dlm-myth-label"><span class="new-material-symbols icon-hw-20"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#10B981"><path d="m422-395.33-94-94q-9.67-9.67-24-9.67t-24.67 10.33q-9.66 9.67-9.66 24 0 14.34 9.66 24l119.34 120q10 10 23.33 10 13.33 0 23.33-10L680-555.33q10.33-10.34 10.33-24.67 0-14.33-10.33-24.67-10.33-9.66-25-9.33-14.67.33-24.33 10L422-395.33ZM480-80q-82.33 0-155.33-31.5-73-31.5-127.34-85.83Q143-251.67 111.5-324.67T80-480q0-83 31.5-156t85.83-127q54.34-54 127.34-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 82.33-31.5 155.33-31.5 73-85.5 127.34Q709-143 636-111.5T480-80Z"></path></svg></span>Reality:</span><span>RSS feeds are simple XML files without styling or scripts; they only contain text and links.</span></div><div class="dlm-myth-why"><span class="dlm-myth-label"><span class="new-material-symbols icon-hw-20"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#10B981"><path d="M459-60q-10-3.33-19-10L186.67-260q-12.34-9-19.5-23.33-7.17-14.34-7.17-30v-500q0-27 19.83-46.84Q199.67-880 226.67-880h506.66q27 0 46.84 19.83Q800-840.33 800-813.33v500q0 15.66-7.17 30-7.16 14.33-19.5 23.33L520-70q-9 6.67-19 10t-21 3.33q-11 0-21-3.33Zm-21.67-394-70.66-70.67q-10-10-23.34-9.83-13.33.17-23.33 9.83-10 10-10.17 23.5-.16 13.5 9.84 23.5l95 94.34q10 10 23.33 10 13.33 0 23.33-10l179.34-179.34q10-10 9.5-23.33-.5-13.33-10.17-23.33-10-10-23.5-10.17-13.5-.17-23.5 9.83L437.33-454Z"></path></svg></span>Why it matters:</span><span>Trying to add styling or scripts to RSS can break feed readers and reduce compatibility.</span></div></div></div><div class="dlm-myth-card "><div class="dlm-myth-front "><div class="dlm-myth-self-check">Quick: Do you think RSS feeds are obsolete and unused today? Commit to yes or no.</div><div class="dlm-myth-belief"><span class="dlm-myth-label"><span class="new-material-symbols icon-hw-20"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#EF4444"><path d="m480-433.33 124.67 124.66Q614.33-299 628-299q13.67 0 23.33-9.67Q661-318.33 661-332q0-13.67-9.67-23.33L526.67-480l124.66-124.67Q661-614.33 661-628q0-13.67-9.67-23.33Q641.67-661 628-661q-13.67 0-23.33 9.67L480-526.67 355.33-651.33Q345.67-661 332-661q-13.67 0-23.33 9.67Q299-641.67 299-628q0 13.67 9.67 23.33L433.33-480 308.67-355.33Q299-345.67 299-332q0 13.67 9.67 23.33Q318.33-299 332-299q13.67 0 23.33-9.67L480-433.33ZM480-80q-82.33 0-155.33-31.5-73-31.5-127.34-85.83Q143-251.67 111.5-324.67T80-480q0-83 31.5-156t85.83-127q54.34-54 127.34-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 82.33-31.5 155.33-31.5 73-85.5 127.34Q709-143 636-111.5T480-80Z"></path></svg></span>Common Belief:</span><span>RSS feeds are outdated and no one uses them anymore.</span></div><div class="dlm-myth-tap">Tap to reveal reality <svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 16 16" class="yellow-icon-color ms-1 mb-1" height="18" width="18" xmlns="http://www.w3.org/2000/svg"><path d="M8.5 1.75v2.716l.047-.002c.312-.012.742-.016 1.051.046.28.056.543.18.738.288.273.152.456.385.56.642l.132-.012c.312-.024.794-.038 1.158.108.37.148.689.487.88.716q.113.137.195.248h.582a2 2 0 0 1 1.99 2.199l-.272 2.715a3.5 3.5 0 0 1-.444 1.389l-1.395 2.441A1.5 1.5 0 0 1 12.42 16H6.118a1.5 1.5 0 0 1-1.342-.83l-1.215-2.43L1.07 8.589a1.517 1.517 0 0 1 2.373-1.852L5 8.293V1.75a1.75 1.75 0 0 1 3.5 0"></path></svg></div></div><div class="dlm-myth-back d-none"><div class="dlm-myth-reality"><span class="dlm-myth-label"><span class="new-material-symbols icon-hw-20"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#10B981"><path d="m422-395.33-94-94q-9.67-9.67-24-9.67t-24.67 10.33q-9.66 9.67-9.66 24 0 14.34 9.66 24l119.34 120q10 10 23.33 10 13.33 0 23.33-10L680-555.33q10.33-10.34 10.33-24.67 0-14.33-10.33-24.67-10.33-9.66-25-9.33-14.67.33-24.33 10L422-395.33ZM480-80q-82.33 0-155.33-31.5-73-31.5-127.34-85.83Q143-251.67 111.5-324.67T80-480q0-83 31.5-156t85.83-127q54.34-54 127.34-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 82.33-31.5 155.33-31.5 73-85.5 127.34Q709-143 636-111.5T480-80Z"></path></svg></span>Reality:</span><span>RSS is still widely used for blogs, podcasts, and news to deliver content efficiently.</span></div><div class="dlm-myth-why"><span class="dlm-myth-label"><span class="new-material-symbols icon-hw-20"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#10B981"><path d="M459-60q-10-3.33-19-10L186.67-260q-12.34-9-19.5-23.33-7.17-14.34-7.17-30v-500q0-27 19.83-46.84Q199.67-880 226.67-880h506.66q27 0 46.84 19.83Q800-840.33 800-813.33v500q0 15.66-7.17 30-7.16 14.33-19.5 23.33L520-70q-9 6.67-19 10t-21 3.33q-11 0-21-3.33Zm-21.67-394-70.66-70.67q-10-10-23.34-9.83-13.33.17-23.33 9.83-10 10-10.17 23.5-.16 13.5 9.84 23.5l95 94.34q10 10 23.33 10 13.33 0 23.33-10l179.34-179.34q10-10 9.5-23.33-.5-13.33-10.17-23.33-10-10-23.5-10.17-13.5-.17-23.5 9.83L437.33-454Z"></path></svg></span>Why it matters:</span><span>Ignoring RSS means missing out on a large audience who prefer automatic content delivery.</span></div></div></div><div class="dlm-myth-card "><div class="dlm-myth-front "><div class="dlm-myth-self-check">Quick: Can RSS feeds include multimedia like podcasts easily? Commit to yes or no.</div><div class="dlm-myth-belief"><span class="dlm-myth-label"><span class="new-material-symbols icon-hw-20"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#EF4444"><path d="m480-433.33 124.67 124.66Q614.33-299 628-299q13.67 0 23.33-9.67Q661-318.33 661-332q0-13.67-9.67-23.33L526.67-480l124.66-124.67Q661-614.33 661-628q0-13.67-9.67-23.33Q641.67-661 628-661q-13.67 0-23.33 9.67L480-526.67 355.33-651.33Q345.67-661 332-661q-13.67 0-23.33 9.67Q299-641.67 299-628q0 13.67 9.67 23.33L433.33-480 308.67-355.33Q299-345.67 299-332q0 13.67 9.67 23.33Q318.33-299 332-299q13.67 0 23.33-9.67L480-433.33ZM480-80q-82.33 0-155.33-31.5-73-31.5-127.34-85.83Q143-251.67 111.5-324.67T80-480q0-83 31.5-156t85.83-127q54.34-54 127.34-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 82.33-31.5 155.33-31.5 73-85.5 127.34Q709-143 636-111.5T480-80Z"></path></svg></span>Common Belief:</span><span>RSS feeds cannot handle media files like audio or video.</span></div><div class="dlm-myth-tap">Tap to reveal reality <svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 16 16" class="yellow-icon-color ms-1 mb-1" height="18" width="18" xmlns="http://www.w3.org/2000/svg"><path d="M8.5 1.75v2.716l.047-.002c.312-.012.742-.016 1.051.046.28.056.543.18.738.288.273.152.456.385.56.642l.132-.012c.312-.024.794-.038 1.158.108.37.148.689.487.88.716q.113.137.195.248h.582a2 2 0 0 1 1.99 2.199l-.272 2.715a3.5 3.5 0 0 1-.444 1.389l-1.395 2.441A1.5 1.5 0 0 1 12.42 16H6.118a1.5 1.5 0 0 1-1.342-.83l-1.215-2.43L1.07 8.589a1.517 1.517 0 0 1 2.373-1.852L5 8.293V1.75a1.75 1.75 0 0 1 3.5 0"></path></svg></div></div><div class="dlm-myth-back d-none"><div class="dlm-myth-reality"><span class="dlm-myth-label"><span class="new-material-symbols icon-hw-20"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#10B981"><path d="m422-395.33-94-94q-9.67-9.67-24-9.67t-24.67 10.33q-9.66 9.67-9.66 24 0 14.34 9.66 24l119.34 120q10 10 23.33 10 13.33 0 23.33-10L680-555.33q10.33-10.34 10.33-24.67 0-14.33-10.33-24.67-10.33-9.66-25-9.33-14.67.33-24.33 10L422-395.33ZM480-80q-82.33 0-155.33-31.5-73-31.5-127.34-85.83Q143-251.67 111.5-324.67T80-480q0-83 31.5-156t85.83-127q54.34-54 127.34-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 82.33-31.5 155.33-31.5 73-85.5 127.34Q709-143 636-111.5T480-80Z"></path></svg></span>Reality:</span><span>RSS supports media through tags like <enclosure>, making it ideal for podcasts.</span></div><div class="dlm-myth-why"><span class="dlm-myth-label"><span class="new-material-symbols icon-hw-20"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#10B981"><path d="M459-60q-10-3.33-19-10L186.67-260q-12.34-9-19.5-23.33-7.17-14.34-7.17-30v-500q0-27 19.83-46.84Q199.67-880 226.67-880h506.66q27 0 46.84 19.83Q800-840.33 800-813.33v500q0 15.66-7.17 30-7.16 14.33-19.5 23.33L520-70q-9 6.67-19 10t-21 3.33q-11 0-21-3.33Zm-21.67-394-70.66-70.67q-10-10-23.34-9.83-13.33.17-23.33 9.83-10 10-10.17 23.5-.16 13.5 9.84 23.5l95 94.34q10 10 23.33 10 13.33 0 23.33-10l179.34-179.34q10-10 9.5-23.33-.5-13.33-10.17-23.33-10-10-23.5-10.17-13.5-.17-23.5 9.83L437.33-454Z"></path></svg></span>Why it matters:</span><span>Knowing this allows creators to use RSS for rich media distribution, expanding their reach.</span></div></div></div></div></div></article><article class="content-card dlm-card"><div class="code-articles-card-header"><span class="card-icon intro"><span class="new-material-symbols icon-hw-24"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#3B82F6"><path d="M853.33-315.33V-562l-342 185q-15.33 8.67-32 8.33-16.66-.33-32-9L93.33-571q-9-5.33-12.83-12.67Q76.67-591 76.67-600q0-9 3.83-16.33 3.83-7.34 12.83-12.67l354-193.33q7.67-4.34 15.5-6.5 7.84-2.17 16.5-2.17 8.67 0 16.5 2.17 7.84 2.16 15.5 6.5l391 212.66q8.67 4.34 13.17 12.5Q920-589 920-580v264.67q0 14.33-9.5 23.83-9.5 9.5-23.83 9.5-14.34 0-23.84-9.5t-9.5-23.83Zm-406 177.66-220-120q-16-9-25.33-24.66-9.33-15.67-9.33-34.34v-166.66l254.66 139q15.34 8.66 32 8.66 16.67 0 32-8.66l254.67-139v166.66q0 18.67-9.33 34.34-9.34 15.66-25.34 24.66l-220 120q-7.66 4.34-15.5 6.5Q488-129 479.33-129q-8.66 0-16.5-2.17-7.83-2.16-15.5-6.5Z"></path></svg></span></span><span class="codefly-card-title">Expert Zone</span></div><div class="code-articles-card-body"><div class="dlm-expert-nuances"><div class="dlm-nuance-item"><div class="dlm-nuance-number">1</div><div class="dlm-nuance-text">RSS feed items must have unique GUIDs to prevent duplicate entries in readers, a detail often overlooked.</div></div><div class="dlm-nuance-item"><div class="dlm-nuance-number">2</div><div class="dlm-nuance-text">The order of items in the RSS feed matters; most readers expect newest items first for correct display.</div></div><div class="dlm-nuance-item"><div class="dlm-nuance-number">3</div><div class="dlm-nuance-text">Including optional tags like <pubDate> and <description> improves feed compatibility and user experience.</div></div></div><div class="dlm-when-not"><div class="dlm-when-not-label"><span class="new-material-symbols icon-hw-20"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#EF4444"><path d="m480-433.33 124.67 124.66Q614.33-299 628-299q13.67 0 23.33-9.67Q661-318.33 661-332q0-13.67-9.67-23.33L526.67-480l124.66-124.67Q661-614.33 661-628q0-13.67-9.67-23.33Q641.67-661 628-661q-13.67 0-23.33 9.67L480-526.67 355.33-651.33Q345.67-661 332-661q-13.67 0-23.33 9.67Q299-641.67 299-628q0 13.67 9.67 23.33L433.33-480 308.67-355.33Q299-345.67 299-332q0 13.67 9.67 23.33Q318.33-299 332-299q13.67 0 23.33-9.67L480-433.33ZM480-80q-82.33 0-155.33-31.5-73-31.5-127.34-85.83Q143-251.67 111.5-324.67T80-480q0-83 31.5-156t85.83-127q54.34-54 127.34-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 82.33-31.5 155.33-31.5 73-85.5 127.34Q709-143 636-111.5T480-80Z"></path></svg></span>When NOT to use</div><div>RSS feeds are not suitable when you need real-time push notifications or highly interactive content. Alternatives like WebSockets, server-sent events, or APIs with JSON are better for live updates and rich interactions.</div></div><div class="dlm-production"><div class="dlm-production-label"><span class="new-material-symbols icon-hw-20"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#10B981"><path d="m422-395.33-94-94q-9.67-9.67-24-9.67t-24.67 10.33q-9.66 9.67-9.66 24 0 14.34 9.66 24l119.34 120q10 10 23.33 10 13.33 0 23.33-10L680-555.33q10.33-10.34 10.33-24.67 0-14.33-10.33-24.67-10.33-9.66-25-9.33-14.67.33-24.33 10L422-395.33ZM480-80q-82.33 0-155.33-31.5-73-31.5-127.34-85.83Q143-251.67 111.5-324.67T80-480q0-83 31.5-156t85.83-127q54.34-54 127.34-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 82.33-31.5 155.33-31.5 73-85.5 127.34Q709-143 636-111.5T480-80Z"></path></svg></span>Production Patterns</div><div>In production, RSS feeds are often generated automatically during CI/CD pipelines after content updates. They include metadata for SEO and analytics tracking. Some sites generate multiple feeds for categories or languages. Validation tools are integrated to ensure feed correctness before deployment.</div></div></div></article><article class="content-card dlm-card"><div class="code-articles-card-header"><span class="card-icon intro"><span class="new-material-symbols icon-hw-24"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#3B82F6"><path d="M602.67-120v-123.33h-156V-650H358v126.67H80V-840h278v123.33h244.67V-840H880v316.67H602.67V-650h-89.34v340h89.34v-126.67H880V-120H602.67Zm-456-653.33V-590v-183.33ZM669.33-370v183.33V-370Zm0-403.33V-590v-183.33Zm0 183.33h144v-183.33h-144V-590Zm0 403.33h144V-370h-144v183.33ZM146.67-590h144.66v-183.33H146.67V-590Z"></path></svg></span></span><span class="codefly-card-title">Connections</span></div><div class="code-articles-card-body"><div class="dlm-connections-list"><div class="dlm-connection-item"><div class="dlm-connection-to">Static Site Generation</div><div class="dlm-connection-rel">RSS feed generation builds on static site generation by producing static XML files during build.</div><div class="dlm-connection-insight"><span class="dlm-insight-icon"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" class="yellow-icon-color" height="22" width="22" xmlns="http://www.w3.org/2000/svg"><path d="M7.94101 18C7.64391 16.7274 6.30412 15.6857 5.75395 14.9992C4.65645 13.6297 4 11.8915 4 10C4 5.58172 7.58172 2 12 2C16.4183 2 20 5.58172 20 10C20 11.8925 19.3428 13.6315 18.2443 15.0014C17.6944 15.687 16.3558 16.7276 16.059 18H7.94101ZM16 20V21C16 22.1046 15.1046 23 14 23H10C8.89543 23 8 22.1046 8 21V20H16ZM13 10.0048V6L8.5 12.0048H11V16.0048L15.5 10.0048H13Z"></path></svg></span><span>Understanding static site generation helps grasp why RSS feeds are generated at build time and served as static assets.</span></div></div><div class="dlm-connection-item"><div class="dlm-connection-to">Content Syndication</div><div class="dlm-connection-rel">RSS is a form of content syndication, distributing updates across platforms.</div><div class="dlm-connection-insight"><span class="dlm-insight-icon"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" class="yellow-icon-color" height="22" width="22" xmlns="http://www.w3.org/2000/svg"><path d="M7.94101 18C7.64391 16.7274 6.30412 15.6857 5.75395 14.9992C4.65645 13.6297 4 11.8915 4 10C4 5.58172 7.58172 2 12 2C16.4183 2 20 5.58172 20 10C20 11.8925 19.3428 13.6315 18.2443 15.0014C17.6944 15.687 16.3558 16.7276 16.059 18H7.94101ZM16 20V21C16 22.1046 15.1046 23 14 23H10C8.89543 23 8 22.1046 8 21V20H16ZM13 10.0048V6L8.5 12.0048H11V16.0048L15.5 10.0048H13Z"></path></svg></span><span>Knowing content syndication concepts clarifies how RSS feeds help share content beyond the original website.</span></div></div><div class="dlm-connection-item"><div class="dlm-connection-to">Library Cataloging Systems</div><div class="dlm-connection-rel">Both RSS feeds and library catalogs organize and share information systematically for easy access.</div><div class="dlm-connection-insight"><span class="dlm-insight-icon"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" class="yellow-icon-color" height="22" width="22" xmlns="http://www.w3.org/2000/svg"><path d="M7.94101 18C7.64391 16.7274 6.30412 15.6857 5.75395 14.9992C4.65645 13.6297 4 11.8915 4 10C4 5.58172 7.58172 2 12 2C16.4183 2 20 5.58172 20 10C20 11.8925 19.3428 13.6315 18.2443 15.0014C17.6944 15.687 16.3558 16.7276 16.059 18H7.94101ZM16 20V21C16 22.1046 15.1046 23 14 23H10C8.89543 23 8 22.1046 8 21V20H16ZM13 10.0048V6L8.5 12.0048H11V16.0048L15.5 10.0048H13Z"></path></svg></span><span>Seeing RSS as a digital catalog helps understand its role in organizing website updates for readers.</span></div></div></div></div></article><article class="content-card dlm-card"><div class="code-articles-card-header"><span class="card-icon project"><span class="new-material-symbols icon-hw-24"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#EF4444"><path d="m480-513.33 80.67 80.66Q570.33-423 584-423q13.67 0 23.33-9.67Q617-442.33 617-456q0-13.67-9.67-23.33L526.67-560l80.66-80.67Q617-650.33 617-664q0-13.67-9.67-23.33Q597.67-697 584-697q-13.67 0-23.33 9.67L480-606.67l-80.67-80.66Q389.67-697 376-697q-13.67 0-23.33 9.67Q343-677.67 343-664q0 13.67 9.67 23.33L433.33-560l-80.66 80.67Q343-469.67 343-456q0 13.67 9.67 23.33Q362.33-423 376-423q13.67 0 23.33-9.67L480-513.33ZM240-240 136.67-136.67Q121-121 100.5-129.6 80-138.21 80-160.33v-653q0-27 19.83-46.84Q119.67-880 146.67-880h666.66q27 0 46.84 19.83Q880-840.33 880-813.33v506.66q0 27-19.83 46.84Q840.33-240 813.33-240H240Zm-28.67-66.67h602v-506.66H146.67v575l64.66-68.34Zm-64.66 0v-506.66 506.66Z"></path></svg></span></span><span class="codefly-card-title">Common Pitfalls</span></div><div class="code-articles-card-body"><div class="dlm-pitfalls-list"><div class="dlm-pitfall-item"><div class="dlm-pitfall-header"><span class="dlm-pitfall-number">#<!-- -->1</span><span class="dlm-pitfall-title">Generating RSS feed without unique identifiers for items.</span></div><div class="dlm-pitfall-body"><div class="dlm-pitfall-wrong"><span class="dlm-pitfall-label"><span class="new-material-symbols icon-hw-20"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#EF4444"><path d="m480-433.33 124.67 124.66Q614.33-299 628-299q13.67 0 23.33-9.67Q661-318.33 661-332q0-13.67-9.67-23.33L526.67-480l124.66-124.67Q661-614.33 661-628q0-13.67-9.67-23.33Q641.67-661 628-661q-13.67 0-23.33 9.67L480-526.67 355.33-651.33Q345.67-661 332-661q-13.67 0-23.33 9.67Q299-641.67 299-628q0 13.67 9.67 23.33L433.33-480 308.67-355.33Q299-345.67 299-332q0 13.67 9.67 23.33Q318.33-299 332-299q13.67 0 23.33-9.67L480-433.33ZM480-80q-82.33 0-155.33-31.5-73-31.5-127.34-85.83Q143-251.67 111.5-324.67T80-480q0-83 31.5-156t85.83-127q54.34-54 127.34-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 82.33-31.5 155.33-31.5 73-85.5 127.34Q709-143 636-111.5T480-80Z"></path></svg></span>Wrong approach:</span><span>items.push({ title: post.title, link: post.url }); // Missing unique GUID</span></div><div class="dlm-pitfall-right"><span class="dlm-pitfall-label"><span class="new-material-symbols icon-hw-20"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#10B981"><path d="m422-395.33-94-94q-9.67-9.67-24-9.67t-24.67 10.33q-9.66 9.67-9.66 24 0 14.34 9.66 24l119.34 120q10 10 23.33 10 13.33 0 23.33-10L680-555.33q10.33-10.34 10.33-24.67 0-14.33-10.33-24.67-10.33-9.66-25-9.33-14.67.33-24.33 10L422-395.33ZM480-80q-82.33 0-155.33-31.5-73-31.5-127.34-85.83Q143-251.67 111.5-324.67T80-480q0-83 31.5-156t85.83-127q54.34-54 127.34-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 82.33-31.5 155.33-31.5 73-85.5 127.34Q709-143 636-111.5T480-80Z"></path></svg></span>Correct approach:</span><span>items.push({ title: post.title, link: post.url, guid: post.id }); // Unique GUID included</span></div><div class="dlm-pitfall-root"><span class="dlm-pitfall-label"><span class="new-material-symbols icon-hw-20"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#3B82F6"><path d="M400-320q100 0 170-70t70-170q0-100-70-170t-170-70q-100 0-170 70t-70 170q0 100 70 170t170 70Zm-28.5-131.5Q360-463 360-480v-200q0-17 11.5-28.5T400-720q17 0 28.5 11.5T440-680v200q0 17-11.5 28.5T400-440q-17 0-28.5-11.5Zm-140 0Q220-463 220-480v-120q0-17 11.5-28.5T260-640q17 0 28.5 11.5T300-600v120q0 17-11.5 28.5T260-440q-17 0-28.5-11.5Zm280 0Q500-463 500-480v-80q0-17 11.5-28.5T540-600q17 0 28.5 11.5T580-560v80q0 17-11.5 28.5T540-440q-17 0-28.5-11.5ZM400-240q-134 0-227-93T80-560q0-134 93-227t227-93q134 0 227 93t93 227q0 56-17.5 106T653-363l199 199q11 11 11 28t-11 28q-11 11-28 11t-28-11L597-307q-41 32-91 49.5T400-240Z"></path></svg></span>Root cause:</span><span>Not knowing that RSS readers use GUIDs to track items and avoid duplicates.</span></div></div></div><div class="dlm-pitfall-item"><div class="dlm-pitfall-header"><span class="dlm-pitfall-number">#<!-- -->2</span><span class="dlm-pitfall-title">Placing RSS XML file inside source folders instead of public folder.</span></div><div class="dlm-pitfall-body"><div class="dlm-pitfall-wrong"><span class="dlm-pitfall-label"><span class="new-material-symbols icon-hw-20"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#EF4444"><path d="m480-433.33 124.67 124.66Q614.33-299 628-299q13.67 0 23.33-9.67Q661-318.33 661-332q0-13.67-9.67-23.33L526.67-480l124.66-124.67Q661-614.33 661-628q0-13.67-9.67-23.33Q641.67-661 628-661q-13.67 0-23.33 9.67L480-526.67 355.33-651.33Q345.67-661 332-661q-13.67 0-23.33 9.67Q299-641.67 299-628q0 13.67 9.67 23.33L433.33-480 308.67-355.33Q299-345.67 299-332q0 13.67 9.67 23.33Q318.33-299 332-299q13.67 0 23.33-9.67L480-433.33ZM480-80q-82.33 0-155.33-31.5-73-31.5-127.34-85.83Q143-251.67 111.5-324.67T80-480q0-83 31.5-156t85.83-127q54.34-54 127.34-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 82.33-31.5 155.33-31.5 73-85.5 127.34Q709-143 636-111.5T480-80Z"></path></svg></span>Wrong approach:</span><span>Writing rss.xml inside 'src/pages' so it is not served as a static file.</span></div><div class="dlm-pitfall-right"><span class="dlm-pitfall-label"><span class="new-material-symbols icon-hw-20"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#10B981"><path d="m422-395.33-94-94q-9.67-9.67-24-9.67t-24.67 10.33q-9.66 9.67-9.66 24 0 14.34 9.66 24l119.34 120q10 10 23.33 10 13.33 0 23.33-10L680-555.33q10.33-10.34 10.33-24.67 0-14.33-10.33-24.67-10.33-9.66-25-9.33-14.67.33-24.33 10L422-395.33ZM480-80q-82.33 0-155.33-31.5-73-31.5-127.34-85.83Q143-251.67 111.5-324.67T80-480q0-83 31.5-156t85.83-127q54.34-54 127.34-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 82.33-31.5 155.33-31.5 73-85.5 127.34Q709-143 636-111.5T480-80Z"></path></svg></span>Correct approach:</span><span>Writing rss.xml inside 'public/' folder so it is accessible at '/rss.xml'.</span></div><div class="dlm-pitfall-root"><span class="dlm-pitfall-label"><span class="new-material-symbols icon-hw-20"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#3B82F6"><path d="M400-320q100 0 170-70t70-170q0-100-70-170t-170-70q-100 0-170 70t-70 170q0 100 70 170t170 70Zm-28.5-131.5Q360-463 360-480v-200q0-17 11.5-28.5T400-720q17 0 28.5 11.5T440-680v200q0 17-11.5 28.5T400-440q-17 0-28.5-11.5Zm-140 0Q220-463 220-480v-120q0-17 11.5-28.5T260-640q17 0 28.5 11.5T300-600v120q0 17-11.5 28.5T260-440q-17 0-28.5-11.5Zm280 0Q500-463 500-480v-80q0-17 11.5-28.5T540-600q17 0 28.5 11.5T580-560v80q0 17-11.5 28.5T540-440q-17 0-28.5-11.5ZM400-240q-134 0-227-93T80-560q0-134 93-227t227-93q134 0 227 93t93 227q0 56-17.5 106T653-363l199 199q11 11 11 28t-11 28q-11 11-28 11t-28-11L597-307q-41 32-91 49.5T400-240Z"></path></svg></span>Root cause:</span><span>Misunderstanding Astro's build output and static asset serving.</span></div></div></div><div class="dlm-pitfall-item"><div class="dlm-pitfall-header"><span class="dlm-pitfall-number">#<!-- -->3</span><span class="dlm-pitfall-title">Including HTML or JavaScript inside RSS item descriptions.</span></div><div class="dlm-pitfall-body"><div class="dlm-pitfall-wrong"><span class="dlm-pitfall-label"><span class="new-material-symbols icon-hw-20"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#EF4444"><path d="m480-433.33 124.67 124.66Q614.33-299 628-299q13.67 0 23.33-9.67Q661-318.33 661-332q0-13.67-9.67-23.33L526.67-480l124.66-124.67Q661-614.33 661-628q0-13.67-9.67-23.33Q641.67-661 628-661q-13.67 0-23.33 9.67L480-526.67 355.33-651.33Q345.67-661 332-661q-13.67 0-23.33 9.67Q299-641.67 299-628q0 13.67 9.67 23.33L433.33-480 308.67-355.33Q299-345.67 299-332q0 13.67 9.67 23.33Q318.33-299 332-299q13.67 0 23.33-9.67L480-433.33ZM480-80q-82.33 0-155.33-31.5-73-31.5-127.34-85.83Q143-251.67 111.5-324.67T80-480q0-83 31.5-156t85.83-127q54.34-54 127.34-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 82.33-31.5 155.33-31.5 73-85.5 127.34Q709-143 636-111.5T480-80Z"></path></svg></span>Wrong approach:</span><span><description><div>New post content</div><script>alert('Hi')</script></description></span></div><div class="dlm-pitfall-right"><span class="dlm-pitfall-label"><span class="new-material-symbols icon-hw-20"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#10B981"><path d="m422-395.33-94-94q-9.67-9.67-24-9.67t-24.67 10.33q-9.66 9.67-9.66 24 0 14.34 9.66 24l119.34 120q10 10 23.33 10 13.33 0 23.33-10L680-555.33q10.33-10.34 10.33-24.67 0-14.33-10.33-24.67-10.33-9.66-25-9.33-14.67.33-24.33 10L422-395.33ZM480-80q-82.33 0-155.33-31.5-73-31.5-127.34-85.83Q143-251.67 111.5-324.67T80-480q0-83 31.5-156t85.83-127q54.34-54 127.34-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 82.33-31.5 155.33-31.5 73-85.5 127.34Q709-143 636-111.5T480-80Z"></path></svg></span>Correct approach:</span><span><description>New post content summary without HTML or scripts</description></span></div><div class="dlm-pitfall-root"><span class="dlm-pitfall-label"><span class="new-material-symbols icon-hw-20"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#3B82F6"><path d="M400-320q100 0 170-70t70-170q0-100-70-170t-170-70q-100 0-170 70t-70 170q0 100 70 170t170 70Zm-28.5-131.5Q360-463 360-480v-200q0-17 11.5-28.5T400-720q17 0 28.5 11.5T440-680v200q0 17-11.5 28.5T400-440q-17 0-28.5-11.5Zm-140 0Q220-463 220-480v-120q0-17 11.5-28.5T260-640q17 0 28.5 11.5T300-600v120q0 17-11.5 28.5T260-440q-17 0-28.5-11.5Zm280 0Q500-463 500-480v-80q0-17 11.5-28.5T540-600q17 0 28.5 11.5T580-560v80q0 17-11.5 28.5T540-440q-17 0-28.5-11.5ZM400-240q-134 0-227-93T80-560q0-134 93-227t227-93q134 0 227 93t93 227q0 56-17.5 106T653-363l199 199q11 11 11 28t-11 28q-11 11-28 11t-28-11L597-307q-41 32-91 49.5T400-240Z"></path></svg></span>Root cause:</span><span>Confusing RSS XML with full HTML pages and ignoring feed reader limitations.</span></div></div></div></div></div></article><article class="content-card dlm-card"><div class="code-articles-card-header"><span class="card-icon summary"><span class="new-material-symbols icon-hw-24"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#10B981"><path d="M186.67-120q-27.5 0-47.09-19.58Q120-159.17 120-186.67v-586.66q0-27.5 19.58-47.09Q159.17-840 186.67-840h192.66q7.67-35.33 35.84-57.67Q443.33-920 480-920t64.83 22.33Q573-875.33 580.67-840h192.66q27.5 0 47.09 19.58Q840-800.83 840-773.33v586.66q0 27.5-19.58 47.09Q800.83-120 773.33-120H186.67Zm0-66.67h586.66v-586.66H186.67v586.66ZM313.33-280H522q14.17 0 23.75-9.62 9.58-9.61 9.58-23.83 0-14.22-9.58-23.72-9.58-9.5-23.75-9.5H313.33q-14.16 0-23.75 9.62-9.58 9.62-9.58 23.83 0 14.22 9.58 23.72 9.59 9.5 23.75 9.5Zm0-166.67h333.34q14.16 0 23.75-9.61 9.58-9.62 9.58-23.84 0-14.21-9.58-23.71-9.59-9.5-23.75-9.5H313.33q-14.16 0-23.75 9.61-9.58 9.62-9.58 23.84 0 14.21 9.58 23.71 9.59 9.5 23.75 9.5Zm0-166.66h333.34q14.16 0 23.75-9.62 9.58-9.62 9.58-23.83 0-14.22-9.58-23.72-9.59-9.5-23.75-9.5H313.33q-14.16 0-23.75 9.62-9.58 9.61-9.58 23.83 0 14.22 9.58 23.72 9.59 9.5 23.75 9.5ZM503.5-804.5q9.83-9.83 9.83-23.5t-9.83-23.5q-9.83-9.83-23.5-9.83t-23.5 9.83q-9.83 9.83-9.83 23.5t9.83 23.5q9.83 9.83 23.5 9.83t23.5-9.83ZM186.67-186.67v-586.66 586.66Z"></path></svg></span></span><span class="codefly-card-title">Key Takeaways</span></div><div class="code-articles-card-body"><div class="summary-list"><div class="summary-item"><span class="new-material-symbols icon-hw-26"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#10B981"><path d="m422-395.33-94-94q-9.67-9.67-24-9.67t-24.67 10.33q-9.66 9.67-9.66 24 0 14.34 9.66 24l119.34 120q10 10 23.33 10 13.33 0 23.33-10L680-555.33q10.33-10.34 10.33-24.67 0-14.33-10.33-24.67-10.33-9.66-25-9.33-14.67.33-24.33 10L422-395.33ZM480-80q-82.33 0-155.33-31.5-73-31.5-127.34-85.83Q143-251.67 111.5-324.67T80-480q0-83 31.5-156t85.83-127q54.34-54 127.34-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 82.33-31.5 155.33-31.5 73-85.5 127.34Q709-143 636-111.5T480-80Z"></path></svg></span><span class="summary-text">RSS feed generation creates a simple XML file listing your website's latest updates for easy subscription.</span></div><div class="summary-item"><span class="new-material-symbols icon-hw-26"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#10B981"><path d="m422-395.33-94-94q-9.67-9.67-24-9.67t-24.67 10.33q-9.66 9.67-9.66 24 0 14.34 9.66 24l119.34 120q10 10 23.33 10 13.33 0 23.33-10L680-555.33q10.33-10.34 10.33-24.67 0-14.33-10.33-24.67-10.33-9.66-25-9.33-14.67.33-24.33 10L422-395.33ZM480-80q-82.33 0-155.33-31.5-73-31.5-127.34-85.83Q143-251.67 111.5-324.67T80-480q0-83 31.5-156t85.83-127q54.34-54 127.34-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 82.33-31.5 155.33-31.5 73-85.5 127.34Q709-143 636-111.5T480-80Z"></path></svg></span><span class="summary-text">Astro generates RSS feeds at build time, producing static files served to users and apps.</span></div><div class="summary-item"><span class="new-material-symbols icon-hw-26"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#10B981"><path d="m422-395.33-94-94q-9.67-9.67-24-9.67t-24.67 10.33q-9.66 9.67-9.66 24 0 14.34 9.66 24l119.34 120q10 10 23.33 10 13.33 0 23.33-10L680-555.33q10.33-10.34 10.33-24.67 0-14.33-10.33-24.67-10.33-9.66-25-9.33-14.67.33-24.33 10L422-395.33ZM480-80q-82.33 0-155.33-31.5-73-31.5-127.34-85.83Q143-251.67 111.5-324.67T80-480q0-83 31.5-156t85.83-127q54.34-54 127.34-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 82.33-31.5 155.33-31.5 73-85.5 127.34Q709-143 636-111.5T480-80Z"></path></svg></span><span class="summary-text">Proper content selection and formatting ensure your RSS feed stays relevant and compatible.</span></div><div class="summary-item"><span class="new-material-symbols icon-hw-26"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#10B981"><path d="m422-395.33-94-94q-9.67-9.67-24-9.67t-24.67 10.33q-9.66 9.67-9.66 24 0 14.34 9.66 24l119.34 120q10 10 23.33 10 13.33 0 23.33-10L680-555.33q10.33-10.34 10.33-24.67 0-14.33-10.33-24.67-10.33-9.66-25-9.33-14.67.33-24.33 10L422-395.33ZM480-80q-82.33 0-155.33-31.5-73-31.5-127.34-85.83Q143-251.67 111.5-324.67T80-480q0-83 31.5-156t85.83-127q54.34-54 127.34-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 82.33-31.5 155.33-31.5 73-85.5 127.34Q709-143 636-111.5T480-80Z"></path></svg></span><span class="summary-text">Advanced RSS feeds can include media and metadata to enrich user experience and reach.</span></div><div class="summary-item"><span class="new-material-symbols icon-hw-26"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960" fill="#10B981"><path d="m422-395.33-94-94q-9.67-9.67-24-9.67t-24.67 10.33q-9.66 9.67-9.66 24 0 14.34 9.66 24l119.34 120q10 10 23.33 10 13.33 0 23.33-10L680-555.33q10.33-10.34 10.33-24.67 0-14.33-10.33-24.67-10.33-9.66-25-9.33-14.67.33-24.33 10L422-395.33ZM480-80q-82.33 0-155.33-31.5-73-31.5-127.34-85.83Q143-251.67 111.5-324.67T80-480q0-83 31.5-156t85.83-127q54.34-54 127.34-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 82.33-31.5 155.33-31.5 73-85.5 127.34Q709-143 636-111.5T480-80Z"></path></svg></span><span class="summary-text">Understanding RSS limitations and best practices helps avoid common mistakes and build professional feeds.</span></div></div></div></article></div><div><article class="content-card" id="practice"><div class="code-articles-card-header justify-content-between"><div class="d-flex align-items-center" style="gap:12px"><span class="card-icon nofill intro"><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="blue-icon-color site-fs-20" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M12 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0"></path><path d="M12 7a5 5 0 1 0 5 5"></path><path d="M13 3.055a9 9 0 1 0 7.941 7.945"></path><path d="M15 6v3h3l3 -3h-3v-3z"></path><path d="M15 9l-3 3"></path></svg></span><h2 class="codefly-card-title mb-0 pb-0">Practice</h2></div><span class="site-fs-15">(<!-- -->1<!-- -->/<!-- -->5<!-- -->)</span></div><div class="code-articles-card-body" data-theme="light"><div class=""><div class="mb-4"><div class="practice-content"><div class="text-pre-wrap dbd-txt-theme-intense pb-3">1<!-- -->. <!-- -->What is the main purpose of generating an RSS feed in an Astro project?</div></div><div class="question-pills-container " style="padding-top:unset"><span class="level-badge">easy</span></div></div><div class=""><div class="practice-options"><div class="practice-option-label" style="cursor:pointer"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" class="txt-dark-grey-color site-fs-18 me-2 me-md-3" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path fill="none" d="M0 0h24v24H0z"></path><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"></path></svg><span>A<!-- -->. <!-- -->To automatically share website updates with subscribers</span></div><div class="practice-option-label" style="cursor:pointer"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" class="txt-dark-grey-color site-fs-18 me-2 me-md-3" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path fill="none" d="M0 0h24v24H0z"></path><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"></path></svg><span>B<!-- -->. <!-- -->To improve website loading speed</span></div><div class="practice-option-label" style="cursor:pointer"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" class="txt-dark-grey-color site-fs-18 me-2 me-md-3" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path fill="none" d="M0 0h24v24H0z"></path><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"></path></svg><span>C<!-- -->. <!-- -->To add interactive animations to the site</span></div><div class="practice-option-label" style="cursor:pointer"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" class="txt-dark-grey-color site-fs-18 me-2 me-md-3" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path fill="none" d="M0 0h24v24H0z"></path><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"></path></svg><span>D<!-- -->. <!-- -->To create user login functionality</span></div></div><div class="py-3"><button class="site-btn" style="width:200px" disabled="">Verify</button></div></div><div class="py-2 d-none"><div class="practice-helper-btns-wrapper"></div><div class="practice-expanation-div "><div class="practice-expanation-div-body"><div class="practice-helper-content helper-solution-box"><h4 class="helper-solution-box-title">Solution</h4><div class="practice-helper-body"><ol><li><h4>Step 1: Understand RSS feed purpose</h4>RSS feeds are designed to share updates automatically with users or apps.</li><li><h4>Step 2: Match purpose with options</h4>Only To automatically share website updates with subscribers describes sharing updates automatically, which is the core use of RSS.</li><li><h4>Final Answer:</h4><strong>To automatically share website updates with subscribers</strong> -> Option A</li><li><h4>Quick Check:</h4>RSS feeds share updates = A [OK]</li></ol></div></div></div></div><div class="practice-expanation-div "><div class="practice-expanation-div-body"><div class="practice-helper-content helper-hint-box"><div class="practice-helper-body"><strong class="helper-hint-box-title">Hint: </strong>RSS feeds share updates automatically, not speed or animations [OK]</div></div></div></div><div class="practice-expanation-div "><div class="practice-expanation-div-body"><div class="practice-helper-content helper-mistakes-box"><div class="practice-helper-body"><strong class="helper-mistakes-box-title">Common Mistakes: </strong><ul class="ph-mistakes-list"><li class="ph-mistake-item mb-0">Confusing RSS with website speed optimization</li><li class="ph-mistake-item mb-0">Thinking RSS adds animations or login features</li><li class="ph-mistake-item mb-0">Assuming RSS is for styling or layout</li></ul></div></div></div></div></div></div><div class="d-none"><div class="mb-4"><div class="practice-content"><div class="text-pre-wrap dbd-txt-theme-intense pb-3">2<!-- -->. <!-- -->Which import statement correctly brings in the RSS helper from Astro's RSS package?</div></div><div class="question-pills-container " style="padding-top:unset"><span class="level-badge">easy</span></div></div><div class=""><div class="practice-options"><div class="practice-option-label" style="cursor:pointer"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" class="txt-dark-grey-color site-fs-18 me-2 me-md-3" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path fill="none" d="M0 0h24v24H0z"></path><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"></path></svg><span>A<!-- -->. <!-- -->import { rss } from '@astrojs/rss';</span></div><div class="practice-option-label" style="cursor:pointer"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" class="txt-dark-grey-color site-fs-18 me-2 me-md-3" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path fill="none" d="M0 0h24v24H0z"></path><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"></path></svg><span>B<!-- -->. <!-- -->import rss from 'astro/rss';</span></div><div class="practice-option-label" style="cursor:pointer"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" class="txt-dark-grey-color site-fs-18 me-2 me-md-3" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path fill="none" d="M0 0h24v24H0z"></path><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"></path></svg><span>C<!-- -->. <!-- -->import { createRSS } from '@astrojs/rss';</span></div><div class="practice-option-label" style="cursor:pointer"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" class="txt-dark-grey-color site-fs-18 me-2 me-md-3" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path fill="none" d="M0 0h24v24H0z"></path><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"></path></svg><span>D<!-- -->. <!-- -->import rssHelper from '@astro/rss';</span></div></div><div class="py-3"><button class="site-btn" style="width:200px" disabled="">Verify</button></div></div><div class="py-2 d-none"><div class="practice-helper-btns-wrapper"></div><div class="practice-expanation-div "><div class="practice-expanation-div-body"><div class="practice-helper-content helper-solution-box"><h4 class="helper-solution-box-title">Solution</h4><div class="practice-helper-body"><ol><li><h4>Step 1: Recall correct package and syntax</h4>The official package is '@astrojs/rss' and the helper is named 'rss'.</li><li><h4>Step 2: Match correct import syntax</h4>import { rss } from '@astrojs/rss'; uses correct named import from the correct package name.</li><li><h4>Final Answer:</h4><strong>import { rss } from '@astrojs/rss';</strong> -> Option A</li><li><h4>Quick Check:</h4>Correct package and named import = C [OK]</li></ol></div></div></div></div><div class="practice-expanation-div "><div class="practice-expanation-div-body"><div class="practice-helper-content helper-hint-box"><div class="practice-helper-body"><strong class="helper-hint-box-title">Hint: </strong>Use named import from '@astrojs/rss' exactly [OK]</div></div></div></div><div class="practice-expanation-div "><div class="practice-expanation-div-body"><div class="practice-helper-content helper-mistakes-box"><div class="practice-helper-body"><strong class="helper-mistakes-box-title">Common Mistakes: </strong><ul class="ph-mistakes-list"><li class="ph-mistake-item mb-0">Using default import instead of named import</li><li class="ph-mistake-item mb-0">Wrong package name like 'astro/rss'</li><li class="ph-mistake-item mb-0">Incorrect helper function name</li></ul></div></div></div></div></div></div><div class="d-none"><div class="mb-4"><div class="practice-content"><div class="text-pre-wrap dbd-txt-theme-intense pb-3">3<!-- -->. <!-- -->Given this Astro RSS feed code snippet, what will be the value of the first item's <code>link</code>? <pre>const posts = [ { title: 'Hello', date: '2024-01-01', description: 'Intro post', slug: 'hello' } ]; export const get = () => rss({ title: 'My Blog', site: 'https://example.com', items: posts.map(post => ({ title: post.title, pubDate: new Date(post.date), description: post.description, link: `/posts/${post.slug}` })) });</pre></div></div><div class="question-pills-container " style="padding-top:unset"><span class="level-badge">medium</span></div></div><div class=""><div class="practice-options"><div class="practice-option-label" style="cursor:pointer"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" class="txt-dark-grey-color site-fs-18 me-2 me-md-3" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path fill="none" d="M0 0h24v24H0z"></path><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"></path></svg><span>A<!-- -->. <!-- -->https://example.com/posts/hello</span></div><div class="practice-option-label" style="cursor:pointer"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" class="txt-dark-grey-color site-fs-18 me-2 me-md-3" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path fill="none" d="M0 0h24v24H0z"></path><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"></path></svg><span>B<!-- -->. <!-- -->/hello</span></div><div class="practice-option-label" style="cursor:pointer"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" class="txt-dark-grey-color site-fs-18 me-2 me-md-3" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path fill="none" d="M0 0h24v24H0z"></path><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"></path></svg><span>C<!-- -->. <!-- -->https://example.com/hello</span></div><div class="practice-option-label" style="cursor:pointer"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" class="txt-dark-grey-color site-fs-18 me-2 me-md-3" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path fill="none" d="M0 0h24v24H0z"></path><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"></path></svg><span>D<!-- -->. <!-- -->/posts/hello</span></div></div><div class="py-3"><button class="site-btn" style="width:200px" disabled="">Verify</button></div></div><div class="py-2 d-none"><div class="practice-helper-btns-wrapper"></div><div class="practice-expanation-div "><div class="practice-expanation-div-body"><div class="practice-helper-content helper-solution-box"><h4 class="helper-solution-box-title">Solution</h4><div class="practice-helper-body"><ol><li><h4>Step 1: Analyze link construction in map</h4>The link is created as `/posts/${post.slug}`, which results in '/posts/hello'.</li><li><h4>Step 2: Understand site prefix usage</h4>The 'site' URL is not concatenated in the link property, so link remains relative.</li><li><h4>Final Answer:</h4><strong>/posts/hello</strong> -> Option D</li><li><h4>Quick Check:</h4>Link uses relative path '/posts/hello' = B [OK]</li></ol></div></div></div></div><div class="practice-expanation-div "><div class="practice-expanation-div-body"><div class="practice-helper-content helper-hint-box"><div class="practice-helper-body"><strong class="helper-hint-box-title">Hint: </strong>Check if site URL is prepended; here it is not [OK]</div></div></div></div><div class="practice-expanation-div "><div class="practice-expanation-div-body"><div class="practice-helper-content helper-mistakes-box"><div class="practice-helper-body"><strong class="helper-mistakes-box-title">Common Mistakes: </strong><ul class="ph-mistakes-list"><li class="ph-mistake-item mb-0">Assuming link includes full site URL</li><li class="ph-mistake-item mb-0">Confusing slug placement in URL</li><li class="ph-mistake-item mb-0">Ignoring template literal syntax</li></ul></div></div></div></div></div></div><div class="d-none"><div class="mb-4"><div class="practice-content"><div class="text-pre-wrap dbd-txt-theme-intense pb-3">4<!-- -->. <!-- -->Identify the error in this Astro RSS feed generation code: <pre>import { rss } from '@astrojs/rss'; const posts = [ { title: 'Post 1', date: '2024-02-01', description: 'Desc', slug: 'post-1' } ]; export const get = () => rss({ title: 'Blog', site: 'https://blog.com', items: posts.map(post => ({ title: post.title, pubDate: post.date, description: post.description, link: `/blog/${post.slug}` })) });</pre></div></div><div class="question-pills-container " style="padding-top:unset"><span class="level-badge">medium</span></div></div><div class=""><div class="practice-options"><div class="practice-option-label" style="cursor:pointer"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" class="txt-dark-grey-color site-fs-18 me-2 me-md-3" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path fill="none" d="M0 0h24v24H0z"></path><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"></path></svg><span>A<!-- -->. <!-- -->The items array should be empty</span></div><div class="practice-option-label" style="cursor:pointer"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" class="txt-dark-grey-color site-fs-18 me-2 me-md-3" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path fill="none" d="M0 0h24v24H0z"></path><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"></path></svg><span>B<!-- -->. <!-- -->Missing import statement for rss</span></div><div class="practice-option-label" style="cursor:pointer"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" class="txt-dark-grey-color site-fs-18 me-2 me-md-3" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path fill="none" d="M0 0h24v24H0z"></path><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"></path></svg><span>C<!-- -->. <!-- -->pubDate should be a Date object, not a string</span></div><div class="practice-option-label" style="cursor:pointer"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" class="txt-dark-grey-color site-fs-18 me-2 me-md-3" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path fill="none" d="M0 0h24v24H0z"></path><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"></path></svg><span>D<!-- -->. <!-- -->The link property must be an absolute URL</span></div></div><div class="py-3"><button class="site-btn" style="width:200px" disabled="">Verify</button></div></div><div class="py-2 d-none"><div class="practice-helper-btns-wrapper"></div><div class="practice-expanation-div "><div class="practice-expanation-div-body"><div class="practice-helper-content helper-solution-box"><h4 class="helper-solution-box-title">Solution</h4><div class="practice-helper-body"><ol><li><h4>Step 1: Check pubDate type requirement</h4>The rss helper expects pubDate as a Date object, but here it's a string.</li><li><h4>Step 2: Verify other code parts</h4>Import is correct, items array is valid, and link can be relative, so no other errors.</li><li><h4>Final Answer:</h4><strong>pubDate should be a Date object, not a string</strong> -> Option C</li><li><h4>Quick Check:</h4>pubDate must be Date object = A [OK]</li></ol></div></div></div></div><div class="practice-expanation-div "><div class="practice-expanation-div-body"><div class="practice-helper-content helper-hint-box"><div class="practice-helper-body"><strong class="helper-hint-box-title">Hint: </strong>Convert date strings to Date objects for pubDate [OK]</div></div></div></div><div class="practice-expanation-div "><div class="practice-expanation-div-body"><div class="practice-helper-content helper-mistakes-box"><div class="practice-helper-body"><strong class="helper-mistakes-box-title">Common Mistakes: </strong><ul class="ph-mistakes-list"><li class="ph-mistake-item mb-0">Leaving pubDate as string causes feed errors</li><li class="ph-mistake-item mb-0">Thinking link must be absolute URL</li><li class="ph-mistake-item mb-0">Forgetting to import rss helper</li></ul></div></div></div></div></div></div><div class="d-none"><div class="mb-4"><div class="practice-content"><div class="text-pre-wrap dbd-txt-theme-intense pb-3">5<!-- -->. <!-- -->You want to generate an RSS feed in Astro that only includes posts published after January 1, 2024. Which code snippet correctly filters the posts before generating the feed? <pre>const posts = [ { title: 'Old Post', date: '2023-12-31', slug: 'old' }, { title: 'New Post', date: '2024-01-02', slug: 'new' } ]; export const get = () => rss({ title: 'Filtered Blog', site: 'https://filtered.com', items: posts .filter(post => ??? ) .map(post => ({ title: post.title, pubDate: new Date(post.date), link: `/posts/${post.slug}` })) });</pre> What should replace <code>???</code> to filter correctly?</div></div><div class="question-pills-container " style="padding-top:unset"><span class="level-badge">hard</span></div></div><div class=""><div class="practice-options"><div class="practice-option-label" style="cursor:pointer"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" class="txt-dark-grey-color site-fs-18 me-2 me-md-3" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path fill="none" d="M0 0h24v24H0z"></path><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"></path></svg><span>A<!-- -->. <!-- -->new Date(post.date) > new Date('2024-01-03')</span></div><div class="practice-option-label" style="cursor:pointer"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" class="txt-dark-grey-color site-fs-18 me-2 me-md-3" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path fill="none" d="M0 0h24v24H0z"></path><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"></path></svg><span>B<!-- -->. <!-- -->new Date(post.date) >= new Date('2024-01-02')</span></div><div class="practice-option-label" style="cursor:pointer"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" class="txt-dark-grey-color site-fs-18 me-2 me-md-3" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path fill="none" d="M0 0h24v24H0z"></path><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"></path></svg><span>C<!-- -->. <!-- -->post.date >= '2024-01-03'</span></div><div class="practice-option-label" style="cursor:pointer"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" class="txt-dark-grey-color site-fs-18 me-2 me-md-3" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path fill="none" d="M0 0h24v24H0z"></path><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"></path></svg><span>D<!-- -->. <!-- -->post.date > '2024-01-03'</span></div></div><div class="py-3"><button class="site-btn" style="width:200px" disabled="">Verify</button></div></div><div class="py-2 d-none"><div class="practice-helper-btns-wrapper"></div><div class="practice-expanation-div "><div class="practice-expanation-div-body"><div class="practice-helper-content helper-solution-box"><h4 class="helper-solution-box-title">Solution</h4><div class="practice-helper-body"><ol><li><h4>Step 1: Understand date filtering logic</h4>We want posts published after January 1, 2024, so dates on or after 2024-01-02.</li><li><h4>Step 2: Compare dates as Date objects</h4>Comparing strings can be unreliable; converting to Date objects ensures correct comparison.</li><li><h4>Step 3: Choose correct comparison operator</h4>Using '>=' with new Date('2024-01-02') includes posts from that date onward.</li><li><h4>Final Answer:</h4><strong>new Date(post.date) >= new Date('2024-01-02')</strong> -> Option B</li><li><h4>Quick Check:</h4>Date objects with >= for filtering = D [OK]</li></ol></div></div></div></div><div class="practice-expanation-div "><div class="practice-expanation-div-body"><div class="practice-helper-content helper-hint-box"><div class="practice-helper-body"><strong class="helper-hint-box-title">Hint: </strong>Always compare dates as Date objects, not strings [OK]</div></div></div></div><div class="practice-expanation-div "><div class="practice-expanation-div-body"><div class="practice-helper-content helper-mistakes-box"><div class="practice-helper-body"><strong class="helper-mistakes-box-title">Common Mistakes: </strong><ul class="ph-mistakes-list"><li class="ph-mistake-item mb-0">Comparing date strings directly leads to errors</li><li class="ph-mistake-item mb-0">Using wrong comparison operator excludes needed posts</li><li class="ph-mistake-item mb-0">Filtering with incorrect date boundary</li></ul></div></div></div></div></div></div><div class="d-flex align-items-center justify-content-between mt-4"><button class="secondary-site-btn" disabled=""><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" aria-hidden="true" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" d="M15 19l-7-7 7-7"></path></svg> Previous</button><div class="practice-question-toggles-wrapper"><button class="practice-question-toggle-btn active ">1</button><button class="practice-question-toggle-btn ">2</button><button class="practice-question-toggle-btn ">3</button><button class="practice-question-toggle-btn ">4</button><button class="practice-question-toggle-btn ">5</button></div><button class="secondary-site-btn">Next <svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" aria-hidden="true" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"></path></svg></button></div></div></article></div><div id="mock" class="mtc-wrapper"><div class="mtc-card-container"><div class="mtc-card pulse-effect"><span class="mtc-recommended-badge">Recommended</span><div class="mtc-icon-wrap"><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" color="#fff" style="color:#fff" height="24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="M12 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0"></path><path d="M12 7a5 5 0 1 0 5 5"></path><path d="M13 3.055a9 9 0 1 0 7.941 7.945"></path><path d="M15 6v3h3l3 -3h-3v-3z"></path><path d="M15 9l-3 3"></path></svg></div><h4 class="mtc-heading">Ready to prove it?</h4><p class="mtc-sub">Pass the test and this pattern moves <span class="mtc-state-pill">unknown</span> <svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="48" d="m268 112 144 144-144 144m124-144H100"></path></svg> <span class="mtc-state-pill good">strong</span> <span class="d-inline-block">while earning <span class="weight-800">+1 Grip</span></span> toward your certificate.</p><div class="mtc-pills"><span class="mtc-pill"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><line x1="8" y1="6" x2="21" y2="6"></line><line x1="8" y1="12" x2="21" y2="12"></line><line x1="8" y1="18" x2="21" y2="18"></line><line x1="3" y1="6" x2="3.01" y2="6"></line><line x1="3" y1="12" x2="3.01" y2="12"></line><line x1="3" y1="18" x2="3.01" y2="18"></line></svg>10 questions</span><span class="mtc-pill"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" height="13" width="13" xmlns="http://www.w3.org/2000/svg"><path d="M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm61.8-104.4l-84.9-61.7c-3.1-2.3-4.9-5.9-4.9-9.7V116c0-6.6 5.4-12 12-12h32c6.6 0 12 5.4 12 12v141.7l66.8 48.6c5.4 3.9 6.5 11.4 2.6 16.8L334.6 349c-3.9 5.3-11.4 6.5-16.8 2.6z"></path></svg>~5 min</span><span class="mtc-pill"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="22 12 18 12 15 21 9 3 6 12 2 12"></polyline></svg>easy <svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="48" d="m268 112 144 144-144 144m124-144H100"></path></svg> hard</span></div><div class="mtc-cta-wrap"><button type="button" class="mtc-cta-btn">Take the Test <svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="48" d="m268 112 144 144-144 144m124-144H100"></path></svg></button></div></div></div></div></div></main><div class="rpi-float-wrap"><button type="button" class="rpi-float-btn" aria-label="Report an issue"><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M4 15s1-1 4-1 5 2 8 2 4-1 4-1V3s-1 1-4 1-5-2-8-2-4 1-4 1z"></path><line x1="4" y1="22" x2="4" y2="15"></line></svg><span class="rpi-float-label">Report Issue</span></button></div></div><div style="display:none"><div id="ad-management-config-settings" data-blocklist-all="1"></div></div> <script src="/_next/static/chunks/webpack-28170116499ad51b.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0]);self.__next_f.push([2,null])</script><script>self.__next_f.push([1,"1:HL[\"/_next/static/css/d071dca61fbb01bf.css\",\"style\"]\n2:HL[\"/_next/static/css/907864b6faf28c32.css\",\"style\"]\n3:HL[\"/_next/static/css/ada9a246b4e9c7f9.css\",\"style\"]\n4:HL[\"/_next/static/css/725c7861d1898ba8.css\",\"style\"]\n5:HL[\"/_next/static/css/a97525600f39e233.css\",\"style\"]\n6:HL[\"/_next/static/css/989afc350a4b3a28.css\",\"style\"]\n7:HL[\"/_next/static/css/ccfdf35169bd162c.css\",\"style\"]\n8:HL[\"/_next/static/css/417e7aee3e688b57.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"9:I[95751,[],\"\"]\nc:I[39275,[],\"\"]\n12:I[61343,[],\"\"]\n13:I[84080,[\"8726\",\"static/chunks/8726-fd60949e252ac8d1.js\",\"3185\",\"static/chunks/app/layout-e2ef1005801dc1ed.js\"],\"\"]\n14:I[88726,[\"8726\",\"static/chunks/8726-fd60949e252ac8d1.js\",\"3185\",\"static/chunks/app/layout-e2ef1005801dc1ed.js\"],\"Toaster\"]\n15:I[20154,[\"8422\",\"static/chunks/66ec4792-3d3220126f3e74ee.js\",\"6950\",\"static/chunks/f8025e75-5dd99dd1a689ea97.js\",\"6795\",\"static/chunks/6795-1b544390b9b7cb09.js\",\"5214\",\"static/chunks/5214-cc3a3a8017cc6e4d.js\",\"7078\",\"static/chunks/7078-09556dce22020d83.js\",\"3154\",\"static/chunks/3154-0aa2f15561902c10.js\",\"7562\",\"static/chunks/7562-b71a43604fd32292.js\",\"4481\",\"static/chunks/4481-14671e1e3d1ffff7.js\",\"4662\",\"static/chunks/4662-205abea99f9b3adf.js\",\"9160\",\"static/chunks/app/not-found-b9aad74520590312.js\"],\"default\"]\n16:I[78598,[\"8726\",\"static/chunks/8726-fd60949e252ac8d1.js\",\"3185\",\"static/chunks/app/layout-e2ef1005801dc1ed.js\"],\"default\"]\n17:I[56192,[\"8726\",\"static/chunks/8726-fd60949e252ac8d1.js\",\"3185\",\"static/chunks/app/layout-e2ef1005801dc1ed.js\"],\"default\"]\n19:I[76130,[],\"\"]\nd:[\"lang\",\"en\",\"d\"]\ne:[\"subject\",\"astro\",\"d\"]\nf:[\"part\",\"part-3\",\"d\"]\n10:[\"pattern\",\"astro-rss-feed-generation\",\"d\"]\n11:[\"mode\",\"deep\",\"oc\"]\n1a:[]\n"])</script><script>self.__next_f.push([1,"0:[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/d071dca61fbb01bf.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/907864b6faf28c32.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}]],[\"$\",\"$L9\",null,{\"buildId\":\"leyaa-prod-build-id\",\"assetPrefix\":\"\",\"initialCanonicalUrl\":\"/en/codefly/learn/astro/part-3/astro-rss-feed-generation/deep\",\"initialTree\":[\"\",{\"children\":[[\"lang\",\"en\",\"d\"],{\"children\":[\"codefly\",{\"children\":[\"learn\",{\"children\":[[\"subject\",\"astro\",\"d\"],{\"children\":[[\"part\",\"part-3\",\"d\"],{\"children\":[[\"pattern\",\"astro-rss-feed-generation\",\"d\"],{\"children\":[[\"mode\",\"deep\",\"oc\"],{\"children\":[\"__PAGE__\",{}]}]}]}]}]}]}]}]},\"$undefined\",\"$undefined\",true],\"initialSeedData\":[\"\",{\"children\":[[\"lang\",\"en\",\"d\"],{\"children\":[\"codefly\",{\"children\":[\"learn\",{\"children\":[[\"subject\",\"astro\",\"d\"],{\"children\":[[\"part\",\"part-3\",\"d\"],{\"children\":[[\"pattern\",\"astro-rss-feed-generation\",\"d\"],{\"children\":[[\"mode\",\"deep\",\"oc\"],{\"children\":[\"__PAGE__\",{},[[\"$La\",\"$Lb\"],null],null]},[\"$\",\"$Lc\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"$d\",\"children\",\"codefly\",\"children\",\"learn\",\"children\",\"$e\",\"children\",\"$f\",\"children\",\"$10\",\"children\",\"$11\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L12\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\",\"styles\":[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/ada9a246b4e9c7f9.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/725c7861d1898ba8.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"link\",\"2\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/a97525600f39e233.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"link\",\"3\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/989afc350a4b3a28.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"link\",\"4\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/ccfdf35169bd162c.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"link\",\"5\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/417e7aee3e688b57.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}]]}],null]},[\"$\",\"$Lc\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"$d\",\"children\",\"codefly\",\"children\",\"learn\",\"children\",\"$e\",\"children\",\"$f\",\"children\",\"$10\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L12\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\",\"styles\":null}],null]},[\"$\",\"$Lc\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"$d\",\"children\",\"codefly\",\"children\",\"learn\",\"children\",\"$e\",\"children\",\"$f\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L12\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\",\"styles\":null}],null]},[\"$\",\"$Lc\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"$d\",\"children\",\"codefly\",\"children\",\"learn\",\"children\",\"$e\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L12\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\",\"styles\":null}],null]},[\"$\",\"$Lc\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"$d\",\"children\",\"codefly\",\"children\",\"learn\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L12\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\",\"styles\":null}],null]},[\"$\",\"$Lc\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"$d\",\"children\",\"codefly\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L12\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\",\"styles\":null}],null]},[\"$\",\"$Lc\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"$d\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L12\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\",\"styles\":null}],null]},[[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"meta\",null,{\"name\":\"theme-color\",\"content\":\"#5f56fe\"}],[\"$\",\"meta\",null,{\"name\":\"msapplication-TileColor\",\"content\":\"#5f56fe\"}],[\"$\",\"$L13\",null,{\"src\":\"https://www.googletagmanager.com/gtag/js?id=G-N2NY2DMMDW\",\"strategy\":\"afterInteractive\"}],[\"$\",\"$L13\",null,{\"id\":\"google-analytics\",\"strategy\":\"afterInteractive\",\"children\":\"\\n window.dataLayer = window.dataLayer || [];\\n function gtag(){dataLayer.push(arguments);}\\n gtag('js', new Date());\\n gtag('config', 'G-N2NY2DMMDW', {\\n page_path: window.location.pathname,\\n });\\n \"}],[\"$\",\"script\",null,{\"async\":true,\"src\":\"https://www.googletagmanager.com/gtag/js?id=AW-18214378714\"}],[\"$\",\"$L13\",null,{\"children\":\"\\n window.dataLayer = window.dataLayer || [];\\n function gtag() {\\n dataLayer.push(arguments);\\n }\\n gtag('js', new Date());\\n gtag('config', 'AW-18214378714');\\n \"}],[\"$\",\"script\",null,{\"data-grow-initializer\":\"\",\"suppressHydrationWarning\":true,\"dangerouslySetInnerHTML\":{\"__html\":\"!(function(){window.growMe||((window.growMe=function(e){window.growMe._.push(e);}),(window.growMe._=[]));var e=document.createElement(\\\"script\\\");(e.type=\\\"text/javascript\\\"),(e.src=\\\"https://faves.grow.me/main.js\\\"),(e.defer=!0),e.setAttribute(\\\"data-grow-faves-site-id\\\",\\\"U2l0ZTo0MGIxZDBlZC0wNzdlLTQ0NjgtOThmOC1kNDYyZGMwM2IwMWY=\\\");var t=document.getElementsByTagName(\\\"script\\\")[0];t.parentNode.insertBefore(e,t);})();\"}}],[\"$\",\"$L13\",null,{\"src\":\"//scripts.scriptwrapper.com/tags/40b1d0ed-077e-4468-98f8-d462dc03b01f.js\",\"strategy\":\"afterInteractive\",\"data-noptimize\":\"1\",\"data-cfasync\":\"false\"}],[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"suppressHydrationWarning\":true,\"dangerouslySetInnerHTML\":{\"__html\":\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"WebApplication\\\",\\\"name\\\":\\\"Leyaa.ai\\\",\\\"description\\\":\\\"Leyaa.ai builds learning intelligence that understands how you learn - guiding what to study, how to practice, and when to move forward.\\\",\\\"url\\\":\\\"https://leyaa.ai\\\",\\\"applicationCategory\\\":\\\"EducationalApplication\\\",\\\"operatingSystem\\\":\\\"Web\\\",\\\"offers\\\":{\\\"@type\\\":\\\"Offer\\\",\\\"price\\\":\\\"0\\\",\\\"priceCurrency\\\":\\\"USD\\\"},\\\"creator\\\":{\\\"@type\\\":\\\"Organization\\\",\\\"name\\\":\\\"Leyaa.ai\\\"}}\"}}],[\"$\",\"$L13\",null,{\"id\":\"clarity-script\",\"strategy\":\"afterInteractive\",\"dangerouslySetInnerHTML\":{\"__html\":\"\\n (function(c,l,a,r,i,t,y){\\n c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)};\\n t=l.createElement(r);t.async=1;t.src=\\\"https://www.clarity.ms/tag/\\\"+i;\\n y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y);\\n })(window, document, \\\"clarity\\\", \\\"script\\\", \\\"w4gxh6rdmh\\\");\\n \"}}]]}],[\"$\",\"body\",null,{\"children\":[[\"$\",\"$L14\",null,{\"containerStyle\":{\"top\":70}}],[\"$\",\"$Lc\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L12\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[\"$\",\"$L15\",null,{}],\"notFoundStyles\":[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/a97525600f39e233.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}]],\"styles\":null}],[\"$\",\"$L16\",null,{}],\" \",[\"$\",\"$L17\",null,{}]]}]]}],null],null],\"couldBeIntercepted\":false,\"initialHead\":[false,\"$L18\"],\"globalErrorComponent\":\"$19\",\"missingSlots\":\"$W1a\"}]]\n"])</script><script>self.__next_f.push([1,"18:[[\"$\",\"meta\",\"0\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"1\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"2\",{\"children\":\"RSS feed generation in Astro - Deep Dive: Internals \u0026 How It Works | Leyaa.ai\"}],[\"$\",\"meta\",\"3\",{\"name\":\"description\",\"content\":\"Go deep on RSS feed generation in Astro. Internals, mental models, under-the-hood mechanics, misconceptions, common pitfalls, and production patterns. For serious learners.\"}],[\"$\",\"meta\",\"4\",{\"name\":\"author\",\"content\":\"Leyaa.ai\"}],[\"$\",\"link\",\"5\",{\"rel\":\"manifest\",\"href\":\"/manifest.json\",\"crossOrigin\":\"use-credentials\"}],[\"$\",\"meta\",\"6\",{\"name\":\"keywords\",\"content\":\"learning intelligence,AI learning,personalized learning,adaptive learning,study guide,exam preparation,learning platform,education technology,edtech,smart learning\"}],[\"$\",\"meta\",\"7\",{\"name\":\"creator\",\"content\":\"Leyaa.ai\"}],[\"$\",\"meta\",\"8\",{\"name\":\"publisher\",\"content\":\"Leyaa.ai\"}],[\"$\",\"meta\",\"9\",{\"name\":\"robots\",\"content\":\"index, follow\"}],[\"$\",\"meta\",\"10\",{\"name\":\"googlebot\",\"content\":\"index, follow, max-image-preview:large, max-snippet:-1\"}],[\"$\",\"meta\",\"11\",{\"name\":\"mobile-web-app-capable\",\"content\":\"yes\"}],[\"$\",\"meta\",\"12\",{\"name\":\"content-language\",\"content\":\"en\"}],[\"$\",\"link\",\"13\",{\"rel\":\"canonical\",\"href\":\"https://leyaa.ai/codefly/learn/astro/part-3/astro-rss-feed-generation/deep\"}],[\"$\",\"link\",\"14\",{\"rel\":\"alternate\",\"hrefLang\":\"en\",\"href\":\"https://leyaa.ai/codefly/learn/astro/part-3/astro-rss-feed-generation/deep\"}],[\"$\",\"link\",\"15\",{\"rel\":\"alternate\",\"hrefLang\":\"x-default\",\"href\":\"https://leyaa.ai/codefly/learn/astro/part-3/astro-rss-feed-generation/deep\"}],[\"$\",\"meta\",\"16\",{\"name\":\"apple-mobile-web-app-capable\",\"content\":\"yes\"}],[\"$\",\"meta\",\"17\",{\"name\":\"apple-mobile-web-app-title\",\"content\":\"Leyaa\"}],[\"$\",\"meta\",\"18\",{\"name\":\"apple-mobile-web-app-status-bar-style\",\"content\":\"default\"}],[\"$\",\"meta\",\"19\",{\"property\":\"og:title\",\"content\":\"RSS feed generation in Astro - Deep Dive: Internals \u0026 How It Works | Leyaa.ai\"}],[\"$\",\"meta\",\"20\",{\"property\":\"og:description\",\"content\":\"Go deep on RSS feed generation in Astro. Internals, mental models, under-the-hood mechanics, misconceptions, common pitfalls, and production patterns. For serious learners.\"}],[\"$\",\"meta\",\"21\",{\"property\":\"og:url\",\"content\":\"https://leyaa.ai/codefly/learn/astro/part-3/astro-rss-feed-generation/deep\"}],[\"$\",\"meta\",\"22\",{\"property\":\"og:locale\",\"content\":\"en_US\"}],[\"$\",\"meta\",\"23\",{\"property\":\"og:image\",\"content\":\"https://leyaa.ai/Assets/metaImages/leyaa-preview-image.png\"}],[\"$\",\"meta\",\"24\",{\"property\":\"og:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"25\",{\"property\":\"og:image:height\",\"content\":\"630\"}],[\"$\",\"meta\",\"26\",{\"property\":\"og:image:alt\",\"content\":\"RSS feed generation in Astro - Deep Dive: Internals \u0026 How It Works\"}],[\"$\",\"meta\",\"27\",{\"property\":\"og:type\",\"content\":\"article\"}],[\"$\",\"meta\",\"28\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"29\",{\"name\":\"twitter:site\",\"content\":\"@leyaaai\"}],[\"$\",\"meta\",\"30\",{\"name\":\"twitter:creator\",\"content\":\"@leyaaai\"}],[\"$\",\"meta\",\"31\",{\"name\":\"twitter:title\",\"content\":\"RSS feed generation in Astro - Deep Dive: Internals \u0026 How It Works | Leyaa.ai\"}],[\"$\",\"meta\",\"32\",{\"name\":\"twitter:description\",\"content\":\"Go deep on RSS feed generation in Astro. Internals, mental models, under-the-hood mechanics, misconceptions, common pitfalls, and production patterns. For serious learners.\"}],[\"$\",\"meta\",\"33\",{\"name\":\"twitter:image\",\"content\":\"https://leyaa.ai/Assets/metaImages/leyaa-preview-image.png\"}],[\"$\",\"link\",\"34\",{\"rel\":\"icon\",\"href\":\"/leyaa-logo.png\"}],[\"$\",\"link\",\"35\",{\"rel\":\"apple-touch-icon\",\"href\":\"https://leyaa.ai/Assets/Favicons/apple-touch-icon.png\"}],[\"$\",\"meta\",\"36\",{\"name\":\"next-size-adjust\"}]]\n"])</script><script>self.__next_f.push([1,"a:null\n"])</script><script>self.__next_f.push([1,"1b:I[43489,[\"8422\",\"static/chunks/66ec4792-3d3220126f3e74ee.js\",\"6950\",\"static/chunks/f8025e75-5dd99dd1a689ea97.js\",\"6051\",\"static/chunks/795d4814-8b40e2eae05948ca.js\",\"5706\",\"static/chunks/9c4e2130-0ef90d15550fcb15.js\",\"522\",\"static/chunks/94730671-fd9628eddbd5107b.js\",\"7699\",\"static/chunks/8e1d74a4-d3c1e3cfb4eeea98.js\",\"7240\",\"static/chunks/53c13509-a3e4ac0640ae03f2.js\",\"9956\",\"static/chunks/ee560e2c-27ba7a66c659fa82.js\",\"2516\",\"static/chunks/f7333993-31ab72eb9b202e3d.js\",\"1779\",\"static/chunks/0e762574-cee3ec2351d97ca0.js\",\"6795\",\"static/chunks/6795-1b544390b9b7cb09.js\",\"5214\",\"static/chunks/5214-cc3a3a8017cc6e4d.js\",\"7078\",\"static/chunks/7078-09556dce22020d83.js\",\"4889\",\"static/chunks/4889-de8d1c4f2ff2f134.js\",\"8726\",\"static/chunks/8726-fd60949e252ac8d1.js\",\"7534\",\"static/chunks/7534-02c906a11e681445.js\",\"4220\",\"static/chunks/4220-e3c1264f6e3453a7.js\",\"7562\",\"static/chunks/7562-b71a43604fd32292.js\",\"4481\",\"static/chunks/4481-14671e1e3d1ffff7.js\",\"6857\",\"static/chunks/6857-f9121be732678b30.js\",\"2202\",\"static/chunks/2202-dad5d33fadc7ea73.js\",\"1786\",\"static/chunks/1786-7253d5c3df8362c5.js\",\"7029\",\"static/chunks/app/%5Blang%5D/codefly/learn/%5Bsubject%5D/%5Bpart%5D/%5Bpattern%5D/%5B%5B...mode%5D%5D/page-b11550cd55444a64.js\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"b:[[[\"$\",\"script\",\"0\",{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"LearningResource\\\",\\\"name\\\":\\\"RSS feed generation in Astro - Deep Dive\\\",\\\"description\\\":\\\"Go deep on RSS feed generation in Astro. Internals, mental models, under-the-hood mechanics, misconceptions, common pitfalls, and production patterns. For serious learners.\\\",\\\"url\\\":\\\"https://leyaa.ai/codefly/learn/astro/part-3/astro-rss-feed-generation\\\",\\\"learningResourceType\\\":\\\"Tutorial\\\",\\\"programmingLanguage\\\":\\\"Astro\\\",\\\"inLanguage\\\":\\\"en\\\",\\\"isAccessibleForFree\\\":true,\\\"teaches\\\":\\\"RSS feed generation in Astro - Deep Dive\\\",\\\"provider\\\":{\\\"@type\\\":\\\"Organization\\\",\\\"url\\\":\\\"https://leyaa.ai\\\"},\\\"educationalLevel\\\":\\\"Beginner to Advanced\\\",\\\"breadcrumb\\\":{\\\"@type\\\":\\\"BreadcrumbList\\\",\\\"itemListElement\\\":[{\\\"@type\\\":\\\"ListItem\\\",\\\"position\\\":1,\\\"name\\\":\\\"Home\\\",\\\"item\\\":\\\"https://leyaa.ai\\\"},{\\\"@type\\\":\\\"ListItem\\\",\\\"position\\\":2,\\\"name\\\":\\\"RSS feed generation in Astro - Deep Dive\\\",\\\"item\\\":\\\"https://leyaa.ai/codefly/learn/astro/part-3/astro-rss-feed-generation\\\"}]}}\"}}]],[\"$\",\"$L1b\",null,{\"subject\":\"astro\",\"dbSubject\":\"astro\",\"part\":\"part-3\",\"pattern\":\"astro_rss_feed_generation\",\"modeSlug\":\"deep\",\"lang\":\"en\",\"internalLinks\":[{\"code\":\"LMC\",\"slug\":\"\",\"label\":\"📖 Learn\",\"href\":\"/codefly/learn/astro/part-3/astro-rss-feed-generation\",\"active\":false},{\"code\":\"LMCWHY\",\"slug\":\"why\",\"label\":\"💡 Why Learn This\",\"href\":\"/codefly/learn/astro/part-3/astro-rss-feed-generation/why\",\"active\":false},{\"code\":\"DLM\",\"slug\":\"deep\",\"label\":\"💡 Deep Learn Mode\",\"href\":\"/codefly/learn/astro/part-3/astro-rss-feed-generation/deep\",\"active\":true},{\"code\":\"TMC\",\"slug\":\"try\",\"label\":\"✏️ Try It\",\"href\":\"/codefly/learn/astro/part-3/astro-rss-feed-generation/try\",\"active\":false},{\"code\":\"VMC\",\"slug\":\"visualize\",\"label\":\"👁 Visualize\",\"href\":\"/codefly/learn/astro/part-3/astro-rss-feed-generation/visualize\",\"active\":false},{\"code\":\"TCM\",\"slug\":\"complexity\",\"label\":\"⏱ Complexity\",\"href\":\"/codefly/learn/astro/part-3/astro-rss-feed-generation/complexity\",\"active\":false},{\"code\":\"CMC\",\"slug\":\"challenge\",\"label\":\"🏆 Challenge\",\"href\":\"/codefly/learn/astro/part-3/astro-rss-feed-generation/challenge\",\"active\":false},{\"code\":\"PMC\",\"slug\":\"project\",\"label\":\"📁 Project\",\"href\":\"/codefly/learn/astro/part-3/astro-rss-feed-generation/project\",\"active\":false},{\"code\":\"RMC\",\"slug\":\"review\",\"label\":\"🧠 Quick Review\",\"href\":\"/codefly/learn/astro/part-3/astro-rss-feed-generation/review\",\"active\":false}],\"isLoggedIn\":false,\"seoH1\":\"RSS feed generation in Astro - Deep Dive\",\"contentData\":{\"pattern_id\":\"astro_rss_feed_generation\",\"metadata\":{\"slot_map\":{\"LMCWHY\":\"LMCWHY\",\"LMC\":\"LMC\",\"TMC\":\"TMC\",\"CMC\":\"CMC\",\"RMC\":\"RMC\",\"VMC\":\"VMC\",\"TCM\":\"WPM\",\"PMC\":\"PMC\",\"DLM\":\"DLM\"}},\"modes\":{\"DLM\":{\"topic\":\"RSS feed generation\",\"mode\":\"DLM_v1\",\"language\":\"astro\",\"content_type\":\"Frameworks \u0026 Libraries\",\"overview\":{\"what\":\"RSS feed generation is the process of creating a special file that lists updates from a website in a simple format. This file allows people or apps to get new content automatically without visiting the site. In Astro, you can build this file using your website's data and templates. It helps share your latest posts or news easily with others.\",\"why_it_matters\":\"Without RSS feeds, users would have to check websites manually for updates, which is slow and inefficient. RSS feeds let people subscribe and get new content delivered automatically, saving time and keeping them informed. For website owners, RSS feeds help reach a wider audience and keep readers engaged without extra effort.\",\"where_it_fits\":\"Before learning RSS feed generation in Astro, you should understand basic Astro components and how to fetch or organize your website content. After mastering RSS feeds, you can explore advanced content syndication, podcast feeds, or integrating feeds with other platforms like newsletters or social media.\"},\"mental_model\":{\"core_idea\":\"RSS feed generation is like creating a simple, organized list of your website's latest updates that others can subscribe to and read automatically.\",\"analogy\":\"Imagine a newspaper delivery service that sends you only the headlines and summaries of new articles every morning, so you don't have to visit the newsstand daily. RSS feeds work the same way for websites.\",\"visual\":\"Website Content ──\u003e RSS Generator ──\u003e RSS XML File ──\u003e User's RSS Reader\\n\\n┌───────────────┐ ┌───────────────┐ ┌───────────────┐ ┌───────────────┐\\n│ Website Posts │ ──▶ │ RSS Feed Code │ ──▶ │ RSS XML File │ ──▶ │ RSS Reader App│\\n└───────────────┘ └───────────────┘ └───────────────┘ └───────────────┘\"},\"build_up\":[{\"level\":\"foundation\",\"title\":\"Understanding RSS Feed Basics\",\"concept\":\"Learn what an RSS feed is and why websites use it.\",\"content\":\"RSS stands for Really Simple Syndication. It is a file, usually in XML format, that lists recent updates from a website. This file includes titles, links, and summaries of new content. RSS readers or apps use this file to show users the latest posts without visiting the website.\",\"result\":\"You understand that RSS is a simple list of updates in a special format that helps users get new content automatically.\",\"insight\":\"Knowing what RSS is and its purpose helps you see why generating this file is useful for websites and users alike.\"},{\"level\":\"foundation\",\"title\":\"Basics of Astro Project Structure\",\"concept\":\"Learn how Astro organizes files and how to add new files for RSS.\",\"content\":\"Astro projects have a folder structure with pages, components, and public assets. To generate an RSS feed, you create a special file that runs at build time to gather your posts and output the RSS XML file. This file usually lives in the 'src/pages' or 'src/utils' folder.\",\"result\":\"You know where to place your RSS generation code in an Astro project and how it fits into the build process.\",\"insight\":\"Understanding Astro's structure is key to integrating RSS feed generation smoothly into your site.\"},{\"level\":\"intermediate\",\"title\":\"Fetching Content for RSS Feed\",\"self_check\":\"Before reading on: Do you think RSS feeds require all website content or only recent updates? Commit to your answer.\",\"concept\":\"Learn how to select and prepare the content that will appear in the RSS feed.\",\"content\":\"Usually, RSS feeds include only recent posts or updates. In Astro, you fetch your posts from markdown files, a CMS, or APIs. You then extract necessary data like title, date, summary, and URL. This data forms the items in your RSS feed.\",\"result\":\"You can gather and prepare the right content to include in your RSS feed.\",\"insight\":\"Knowing how to filter and format content ensures your RSS feed stays relevant and useful to subscribers.\"},{\"level\":\"intermediate\",\"title\":\"Creating RSS XML with Astro\",\"self_check\":\"Before reading on: Do you think RSS XML is generated manually or with helper libraries? Commit to your answer.\",\"concept\":\"Learn how to build the RSS XML file using Astro's build-time features and optional libraries.\",\"content\":\"You can write code in Astro that runs during build to create an XML string following RSS format. Libraries like 'rss' or 'feed' can help build this XML easily. The XML includes channel info (site title, link) and items (posts). You save this XML as 'rss.xml' in the public folder.\",\"result\":\"You generate a valid RSS XML file that lists your site's recent posts.\",\"insight\":\"Understanding how to produce correct XML ensures your feed works with all RSS readers.\"},{\"level\":\"advanced\",\"title\":\"Automating RSS Feed Updates\",\"self_check\":\"Before reading on: Do you think RSS feeds update automatically or need manual regeneration? Commit to your answer.\",\"concept\":\"Learn how to automate RSS feed generation so it updates whenever your site content changes.\",\"content\":\"In Astro, RSS feed generation happens at build time. When you add or update posts, rebuilding the site regenerates the RSS feed automatically. You can also set up continuous deployment to rebuild your site on content changes, keeping the feed fresh without manual work.\",\"result\":\"Your RSS feed always reflects the latest content without extra effort.\",\"insight\":\"Knowing how build-time generation works helps you maintain accurate feeds effortlessly.\"},{\"level\":\"expert\",\"title\":\"Optimizing and Extending RSS Feeds\",\"self_check\":\"Before reading on: Can RSS feeds include media like images or podcasts? Commit to your answer.\",\"concept\":\"Explore advanced RSS features like adding images, categories, or podcast enclosures to enrich your feed.\",\"content\":\"RSS supports extra tags like \u003cenclosure\u003e for audio files, \u003ccategory\u003e for topics, and \u003cimage\u003e for feed icons. You can extend your Astro RSS generator to include these for richer feeds. Also, consider feed validation tools to ensure compatibility. Optimizing feed size and caching improves performance for large sites.\",\"result\":\"You create powerful, feature-rich RSS feeds that serve diverse content types and audiences.\",\"insight\":\"Understanding RSS extensions and optimization techniques lets you build professional-grade feeds that stand out.\"}],\"under_the_hood\":{\"mechanism\":\"RSS feed generation in Astro happens during the build process. Astro runs your code that gathers content data, formats it into XML following RSS standards, and writes this XML file to the public directory. This file is then served as a static asset. RSS readers fetch this XML file regularly to check for updates. The XML structure uses specific tags like \u003cchannel\u003e, \u003citem\u003e, \u003ctitle\u003e, and \u003clink\u003e to organize information.\",\"why_designed_this_way\":\"RSS was designed as a simple, standardized XML format to allow easy sharing of website updates across different platforms and readers. Astro generates RSS feeds at build time to keep the process fast and static, avoiding runtime overhead. This design fits static site generation well, ensuring feeds are always in sync with site content without extra server logic.\",\"diagram\":\"┌───────────────┐ ┌───────────────┐ ┌───────────────┐ ┌───────────────┐\\n│ Content Files │ ───▶ │ Astro Build │ ───▶ │ RSS XML File │ ───▶ │ Public Folder │\\n└───────────────┘ └───────────────┘ └───────────────┘ └───────────────┘\\n\\nRSS Readers fetch the RSS XML file from the Public Folder to display updates.\"},\"misconceptions\":[{\"self_check\":\"Quick: Do you think RSS feeds update live on the website without rebuilding? Commit to yes or no.\",\"belief\":\"RSS feeds update instantly whenever new content is added to the website.\",\"reality\":\"RSS feeds generated by Astro update only when the site is rebuilt, not live in real-time.\",\"why_it_matters\":\"Expecting live updates can cause confusion if subscribers don't see new posts until after a rebuild.\"},{\"self_check\":\"Quick: Do you think RSS feeds can include full website styling and scripts? Commit to yes or no.\",\"belief\":\"RSS feeds can include the full look and interactive features of a website.\",\"reality\":\"RSS feeds are simple XML files without styling or scripts; they only contain text and links.\",\"why_it_matters\":\"Trying to add styling or scripts to RSS can break feed readers and reduce compatibility.\"},{\"self_check\":\"Quick: Do you think RSS feeds are obsolete and unused today? Commit to yes or no.\",\"belief\":\"RSS feeds are outdated and no one uses them anymore.\",\"reality\":\"RSS is still widely used for blogs, podcasts, and news to deliver content efficiently.\",\"why_it_matters\":\"Ignoring RSS means missing out on a large audience who prefer automatic content delivery.\"},{\"self_check\":\"Quick: Can RSS feeds include multimedia like podcasts easily? Commit to yes or no.\",\"belief\":\"RSS feeds cannot handle media files like audio or video.\",\"reality\":\"RSS supports media through tags like \u003cenclosure\u003e, making it ideal for podcasts.\",\"why_it_matters\":\"Knowing this allows creators to use RSS for rich media distribution, expanding their reach.\"}],\"expert_zone\":{\"nuances\":[\"RSS feed items must have unique GUIDs to prevent duplicate entries in readers, a detail often overlooked.\",\"The order of items in the RSS feed matters; most readers expect newest items first for correct display.\",\"Including optional tags like \u003cpubDate\u003e and \u003cdescription\u003e improves feed compatibility and user experience.\"],\"when_not_to_use\":\"RSS feeds are not suitable when you need real-time push notifications or highly interactive content. Alternatives like WebSockets, server-sent events, or APIs with JSON are better for live updates and rich interactions.\",\"production_patterns\":\"In production, RSS feeds are often generated automatically during CI/CD pipelines after content updates. They include metadata for SEO and analytics tracking. Some sites generate multiple feeds for categories or languages. Validation tools are integrated to ensure feed correctness before deployment.\"},\"connections\":[{\"to_concept\":\"Static Site Generation\",\"relationship\":\"RSS feed generation builds on static site generation by producing static XML files during build.\",\"insight\":\"Understanding static site generation helps grasp why RSS feeds are generated at build time and served as static assets.\"},{\"to_concept\":\"Content Syndication\",\"relationship\":\"RSS is a form of content syndication, distributing updates across platforms.\",\"insight\":\"Knowing content syndication concepts clarifies how RSS feeds help share content beyond the original website.\"},{\"to_concept\":\"Library Cataloging Systems\",\"relationship\":\"Both RSS feeds and library catalogs organize and share information systematically for easy access.\",\"insight\":\"Seeing RSS as a digital catalog helps understand its role in organizing website updates for readers.\"}],\"pitfalls\":[{\"mistake\":\"Generating RSS feed without unique identifiers for items.\",\"incorrect_approach\":\"items.push({ title: post.title, link: post.url }); // Missing unique GUID\",\"correct_approach\":\"items.push({ title: post.title, link: post.url, guid: post.id }); // Unique GUID included\",\"root_cause\":\"Not knowing that RSS readers use GUIDs to track items and avoid duplicates.\"},{\"mistake\":\"Placing RSS XML file inside source folders instead of public folder.\",\"incorrect_approach\":\"Writing rss.xml inside 'src/pages' so it is not served as a static file.\",\"correct_approach\":\"Writing rss.xml inside 'public/' folder so it is accessible at '/rss.xml'.\",\"root_cause\":\"Misunderstanding Astro's build output and static asset serving.\"},{\"mistake\":\"Including HTML or JavaScript inside RSS item descriptions.\",\"incorrect_approach\":\"\u003cdescription\u003e\u003cdiv\u003eNew post content\u003c/div\u003e\u003cscript\u003ealert('Hi')\u003c/script\u003e\u003c/description\u003e\",\"correct_approach\":\"\u003cdescription\u003eNew post content summary without HTML or scripts\u003c/description\u003e\",\"root_cause\":\"Confusing RSS XML with full HTML pages and ignoring feed reader limitations.\"}],\"key_takeaways\":[\"RSS feed generation creates a simple XML file listing your website's latest updates for easy subscription.\",\"Astro generates RSS feeds at build time, producing static files served to users and apps.\",\"Proper content selection and formatting ensure your RSS feed stays relevant and compatible.\",\"Advanced RSS feeds can include media and metadata to enrich user experience and reach.\",\"Understanding RSS limitations and best practices helps avoid common mistakes and build professional feeds.\"],\"metadata\":{\"version\":\"1.0\",\"content_type\":\"framework\",\"estimated_time_minutes\":15,\"depth_level\":\"comprehensive\",\"difficulty_ceiling\":\"expert\"}}},\"subject\":\"astro\",\"title\":\"RSS feed generation\",\"puzzleDetails\":[{\"_id\":\"69b1785045baa2b58545ec8f\",\"question_number\":1,\"question\":\"What is the main purpose of generating an RSS feed in an Astro project?\",\"options\":{\"A\":\"To automatically share website updates with subscribers\",\"B\":\"To improve website loading speed\",\"C\":\"To add interactive animations to the site\",\"D\":\"To create user login functionality\"},\"correct_answer\":[\"A\"],\"solution_explanation\":\"\u003cdiv class='solution-box'\u003e\u003cspan class='solution-label'\u003e\u003cstrong\u003eSolution:\u003c/strong\u003e\u003c/span\u003e\u003col\u003e\u003cli\u003e\u003ch4\u003eStep 1: Understand RSS feed purpose\u003c/h4\u003eRSS feeds are designed to share updates automatically with users or apps.\u003c/li\u003e\u003cli\u003e\u003ch4\u003eStep 2: Match purpose with options\u003c/h4\u003eOnly To automatically share website updates with subscribers describes sharing updates automatically, which is the core use of RSS.\u003c/li\u003e\u003cli\u003e\u003ch4\u003eFinal Answer:\u003c/h4\u003e\u003cstrong\u003eTo automatically share website updates with subscribers\u003c/strong\u003e -\u003e Option A\u003c/li\u003e\u003cli\u003e\u003ch4\u003eQuick Check:\u003c/h4\u003eRSS feeds share updates = A [OK]\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\",\"quick_trick\":\"RSS feeds share updates automatically, not speed or animations [OK]\",\"common_mistakes\":[\"Confusing RSS with website speed optimization\",\"Thinking RSS adds animations or login features\",\"Assuming RSS is for styling or layout\"],\"subject\":\"astro\",\"pattern\":\"RSS feed generation\",\"category\":\"Frameworks \u0026 Libraries\",\"question_format\":\"MCQ\",\"question_mode\":\"conceptual\",\"difficulty\":\"easy\",\"topic\":\"Performance and SEO\",\"type\":\"Frameworks \u0026 Libraries\",\"question_type\":\"conceptual\",\"level\":\"easy\",\"test_type\":\"puzzle\",\"pattern_id\":\"astro_rss_feed_generation\",\"subjectTitle\":\"Astro\",\"part\":\"part-3\",\"set_no\":1,\"usage_count\":0,\"topic_id\":\"astro_p3_t4\"},{\"_id\":\"69b1785045baa2b58545ec90\",\"question_number\":2,\"question\":\"Which import statement correctly brings in the RSS helper from Astro's RSS package?\",\"options\":{\"A\":\"import { rss } from '@astrojs/rss';\",\"B\":\"import rss from 'astro/rss';\",\"C\":\"import { createRSS } from '@astrojs/rss';\",\"D\":\"import rssHelper from '@astro/rss';\"},\"correct_answer\":[\"A\"],\"solution_explanation\":\"\u003cdiv class='solution-box'\u003e\u003cspan class='solution-label'\u003e\u003cstrong\u003eSolution:\u003c/strong\u003e\u003c/span\u003e\u003col\u003e\u003cli\u003e\u003ch4\u003eStep 1: Recall correct package and syntax\u003c/h4\u003eThe official package is '@astrojs/rss' and the helper is named 'rss'.\u003c/li\u003e\u003cli\u003e\u003ch4\u003eStep 2: Match correct import syntax\u003c/h4\u003eimport { rss } from '@astrojs/rss'; uses correct named import from the correct package name.\u003c/li\u003e\u003cli\u003e\u003ch4\u003eFinal Answer:\u003c/h4\u003e\u003cstrong\u003eimport { rss } from '@astrojs/rss';\u003c/strong\u003e -\u003e Option A\u003c/li\u003e\u003cli\u003e\u003ch4\u003eQuick Check:\u003c/h4\u003eCorrect package and named import = C [OK]\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\",\"quick_trick\":\"Use named import from '@astrojs/rss' exactly [OK]\",\"common_mistakes\":[\"Using default import instead of named import\",\"Wrong package name like 'astro/rss'\",\"Incorrect helper function name\"],\"subject\":\"astro\",\"pattern\":\"RSS feed generation\",\"category\":\"Frameworks \u0026 Libraries\",\"question_format\":\"MCQ\",\"question_mode\":\"syntax\",\"difficulty\":\"easy\",\"topic\":\"Performance and SEO\",\"type\":\"Frameworks \u0026 Libraries\",\"question_type\":\"syntax\",\"level\":\"easy\",\"test_type\":\"puzzle\",\"pattern_id\":\"astro_rss_feed_generation\",\"subjectTitle\":\"Astro\",\"part\":\"part-3\",\"set_no\":1,\"usage_count\":0,\"topic_id\":\"astro_p3_t4\"},{\"_id\":\"69b1785045baa2b58545ec91\",\"question_number\":3,\"question\":\"Given this Astro RSS feed code snippet, what will be the value of the first item's \u003ccode\u003elink\u003c/code\u003e?\\n\u003cpre\u003econst posts = [\\n { title: 'Hello', date: '2024-01-01', description: 'Intro post', slug: 'hello' }\\n];\\n\\nexport const get = () =\u003e rss({\\n title: 'My Blog',\\n site: 'https://example.com',\\n items: posts.map(post =\u003e ({\\n title: post.title,\\n pubDate: new Date(post.date),\\n description: post.description,\\n link: `/posts/${post.slug}`\\n }))\\n});\u003c/pre\u003e\",\"options\":{\"A\":\"https://example.com/posts/hello\",\"B\":\"/hello\",\"C\":\"https://example.com/hello\",\"D\":\"/posts/hello\"},\"correct_answer\":[\"D\"],\"solution_explanation\":\"\u003cdiv class='solution-box'\u003e\u003cspan class='solution-label'\u003e\u003cstrong\u003eSolution:\u003c/strong\u003e\u003c/span\u003e\u003col\u003e\u003cli\u003e\u003ch4\u003eStep 1: Analyze link construction in map\u003c/h4\u003eThe link is created as `/posts/${post.slug}`, which results in '/posts/hello'.\u003c/li\u003e\u003cli\u003e\u003ch4\u003eStep 2: Understand site prefix usage\u003c/h4\u003eThe 'site' URL is not concatenated in the link property, so link remains relative.\u003c/li\u003e\u003cli\u003e\u003ch4\u003eFinal Answer:\u003c/h4\u003e\u003cstrong\u003e/posts/hello\u003c/strong\u003e -\u003e Option D\u003c/li\u003e\u003cli\u003e\u003ch4\u003eQuick Check:\u003c/h4\u003eLink uses relative path '/posts/hello' = B [OK]\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\",\"quick_trick\":\"Check if site URL is prepended; here it is not [OK]\",\"common_mistakes\":[\"Assuming link includes full site URL\",\"Confusing slug placement in URL\",\"Ignoring template literal syntax\"],\"subject\":\"astro\",\"pattern\":\"RSS feed generation\",\"category\":\"Frameworks \u0026 Libraries\",\"question_format\":\"MCQ\",\"question_mode\":\"component_behavior\",\"difficulty\":\"medium\",\"topic\":\"Performance and SEO\",\"type\":\"Frameworks \u0026 Libraries\",\"question_type\":\"component_behavior\",\"level\":\"medium\",\"test_type\":\"puzzle\",\"pattern_id\":\"astro_rss_feed_generation\",\"subjectTitle\":\"Astro\",\"part\":\"part-3\",\"set_no\":1,\"usage_count\":0,\"topic_id\":\"astro_p3_t4\"},{\"_id\":\"69b1785045baa2b58545ec92\",\"question_number\":4,\"question\":\"Identify the error in this Astro RSS feed generation code:\\n\u003cpre\u003eimport { rss } from '@astrojs/rss';\\n\\nconst posts = [\\n { title: 'Post 1', date: '2024-02-01', description: 'Desc', slug: 'post-1' }\\n];\\n\\nexport const get = () =\u003e rss({\\n title: 'Blog',\\n site: 'https://blog.com',\\n items: posts.map(post =\u003e ({\\n title: post.title,\\n pubDate: post.date,\\n description: post.description,\\n link: `/blog/${post.slug}`\\n }))\\n});\u003c/pre\u003e\",\"options\":{\"A\":\"The items array should be empty\",\"B\":\"Missing import statement for rss\",\"C\":\"pubDate should be a Date object, not a string\",\"D\":\"The link property must be an absolute URL\"},\"correct_answer\":[\"C\"],\"solution_explanation\":\"\u003cdiv class='solution-box'\u003e\u003cspan class='solution-label'\u003e\u003cstrong\u003eSolution:\u003c/strong\u003e\u003c/span\u003e\u003col\u003e\u003cli\u003e\u003ch4\u003eStep 1: Check pubDate type requirement\u003c/h4\u003eThe rss helper expects pubDate as a Date object, but here it's a string.\u003c/li\u003e\u003cli\u003e\u003ch4\u003eStep 2: Verify other code parts\u003c/h4\u003eImport is correct, items array is valid, and link can be relative, so no other errors.\u003c/li\u003e\u003cli\u003e\u003ch4\u003eFinal Answer:\u003c/h4\u003e\u003cstrong\u003epubDate should be a Date object, not a string\u003c/strong\u003e -\u003e Option C\u003c/li\u003e\u003cli\u003e\u003ch4\u003eQuick Check:\u003c/h4\u003epubDate must be Date object = A [OK]\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\",\"quick_trick\":\"Convert date strings to Date objects for pubDate [OK]\",\"common_mistakes\":[\"Leaving pubDate as string causes feed errors\",\"Thinking link must be absolute URL\",\"Forgetting to import rss helper\"],\"subject\":\"astro\",\"pattern\":\"RSS feed generation\",\"category\":\"Frameworks \u0026 Libraries\",\"question_format\":\"MCQ\",\"question_mode\":\"debug\",\"difficulty\":\"medium\",\"topic\":\"Performance and SEO\",\"type\":\"Frameworks \u0026 Libraries\",\"question_type\":\"debug\",\"level\":\"medium\",\"test_type\":\"puzzle\",\"pattern_id\":\"astro_rss_feed_generation\",\"subjectTitle\":\"Astro\",\"part\":\"part-3\",\"set_no\":1,\"usage_count\":0,\"topic_id\":\"astro_p3_t4\"},{\"_id\":\"69b1785045baa2b58545ec93\",\"question_number\":5,\"question\":\"You want to generate an RSS feed in Astro that only includes posts published after January 1, 2024. Which code snippet correctly filters the posts before generating the feed?\\n\u003cpre\u003econst posts = [\\n { title: 'Old Post', date: '2023-12-31', slug: 'old' },\\n { title: 'New Post', date: '2024-01-02', slug: 'new' }\\n];\\n\\nexport const get = () =\u003e rss({\\n title: 'Filtered Blog',\\n site: 'https://filtered.com',\\n items: posts\\n .filter(post =\u003e ??? )\\n .map(post =\u003e ({\\n title: post.title,\\n pubDate: new Date(post.date),\\n link: `/posts/${post.slug}`\\n }))\\n});\u003c/pre\u003e\\nWhat should replace \u003ccode\u003e???\u003c/code\u003e to filter correctly?\",\"options\":{\"A\":\"new Date(post.date) \u003e new Date('2024-01-03')\",\"B\":\"new Date(post.date) \u003e= new Date('2024-01-02')\",\"C\":\"post.date \u003e= '2024-01-03'\",\"D\":\"post.date \u003e '2024-01-03'\"},\"correct_answer\":[\"B\"],\"solution_explanation\":\"\u003cdiv class='solution-box'\u003e\u003cspan class='solution-label'\u003e\u003cstrong\u003eSolution:\u003c/strong\u003e\u003c/span\u003e\u003col\u003e\u003cli\u003e\u003ch4\u003eStep 1: Understand date filtering logic\u003c/h4\u003eWe want posts published after January 1, 2024, so dates on or after 2024-01-02.\u003c/li\u003e\u003cli\u003e\u003ch4\u003eStep 2: Compare dates as Date objects\u003c/h4\u003eComparing strings can be unreliable; converting to Date objects ensures correct comparison.\u003c/li\u003e\u003cli\u003e\u003ch4\u003eStep 3: Choose correct comparison operator\u003c/h4\u003eUsing '\u003e=' with new Date('2024-01-02') includes posts from that date onward.\u003c/li\u003e\u003cli\u003e\u003ch4\u003eFinal Answer:\u003c/h4\u003e\u003cstrong\u003enew Date(post.date) \u003e= new Date('2024-01-02')\u003c/strong\u003e -\u003e Option B\u003c/li\u003e\u003cli\u003e\u003ch4\u003eQuick Check:\u003c/h4\u003eDate objects with \u003e= for filtering = D [OK]\u003c/li\u003e\u003c/ol\u003e\u003c/div\u003e\",\"quick_trick\":\"Always compare dates as Date objects, not strings [OK]\",\"common_mistakes\":[\"Comparing date strings directly leads to errors\",\"Using wrong comparison operator excludes needed posts\",\"Filtering with incorrect date boundary\"],\"subject\":\"astro\",\"pattern\":\"RSS feed generation\",\"category\":\"Frameworks \u0026 Libraries\",\"question_format\":\"MCQ\",\"question_mode\":\"state_output\",\"difficulty\":\"hard\",\"topic\":\"Performance and SEO\",\"type\":\"Frameworks \u0026 Libraries\",\"question_type\":\"state_output\",\"level\":\"hard\",\"test_type\":\"puzzle\",\"pattern_id\":\"astro_rss_feed_generation\",\"subjectTitle\":\"Astro\",\"part\":\"part-3\",\"set_no\":1,\"usage_count\":0,\"topic_id\":\"astro_p3_t4\"}]},\"syllabusData\":{\"part\":\"part-3\",\"subject\":\"astro\",\"difficulty\":\"advanced\",\"metadata\":{\"total_topics\":4,\"total_patterns\":25,\"patterns_with_content\":25,\"created_at\":\"2026-02-28T20:25:56.627389Z\",\"version\":\"4.2\",\"upload_tool\":\"upload_to_mongo.py v2.0\"},\"part_title\":\"SSR and Deployment\",\"subjectTitle\":\"Astro\",\"topics\":[{\"topic_id\":\"astro_p3_t1\",\"title\":\"Server-Side Rendering\",\"order\":1,\"pattern_count\":6,\"patterns\":[{\"pattern_id\":\"astro_why_ssr_enables_dynamic_content\",\"title\":\"Why SSR enables dynamic content\",\"order\":1,\"has_content\":true},{\"pattern_id\":\"astro_enabling_ssr_in_astro\",\"title\":\"Enabling SSR in Astro\",\"order\":2,\"has_content\":true},{\"pattern_id\":\"astro_server_endpoints_api_routes\",\"title\":\"Server endpoints (API routes)\",\"order\":3,\"has_content\":true},{\"pattern_id\":\"astro_hybrid_rendering_static_server\",\"title\":\"Hybrid rendering (static + server)\",\"order\":4,\"has_content\":true},{\"pattern_id\":\"astro_request_and_response_handling\",\"title\":\"Request and response handling\",\"order\":5,\"has_content\":true},{\"pattern_id\":\"astro_middleware_for_authentication\",\"title\":\"Middleware for authentication\",\"order\":6,\"has_content\":true}]},{\"topic_id\":\"astro_p3_t2\",\"title\":\"Authentication Patterns\",\"order\":2,\"pattern_count\":6,\"patterns\":[{\"pattern_id\":\"astro_why_authentication_needs_serverside_logic\",\"title\":\"Why authentication needs server-side logic\",\"order\":1,\"has_content\":true},{\"pattern_id\":\"astro_cookiebased_session_management\",\"title\":\"Cookie-based session management\",\"order\":2,\"has_content\":true},{\"pattern_id\":\"astro_jwt_authentication_flow\",\"title\":\"JWT authentication flow\",\"order\":3,\"has_content\":true},{\"pattern_id\":\"astro_oauth_integration\",\"title\":\"OAuth integration\",\"order\":4,\"has_content\":true},{\"pattern_id\":\"astro_protected_routes_and_middleware\",\"title\":\"Protected routes and middleware\",\"order\":5,\"has_content\":true},{\"pattern_id\":\"astro_user_context_in_components\",\"title\":\"User context in components\",\"order\":6,\"has_content\":true}]},{\"topic_id\":\"astro_p3_t3\",\"title\":\"Deployment\",\"order\":3,\"pattern_count\":6,\"patterns\":[{\"pattern_id\":\"astro_why_deployment_target_affects_architecture\",\"title\":\"Why deployment target affects architecture\",\"order\":1,\"has_content\":true},{\"pattern_id\":\"astro_deploying_to_vercel\",\"title\":\"Deploying to Vercel\",\"order\":2,\"has_content\":true},{\"pattern_id\":\"astro_deploying_to_netlify\",\"title\":\"Deploying to Netlify\",\"order\":3,\"has_content\":true},{\"pattern_id\":\"astro_deploying_to_cloudflare_pages\",\"title\":\"Deploying to Cloudflare Pages\",\"order\":4,\"has_content\":true},{\"pattern_id\":\"astro_nodejs_adapter_for_selfhosting\",\"title\":\"Node.js adapter for self-hosting\",\"order\":5,\"has_content\":true},{\"pattern_id\":\"astro_docker_deployment\",\"title\":\"Docker deployment\",\"order\":6,\"has_content\":true}]},{\"topic_id\":\"astro_p3_t4\",\"title\":\"Performance and SEO\",\"order\":4,\"pattern_count\":7,\"patterns\":[{\"pattern_id\":\"astro_why_astro_excels_at_performance\",\"title\":\"Why Astro excels at performance\",\"order\":1,\"has_content\":true},{\"pattern_id\":\"astro_view_transitions_api\",\"title\":\"View transitions API\",\"order\":2,\"has_content\":true},{\"pattern_id\":\"astro_prefetching_and_preloading\",\"title\":\"Prefetching and preloading\",\"order\":3,\"has_content\":true},{\"pattern_id\":\"astro_sitemap_generation\",\"title\":\"Sitemap generation\",\"order\":4,\"has_content\":true},{\"pattern_id\":\"astro_rss_feed_generation\",\"title\":\"RSS feed generation\",\"order\":5,\"has_content\":true},{\"pattern_id\":\"astro_open_graph_and_social_metadata\",\"title\":\"Open Graph and social metadata\",\"order\":6,\"has_content\":true},{\"pattern_id\":\"astro_performance_auditing_with_lighthouse\",\"title\":\"Performance auditing with Lighthouse\",\"order\":7,\"has_content\":true}]}]},\"modeCode\":\"DLM\",\"productId\":\"codefly\"}]]\n"])</script></body></html>