Adds FeedLand (feedland.com or self-hosted) as a new source type alongside
OPML and Microsub. Syncs subscriptions via FeedLand's public OPML endpoint
with optional category filtering and AJAX category discovery in the admin UI.
The i18n library used by Indiekit expects {{variable}} for named
interpolation. The %{variable} syntax was not being substituted,
causing raw template strings in toast notifications.
Added blogroll.sync.* keys (success, error, already_running, cleared_success)
and sources.form.* keys (microsubChannel, categoryPrefix with hints) that were
referenced in controllers/templates but missing from locale files.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Remove 'Manual' source type (redundant with Blogs management)
- Rename 'Sources' to 'OPML Sync' for clarity
- Update labels to clarify URL syncs periodically, File is one-time import
- Fix date conversion in sources list controller
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add feed-discovery.js utility that discovers RSS/Atom/JSON feeds from website URLs
- Add /api/discover endpoint for frontend feed discovery
- Update blog edit form with discovery UI (enter website URL, discover feeds)
- Auto-populate feedUrl, title, and siteUrl from discovery results
- Handle multiple feed options (let user choose)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>