"Own your data", part I: Bringing the bookmarks home from the cloud

Sebastian Greger

The archives reveal it was October 2005 when I started to use Delicious to collect my bookmarks, at a time where I had to use various computers daily.

Four years later, competitor Ma.gnolia lost all user data, marking the first occasion that I (along with a shaken community of their users) questioned the value of cloud services for storing personal data. Yet, both for lack of alternatives and for being lazy, I kept using Delicious - though making regular backups a habit.

A lot has happened since: Delicious got almost shut down by Yahoo in 2010, then sold in 2011. And over time, the service evolved, features disappeared or changed and the UI became first more complex then more simple again.

Apart from some collaboration projects, I always considered it primarily a personal tool, not a platform for social sharing, so most of the innovations were of negligible value for me. Yet, I “had to” keep using it, since Delicious’ vaults held my bookmarks of almost a decade and I’d gotten so used to the comfort of cloud bookmarking.

Reclaiming bookmark ownership

Today, we live 2014 and it is time to move on; more specifically, time to reclaim ownership over my bookmarks and to finally host them myself. Naturally, having grown used to a cloud service, a suitable web-based replacement had to be found.

With my personal website running WordPress, the idea was born to integrate the bookmarks with my website. And it turned out that Aaron Parecki , co-founder of the IndieWebCamp, had already written a simple plugin to set up a WordPress site for bookmarking purposes.

Based on Parecki’s code, I developed a version to fit my needs (“eating my own dog food”, as one of the Indieweb community’s principles go) which allowed me to integrate it with my WordPress website: offering just the tools I need and, most importantly, giving me full control over both my data and the features of my cloud bookmarking.

No longer is anybody going to “sunset” my bookmarking service, discontinue my preferred interface or profile me based on what I am reading online.

The design

From a design perspective, the solution is pretty simple: All I need is a small set of data fields for each bookmark (title, URL, notes, tags and a source/via field to later be able to track back who pointed me to a source), along with an efficient interface to bookmark a site and a simplistic listing with filtering features.

The “Add bookmark” pop-up even integrates a prediction feature for tags already in use for other bookmarks (powered by out-of-the-box tools from the WordPress backend).

In between busy weeks of client work, it was a source of great joy to create a UI where the target group and its needs were so clearly defined (just me and my habits) and to create a minimalistic “power tool” for bookmark management. Building on top of WordPress, all the backend features already exist and only had to be tapped into.

I also made a decision to keep all bookmarks private for now, though one of the reasons for the integration with my blog engine is that I may later integrate a tool to selectively publish collections of bookmarks as blog posts or the like; aggregating subsets of my own data (think of Storify, but on my own site and with my own content).

The technical details

At its core, the solution is almost ridiculously simple: The WordPress plugin creates a new custom post type called “bookmark” which uses a custom taxonomy “bookmark_tag” to store the tags used with the content (to avoid cluttering the tag space of the main blog).

In addition, it provides two URLs with custom output, one for browsing the entries and the other for adding new bookmarks; the latter being accessible as a classical pop-up window when using a small bookmarklet in the bookmark bar of my Firefox browser.

The interface for browsing the bookmarks is very simplistic, yet offers tag filters and a search field (here the top of a page with some bookmarks imported from 7 years ago).

The main work was done within a few hours and after a few days of test use and various fixes and enhancements, I eventually exported all my Delicious bookmarks into an XML file using the simple export link https://{username}:{password}@api.delicious.com/v1/posts/all?results=10000, did some manual editing and transformed the XML into an CSV spreadsheet that I then imported using the CSV importer plugin into the database (obviously, there are smarter ways to do this, but the semi-manual approach to this one-time task suit me just fine).

And voilá, today I am happy to share the piece of software I created - not as a plug-and-play plugin (and without any current intention to turn this into an official WordPress plugin, as I made this primarily for myself and to explore options for individual data independence), but as a small open source project that anyone in the web community may grab/fork, modify and reuse for their own specific purposes:


This post is part of a series: