I'm a huge fan of "read-later" apps like Instapaper and Pocket. But I'm not a fan of how they present you with little more beyond a list of links. Managing these lists can quickly feel like a burden. When using Instapaper, I find myself spending more time searching for something to read rather than actually reading.

What I want is an app that not only saves links, but also suggests what to read next. My ideal app would have the following features:

  • Bubble up the sources that are most important to me.
  • Categorize links by subject (e.g. "technology", "music", etc).
  • Categorize links by type ("video", "podcast" etc).
  • Highlight popular content. In the same vein, demote content as it becomes less relevant (For example, a news item about the current Republican race probably won't be relevant a year from now).
  • Be aware of content length in order to show me shorter links when I have a few minutes to kill, or give me a longer article when I have more time.

In order to play around with some of these ideas, I wrote a proof-of-concept app myself. The app is hosted on App Engine and uses Pinboard as a backend. You can browse the source code, but its not hosted anywhere for others to play with. I'm definitely not looking to write yet another "read-later" app. My hope is that someday tools like Instapaper will incorporate features like this.

Here are some details on how the app works.

  • Links are added via a bookmarklet. Only the link's url and title are saved. I'm not including the entire contents of the page, which is one of the features of the Instapaper bookmarklet.
  • Once the link reaches the server, it passes through a series of filters for post-processing and categorization.
  • Links are first categorized by type. If the link is a video (from YouTube or Vimeo), it is assigned the "to watch" tag. Links from GitHub are categorized as "to hack". Browsing a project on GitHub is a different experience from reading an article; I usually want to spend some time digging into the project's source code and running it locally. Everything else is categorized as "to read". I can also imagine more categories in the future, like books I want to read or movies I want to watch.
  • High priority sites are tagged with the "c:priority" tag (The "c:" prefix denotes a category tag; I may drop the prefix in the future). This is the first tag I visit when I want to read something, and it ensures that I'm up-to-date with the sites I care about. Other categories include "c:news", for stuff like NY Times articles, and "c:tech" for tech-related sites. Eventually this categorization could be done by some semantic text analysis API like Alchemy.
  • The source and referrer domains are included as tags, so I can easily browse links from a particular location.
  • In addition to the bookmarklet, I've implemented post-by-email support. This is useful on mobile platforms where installing a bookmarklet isn't feasible.
  • All this data is stored in Pinboard. You can see the results in my Pinboard account. I chose Pinboard because of its great tagging support. Tags are the glue that ties the app together. Since this is an experimental app, I like the flexibility that tags offer.

This code is still a work in progress, here are some features I'd like to add in the future:

  • Improved browsing. Saving links is only half the story; the app also needs an easy and intuitive way to find content. I'm currently using Pinboard's web UI, but I envision building an interface that is context-aware and allows sorting along the many dimensions mentioned above. For example, browsing the "to watch" tag could present video thumbnails rather than a list of links.
  • Store the content size. I'd like to be able to sort the content by size, so that I can pick an article appropriate for the time I have. The size of a page can easily by retrieved from JavaScript by using document.body.innerHTML. But its not that simple, since a page could be littered with html and ads but not a lot of content. Instapaper faces the same content extraction problem when presenting its "clean" reading interface.
  • Better stats reporting. The downside of using Pinboard is that I'm constrained to Pinboard's data model. There are a few fields such as "date added" and "date read" that could be useful for reporting stats. Low reading stats, or a lot of links from one category that haven't been read, can signal an opportunity to improve the app.
  • One of the nice features of Pinboard is that it shows you how many other people have saved the same link. This is kind of a proxy for how popular a link is. I wish Pinboard had the option to sort links by popularity; the API doesn't seem to have this option either.

At the end of the day, I want this app to do the heavy lifting of organizing links for me so I don't have to. This frees up my time to actually do some reading!