← gitpulse
Merged
Size
XL
Change Breakdown
New Feature70%
Bug Fix15%
Tests10%
Maintenance5%
#7feat(releases) phase C: frontend — Special Edition cards, list, detail

Release editions surface on homepage feed and /releases/ pages

GitHub releases are now displayed as Special Edition cards on the homepage feed — grouped by publish date and positioned above PR features — with dedicated /releases/ list and detail pages including auto-generated Open Graph images and SEO structured data.

GitHub releases can now appear on the gitpulse homepage as Special Edition cards. When a release is tagged, it surfaces in the homepage feed grouped by publish date, positioned above the PR features for that day. The homepage already shows when releases are absent — a "No editions yet" state appears until the first tag exists.

A new /releases/ page lists all releases with a hero card, standard cards, and a compact grid for earlier editions. Individual release detail pages at /releases/<tag>/<slug>/ display a full hero banner, a stat bar showing PR count and contributor count, top stories, and a changelog linking to the stories included in the release.

Each release detail page has an auto-generated Open Graph image (1200×630) that shows the release name, tag, prerelease badge, PR count, contributor count, and formatted date. Structured JSON-LD data (NewsArticle schema for individual releases, CollectionPage + ItemList for the index) is injected so search engines understand the content.

The sitemap was extended to include the releases index and all individual release URLs. New SEO metadata functions (buildReleaseMetadata and buildReleasesListMetadata) handle titles, descriptions, and canonical URLs.

Components were ported from another codebase (gitsky) and adapted for single-repo mode — dropping multi-owner/repo chips, image URLs, and highlight counts that don't apply here. The changelog component receives pre-resolved Story objects rather than IDs, looking them up against the on-disk story set.

A static-export workaround handles the empty state: when no releases exist, generateStaticParams returns a sentinel entry that produces a 404 page, keeping the route valid until the first real release appears. Several bugfixes from review were included — UTC-pinned date formatting, proper URL encoding consistency across route layers, and canonical URL enforcement that prevents duplicate content under alternate slugs.

Tests cover URL building, date formatting, line counting, and day grouping. The test suite now has 94 passing checks.