Since v3.13.0, Ktistec has supported custom feeds.
A custom feed is a collection of posts selected by a set of rules called a judge. Any post Ktistec has cached that is public, or was sent to you, is a candidate. The judge's job is to decide which posts are in the feed and which posts are out.
Ktistec comes with one built-in judge called the criteria judge. It also supports any number of fully custom external judges—judges implemented as external scripts the server can call on candidate posts.
I use the criteria judge for most of my custom feeds. This post explains how it works. Later posts will dive into external judges.
The Criteria Judge
The criteria judge allows you to define feeds by flexibly matching on keywords, hashtags, and mentions. You can filter candidates to those posts that contain any of one set of keywords, hashtags, or mentions, all of a second set, and none of a third.
Ktistec's New Feed form.Keywords match anywhere in a post's text, summary, or title, ignoring case—even inside words, so "art" also matches "party". Hashtags and mentions match exactly: #art matches only posts tagged #art. Use a hashtag when you want precision. Use a keyword when you want reach.
Once you've settled on terms, you can preview the feed. To keep it fast, the preview returns up to 20 matches from the 100 most recent candidates—just enough to give you a feel for what it will look like. "Create Feed" publishes the feed and starts a task that backfills the last 30 days of posts. (Feeds are private, though—only you can see them.)
After it is published, the feed is available in the deck—the column-oriented feed reader. The deck shows up to 12 feeds side by side, and you can reorder them.
The deck.Matching is fast. I have feeds with 20+ keywords and hashtags, and there is no perceptible processing delay when a new post arrives.
Release v3.13.0 of Ktistec
Release v3.13.0 of Ktistec ("love who you choose to love") links the feed deck into the navigation. Feeds are now fully supported.
Feeds are custom collections of posts selected by hashtag, mention, and keyword, each grouped as terms you want any of, all of, or none of, so a feed can be as broad or as narrow as you like. The feed deck is my primary reading interface now.
The rest of the changes mostly address a variety of small federation issues:
Added
- Link the feed deck from the secondary nav bar.
- Offer a retry and a link when a quoted post can't be loaded.
Fixed
- Keep the verify button when a quote authorization can't be fetched.
- Verify HTTP signatures over the full set of headers the
headerssignature parameter names. - Sign an inbox delivery's fetches with the implicated account.
- Render directly published media objects as attachments.
- Handle more attachment media types when rendering.
Changed
- Finish the feeds API.
- Widen the metrics charts display.
With feeds shipped, I'm turning my attention back to federation. There are still a ton of small issues (e.g. Likes relayed through Groups are always rejected, RFC 9421 support, blurhash support) that I'd like to squash.