Rename duplicate "sync" locale key to "syncResult" to fix the sources
list page showing [Object Object] instead of the Sync button label.
Add sort=recent and source= query params to the blogs API for the
sidebar widget tabs feature. Tag FeedLand blogs with source: "feedland"
and expose source field for all blogs in API responses.
Bump version to 1.0.22.
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>