Skip to content
Development

A per-project RSS feed for Deep Cut Atlas's launch-follow CTA

By Victor Da Luz
astrorssdev-logsite

The Deep Cut Atlas marketing page had exactly one call to action: “Follow along in the dev log.” That was fine when there was nothing to announce, but the app is in App Store review right now, and that CTA doesn’t tell anyone how they’d actually hear about launch day. A UI/UX review caught it directly - a sold visitor has no way to know when this thing ships.

The obvious fix is an App Store badge, except there’s no listing to link to yet. So the real fix for today is smaller: give people a way to subscribe to exactly that announcement, without standing up a mailing list.

The dev log already has a project-filtered view - /blog/project/deep-cut-atlas - built on a shared @vdaluz/astro-blog package this site pulls in as a pinned tarball dependency. What it didn’t have was an RSS feed scoped the same way. The site’s existing feed is one firehose for every post across every project.

Before writing anything, I checked whether the shared package already supported this, since it’s used by two sites and I didn’t want to bolt on something app-specific if there was a cleaner shared answer. Turns out buildRssItems() is already filter-agnostic on purpose - it just maps whatever array of posts you hand it into RSS items, and leaves the actual filtering to the app, same as the existing HTML route does with filterPostsByTag(). So the “feature” here was really just composing two functions that already existed, in a new file:

const posts = filterPostsByTag(await getLocalizedPosts('en'), project).sort(...)
return rss({ items: buildRssItems(posts), ... })

No package version bump, no new exports. The route itself uses getStaticPaths to prerender one static XML file per project slug, same pattern as the paginated HTML listing next to it.

The CTA copy took more thought than the code did. “Subscribe” undersells it and “get updates” is vague - what actually matters to a visitor is one specific future post. Landed on “Get the launch post by RSS,” styled as an outline button next to the existing filled dev-log link, so it reads as a second, more specific option rather than competing with the primary CTA.

Verified the feed with the dev server directly - curl against /blog/project/deep-cut-atlas/rss.xml - and confirmed the other three project feeds (Greenhouse, blog-manager, and the site’s own “site” tag) returned different, correctly-scoped item counts. Small feature, but a nice reminder that the best code to ship is sometimes composing what’s already there instead of adding to it.

Related reading

Development

The CTA that pointed at the wrong dev log

The only call to action on the Deep Cut Atlas page linked to the whole unfiltered blog - a link that worked, returned 200, and quietly sent everyone to the wrong place for weeks.

Read