trails/openspec/changes/changelog/tasks.md
Ullrich Schäfer 18e68bb176 Add public changelog with Atom feed and What's New indicator
- Changelog entries authored as markdown files in apps/journal/changelog/
  with YAML frontmatter, loaded via Vite import.meta.glob at build time
- /changelog list page with date, title, and preview
- /changelog/:slug detail page with full markdown rendering (react-markdown)
  and Open Graph meta tags for social sharing
- /changelog/feed.xml Atom feed with auto-discovery <link> tags
- "What's New" dot on nav bar using localStorage timestamp tracking
- Notification toggle: users can permanently disable/re-enable the indicator
- i18n strings for en and de
- Initial changelog entry covering the Phase 1 launch

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 13:49:52 +02:00

2 KiB

1. Changelog Data Layer

  • 1.1 Create apps/journal/changelog/ directory with a sample entry (2026-03-25.md) covering the initial launch
  • 1.2 Set up Vite import.meta.glob to load all .md files from the changelog directory with frontmatter parsing
  • 1.3 Create apps/journal/app/lib/changelog.server.ts with functions: getAllEntries(), getEntry(date) returning parsed markdown + frontmatter

2. Routes

  • 2.1 Add /changelog route showing all entries (date, title, preview) newest-first
  • 2.2 Add /changelog/:date route rendering full markdown entry
  • 2.3 Add Open Graph meta tags on entry pages (og:title, og:description, og:url)
  • 2.4 Add both routes to routes.ts

3. RSS/Atom Feed

  • 3.1 Add /changelog/feed.xml route that returns an Atom feed (application/atom+xml) with all entries
  • 3.2 Add <link rel="alternate" type="application/atom+xml"> to changelog page heads for feed auto-discovery

4. What's New Indicator

  • 4.1 Add "Changelog" link to Journal nav bar
  • 4.2 Track changelog:lastSeen in localStorage, show dot when newest entry is newer
  • 4.3 Clear indicator when user visits /changelog
  • 4.4 Add "Don't show again" option on changelog page that sets changelog:disabled in localStorage
  • 4.5 Add "Show new entry notifications" toggle on changelog page to re-enable the indicator
  • 4.6 Skip indicator check when changelog:disabled is set

5. Content

  • 5.1 Write initial changelog entry for the launch (features shipped in Phase 1)
  • 5.2 Add markdown rendering (react-markdown or built-in) for entry content

6. Verify

  • 6.1 Verify /changelog lists entries correctly
  • 6.2 Verify /changelog/:date renders full entry with OG tags
  • 6.3 Verify "What's New" dot appears and dismisses
  • 6.6 Verify "Don't show again" disables indicator permanently
  • 6.7 Verify re-enabling notifications restores indicator behavior
  • 6.4 Verify /changelog/feed.xml returns valid Atom feed
  • 6.5 Verify feed auto-discovery link is present in page source