How my social reader search features work
Published on under the IndieWeb category.

One of the concepts in social readers I am really excited about is search. The specification upon which my social reader is built, Microsub, separates clients and servers. This means that there is plenty of opportunity for clients to experiment with search and come up with new ideas on how to help people find content and other websites. I have been exploring search for a while now so I was excited to think about what search would look like in a social reader.
Searching my feed
My first goal was to implement search so that I could find content that was already saved in my feed. This would let me easily find articles, blog posts, and any other piece of content that has crossed my feed. I implemented this search feature using the Microsub search specification. Here's what happens when I go to search for some content on my social reader:
- I type in a search query like "indieweb".
- I can choose a specific channel in which to search (i.e. Notifications or All, an aggregate feed representing all posts i have received.)
- The client sends a request to my Microsub server.
- My Microsub server does a LIKE check on the sqlite database which my reader uses to store data,
- The Microsub server returns a list of posts that match my query.
- Those posts show up on my feed reader.
Initially, I built this as a separate page on my feed reader. However, as I have added more search capabilities to my reader, I decided that the search page should link easily to all of the other search features. This led me to build a UI that looks like this:
The search page is a simple text box with a dropdown to choose a channel to search. The search feature sends a JavaScript request every time I enter a space character into the form field. This enables a search-as-you-type experience (without sending too many requests to the search server). Optionally, one can press enter and the server will return a new web page with results that match my query. The search feed has all the same features as a regular entry in my feed. I can like content, reply to content, delete entries, and bookmark content from the search page.
Searching through the list of people I follow
I also wanted to be able to search through the list of people I follow. I didn't think about this when I first built my reader but it turns out this is a very useful feature for me to have. I now follow over 100 feeds and it was getting difficult to navigate them. I ended up using a Command-F search to search through the list of people I follow. That was certainly not the best experience I could develop.
I added a simple form to a page I made that lists my followers. I then altered the page so it looked the same as the regular search page, with a different title and main heading to indicate the role of the page is to help me find a feed of someone I follow. Here is the search page before I have entered any query:
When I run a search query, I get a list of people I follow that matches the query. Here is an example:
This search interface doesn't add the unfollow, mute, and block buttons. This is a feature I plan to revisit later on.
With this experience in place, I am able to easily look through the list of people I follow. This feature is useful if I want to check whether I already follow someone whose content I have enjoyed. Eventually, this feature will also be useful when I want to find someone's name quickly to unfollow, mute, or block them.
Searching for new websites and people
I am incredibly excited about the discovery feature I added to my Microsub reader. This discovery feature lets me search for new websites and people to follow. I have a separate page called "Discover People" that lets me send a request to IndieWeb Search. This request is prepended with the term "discover ". That word triggers a special feature on IndieWeb Search that lets you find a website whose homepage author's h-card contains the content that comes after the word "discover ". For instance, "tantek" returns the blog of Tantek Çelik, as seen in this example below:
Or I can search for a keyword like London and see a few results:
This feature was not difficult to implement. All my code does is makes a query for IndieWeb Search, gets the results, parses them, and then returns those results to my feed reader. All IndieWeb Search pages come with jf2, RSS, JSON, and h-feeds which you can use to programmatically process the data inside the search feed. Adding this discovery feature to my search engine makes me even more excited by the idea of search engines with feeds to which you can subscribe.
Admittedly, I don't use this feature very much. This is because I usually come across new blogs by surfing the net and stumbling upon interesting new sites. With that said, this discovery feature is one that I think opens a lot of opportunities. As I wrote this post, I found a blog run by another Scottish coder. I likely would not have have come across that blog were it not for the discovery feature. I think there's a lot of potential for experimentation in this area.
Wrapping Up
I have a lot more work to do to build a full search experience on my feed reader. I need to add the buttons to the following list that I mentioned earlier. Also, none of the search pages have a pagination feature. This means the discovery search feature is limited to 20 results, the number of results displayed on the first page of an IndieWeb Search query. My follower and feed searches don't yet have a limit which means that load times could be significant if I enter a common query. These are changes I will likely chip away at. I have already done a lot of work on my social reader recently and don't want to overwhelm myself.
What do you think about the search features I have described in this post? How would you improve or change them? What would you look for in a good social reader search feature? You can let me know by emailing me at jamesg@jamesg.blog.
Responses
Comment on this post
Respond to this post by sending a Webmention.
Have a comment? Email me at readers@jamesg.blog.