Delete channels from the UI, with a defined cascade
Delete channels from the UI, with a defined cascade
Delivered in two commits.
6270c97 Add a cascading foreign key to article publications
2b87f1f Add channel deletion to the Channels page
Split so the schema change stands alone and is…
Refactor: Extract business logic into Action classes (v1.4.0)
Refactor: Extract business logic into Action classes (v1.4.0)
Delivered in five commits, d8b85f8..dc64dd8.
d8b85f8 Extract SaveArticleAction from ArticleFetcher
dd8f799 Extract CreateRouteArticlesAction from ValidationService
d58fd8a Rename…
A failed publish silently retries instead of returning the article to the list
Browser-verified 2026-08-13: the Failed tab renders on /articles and correctly shows its empty state — dev has no articles in publish_status = ERROR.
Updates the "Not verified in a browser"…
A failed publish silently retries instead of returning the article to the list
A failed publish silently retries instead of returning the article to the list
Delivered in c7b9cd6.
What shipped
route_articles.publish_error(nullable text) stores the failure reason. Migration2024_01_01_000022also dropspublish_attemptsand `next_attem…
Refactor: Extract business logic into Action classes (v1.4.0)
Research user-definable parsing for non-RSS (website) feeds
Thumbnails too large
Confirmed, fixed, and verified against a live publish.
The suspicion was correct
Full-size images were being published as thumbnails. Measured from a real stored image_url:
A failed publish silently retries instead of returning the article to the list
Delete channels from the UI, with a defined cascade
Polish README into a proper FOSS project page
Add Reuters as a feed provider
Unmatched and unauthenticated web routes return a JSON 404 instead of redirecting to /
Attempted 2026-08-13, reverted and moved to backlog. No code landed. Recording the investigation so the next attempt does not start cold.
The fix is not as simple as changing the…
Channel cards have no edit option
Channel cards have no edit option
Delivered in 0163fa5.
What shipped
- Edit button on each channel card, opening an
x-form-modalprefilled with display name, language and description Channels::openEditModal()/…