Embracing the IndieWeb
Well, the experiment with Hugo and css flexbox has been (I think) a success. This site is now fully written in the former, and uses the latter. I’m pleased with how this has turned out, despite my (perhaps unfair) ranting at Hugo previously. Site is back up and running, I’ve converted all my posts1, and the only thing I’ve broken is the rss-feeds!
Inflicting all that pain on myself wasn’t without purpose, however, and it also gave me time to think, more particularly about the place technology has in my life and my relationship to it. I’ve kept to my twitter pledge and this site is now the product of all the time I’ve saved in doing so. Going back to Not Being the Product, I’ve tried to move away from captured silos, and towards being ‘self-sufficient’ – not always terribly succesfully, I must admit, but I’ve always had that intention – the silos kept winning.
So, given that I had to do a full site rewrite for Hugo, I thought I’d take another look at the state of the indieweb. I’d done this before, but had given up rather hastily. Now I found myself agreeing more strongly than ever with the IndieWeb philosophy, and I was surprised to see that what had been vague ideas were now concrete proposals backed up by solid implementations. It helps that right around the time I was considering this, webmentions, long an indieweb feature, became a fully fledged W3C Recommendation. If its good enough for them…
At the same time, I read more deeply about the IndieWeb, and came to a greater understanding of the definition of POSSE2. In short: by syndicating without explicitly linking back to the original posts on my own site, I was, to coin a phrase, doing it wrong.
Identity
The first piece of the indieweb puzzle is establishing your own identity. There’s been a lot of movement in this area since the last time I looked at IndieWeb, in particular the microformats2 specification integrates the metadata directly into HTML5 in precisely the manner that the old microdata and RDFa didn’t.
I initially decided to markup my identity credentials using both rel="me"
attributes in my social media links in my sidebar, as this was the simplest approach. Later I found out that, while this is necessary3, it is by no means sufficient, enter h-card
. This is part of microformats2 and, after learning about the spec, I implemented it in the footer strap of my site. The process (using golang templates) wasn’t too difficult, and the final partial/footer.html
is as follows:
<footer>
<p class="feet h-card vcard">{{ .Site.Title }} ©
<a href={{ .Site.BaseURL }}
class="p-name u-url url author metatag" rel="me">
{{ .Site.Author.name }}
</a>
<img src="{{ .Site.BaseURL }}{{ .Site.Author.photo }}"
class="u-photo" style="display: none">
<a class="p-nickname u-email email metatag" rel="me"
href="mailto:{{ .Site.Author.email }}">
{{ .Site.Author.nick }}
</a>
2011-{{ .Now.Format "2006" }} • Licenced under
<a href="{{ .Site.BaseURL }}page/licence"
class="metatag">
{{ .Site.Author.licence }}
</a>
</p>
While I had now taken the first steps to establish my identity on the IndieWeb, I still needed to go further in order to utilise the services IndieWeb members have created - services that are and will be key for this site in the future.
Those services rely on a process called IndieAuth, which takes the data from your site’s h-card
and rel="me"
links, then leverages authentication protocols of existing services to bootstrap your own identity. As they say on the site:
IndieAuth is part of the IndieWeb movement to take back control of your online identity. Instead of logging in to websites as “you on Twitter” or “you on Facebook”, you should be able to log in as just “you”. We should not be relying on Twitter or Facebook to provide our authenticated identities, we should be able to use our own domain names to log in to sites everywhere.
Getting myself validated through IndieAuth was already taken care of by the rel="me"
links, but some services needed me to declare IndieAuth as my authorization endpoint
; this was a simple matter of adding one line to my html headers:
<link rel="authorization_endpoint"
href="https://indieauth.com/auth">
The next step was to mark up my blog posts with the metadata used, microformats2 h-entry
. This is the entire basis of the indie-web, using classes for information such as titles, authorship and content. The microformats wiki has a detailed article on the use of h-entry
; by way of example, the markup for the articles on my sites consists of this golang template:
<article class="h-entry">
<h1 class="p-name">
{{ .Title }}
</h1>
{{ partial "metadata.html" . }}
{{- if .Params.summary }}
<div class="floatright p-summary">
{{ .Params.summary }}
</div>
{{- end }}
<div class="e-content">
{{ .Content }}
</div>
</article>
All that taken care of, it was time to move on to actually, you know, using the IndieWeb.
Webmentions
Thanks to Pelle Hesseman I’ve now gotten webmentions running succesfully on this site. Because I use a static site generator, this is a little more involved than it would be on a dynamic site which can use SQL dBases in realtime. The only real solution is to embed a script to the static pages, and poll for webmentions at pageload time. I’d been struggling with getting this process working, but #indieweb
pointed me at Pelle’s own webmention endpoint, designed specifically for static sites4 and with a working and mature codebase. Again, I had to add a single line in my headers:
<link rel="webmention"
href="https://webmention.herokuapp.com/api/webmention" />
The script which I need is (thankfully) provided by Pelle on his site, and I was able to sucessfully validate and test it all using webmention.rocks
Escaping the Silos
Once I had webmention support on my site, I needed some way of getting people’s reactions to my posts on social media out of the silos of twitter and google+ and onto my own site. This is a far harder nut to crack, and not one that I felt capable of dealing with on my own. #indieweb
to the rescue yet again.
Bridgy is another indieweb service, one which is specifically designed to do what I wanted to do: Create a back-feed so that the reactions of my friends within a silo come back out of the silo and on to my site. As I’d already set myself up for IndieAuth, getting Bridgy active was a trivial matter. I’ve set up the back-feed, and you cane see some of the results in more recent posts here, such as New Years View I or The Cold Pre Dawn.
I haven’t yet tried Bridgy’s Publish Function, this will be the first post I’ll have attempted to syndicate in this manner. If you came here because of a tweet from me: Hey! It worked!
Just an aside to point out that it upsets me that I can syndicate to twitter, or (if I was a member) facebook or medium, but there’s no way to syndicate to google plus, as there’s no gplus write API. Nice way to Do No Evil™, guys!
Future Direction
The next stages of this journey are, of necessity, more complex.
I would like to get my own webmention endpoint working. I’ve been looking over the code for Pelle’s endpoint, and I think that’s something I should investigate doing for myself. That would mean I’m not relying on his (fabulous and wonderful) service, real independence of content.
I want to be able to use micropub to create posts on my own site. To start with, I’d like to use the protocol to create my microposts and syndicate them automatically, rather than using the POSSE-as-a-service of Bridgy. Again, real independence.
I want to become more involved with the IndieWeb community. I was hanging out in their slack channel for a week before I realised it was just a feed of an IRC channel! Time and again, when I’ve had a question or hit a brickwall, I’ve been helped, politely and efficiently, by people like snarfed, aaronpk, kevinmarks and voxpelli. That’s the type of community I enjoy, and one I’m determined to contribute to, in some capacity or another.
Wrap Up
The point of all of this is to escape the silos into which the “User As A Product” vendors want us to stay. To ensure that our own words remain ours, we need to identify ourselves as authors of those words, we need to decentralize control of our identities and words to our own control. It is a process, one which is not simple, and one which, honestly, most people don’t know about and couldn’t care less.
I’ve used the words ‘trivial’, ‘simple’ and ‘just’ in my descriptions above, but that’s how I perceived the difficulty of the task. This isn’t my first time on the merry-go-round; I have greater than baseline knowledge about html and the underlying structures of the web. As it stands, embracing the indieweb is something which demands that greater level of knowledge.
Until such time as the principles that underlie the IndieWeb become part of the core of how people evaluate the entire Web, until people acquire the knowledge to make the process simpler and more immediate, that’s going to remain the case. I hope that by providing details of my own experience, and placing my Hugo theme on github, I can make a contribution in my own small way.
It astonishes me how far the IndieWeb has come since I last looked at it. They’ve accomplished some incredible things, and I’m excited to partake of the journey.
- I ended up using some fairly kludgey scripts to convert all my data to the correct YAML format; I’ve posted the most important one as a gist on github. [return]
- Publish Own Site, Syndicate Elsewhere [return]
- Correctly established
rel="me"
links are essential for IndieAuth [return] - In his own case, he’s using jekyll [return]