Open, Social, Academic Bookmarking: Save to App.net

I'm a big fan of Pinboard - the posting interface is wonderful, and it's even easier with a Chrome extension and keyboard shortcut. Your bookmarks are public (unless you choose otherwise), and anyone can subscribe to your feed.

There's no place in Pinboard, though, for metadata other than title, URL and description, and you can't attach snapshots or files to your bookmarks (Pinboard stores an HTML archive of each bookmark, for subscribers, but its crawler might not always get the same view of the page as you, or any attachments).

Zotero and Mendeley both have APIs which let you post metadata and attach files, but they're limited in various ways (they both have a restricted set of metadata fields that are allowed for each type of object; Zotero's API is nicely engineered but uses XML; neither support the client-side OAuth2 flow, which means browser extensions have to either communicate with the API through a server-side proxy or store their secret key in the extension). Also, neither Zotero or Mendeley allows you to keep your library completely open for anyone to read.

ReadCube has a lovely reading and outward-linking interface, but not much of a public API; Google Drive and Dropbox are both excellent file stores and have well-built APIs, but neither lets you attach extensive metadata to each object.

Basically, I've been searching for a long time for a cloud-based object store with a decent API, the ability to store items with arbitrary JSON metadata/annotations, multiple file attachments, user-pays storage costs, client-side OAuth2 authentication, cross-origin request headers and (as a special bonus) a web-based social layer for communication.

Save to App.net

Then, last week, App.net added Files to their existing API, allowing files to be attached to posts.

In the same way as you can post to Twitter and attach photos, now you can post to App.net, attach any metadata you like as annotations, and attach arbitrary files to each post.

In my case, those files are PDFs.

As a starting point, I made a Chrome extension that reads metadata from the current page, fetches more metadata from various services using any identifier it can find, then posts the item to App.net. If the original HTML file points to an associated PDF file, then it also fetches that file and attaches it to the post.

When I'm browsing the web reading articles, I just have to press a single button and the item is stored in my App.net feed.

Anyone subscribed to the RSS feed of my posts gets the item title, a link to the original page, and the PDF file as an enclosure.

Read from App.net

As a reader, I need to be able to access all the stored metadata for each item, so I built a client-side web interface to my App.net library. After authenticating, it fetches my latest posts and displays those that have file attachments. Then, when I select an article, it displays the PDF using PDF.js.

So: a cloud-based file system with arbitrary metadata, a browser extension for creating items and attaching files, a web-based reading interface, the ability to subscribe to other people's posts... what next? A local, synced IndexedDB database and file store like in Metatato, for better lookup, browsing and offline reading? A separate service that converts each PDF to XML using pdfx and attaches the XML file back to your post? An application that reads your feed and recommends similar articles? Text mining to suggest connections between articles? Plugins to display attention metrics for each article? Combine the feeds of everyone you follow to create an über-library?

If you have more ideas, here's a home page, of sorts, which has a link to all the source code.