Benjamin Parry Offline Homebrewing

Two of my favourite things: indie web and service workers.

This makes me so happy. I remember saying when my book came out, that the best feedback I could possibly get would be readers making their websites work offline. The same can be said for the talk of the book.

#serviceworkers #goingoffline #homebrew #website #club #indieweb #clearleft #frontend #development #javascript #talk #presentation

Hacking away at Homebrew Website Club Brighton!

Hacking away at Homebrew Website Club Brighton!

Reminder: it’s Homebrew Website Club Brighton this evening (and every Thursday) in the @Clearleft studio from 6pm:

Everyone welcome!

01:42 suspended per Twitter email: "abusive behavior" and "targeted harassment of someone"
18:36 restored per "account got caught up in one of these spam groups by mistake"

My tweets are pretty boring. Running pics. #IndieWeb #CSS

One comparing Twitter to the Matrix about an abstract “someone”. Does Twitter’s automated system think “harassment of someone” literally means referring to the literal text “someone”? Is one offhand tweet considered “harassment”?

HWC NYC Wrap-Up 2019-03-20

New York City's second Homebrew Website Club of March met at The Bean at Cooper Union on March 20th, with me playing host.

Here are some notes from the "broadcast" portion of the meetup! — Working on his notification system, specifically tracking (un)read status of notifications from Gerrit. Today was exploring pieces of the system he'll have to modify to get this to work and now has a list of which pieces need updates. In his previous notification system, any fetch of a notification marked it as read, but that will change because it gives him more control over the system. Also made an update to the Homebrew Website Club main page to make the event description clearer, using text that we include on individual HWC event pages now. — Did a lot of digging into what's possible with MediaWiki templates, with the goal of simplifying the creation of Homebrew Website Club event pages on the IndieWeb wiki. He was able to get an "hwcdate" template together that outputs the date portion (2019-03-20) of event pages like events/2019-03-20-homebrew-website-club-nyc. Maybe created some tech debt, given how that locks in our URLs, but hopefully it will save some copy-paste-tweak labor. — Got stuck on a train and super delayed! 😭

Other discussion:

  • MediaWiki and its relation to Wikipedia and as an open source project. Many mediawiki installs become stale quickly, for some good reasons! Finding documentation on parts of mediawiki can also be confusing, as the common terms may point to similar but unrelated topics, may be outdated, may refer to plugins or extensions you don't have, or may refer to functionality available in newer versions of mediawiki.
  • How we learn and modify the tools we use to write and edit code. The trade-offs between using something we're comfortable with versus trying to pick up and become proficient with new tools. Sublime and vim and emacs and VisualStudio Code and all their plugins and ways of integrating with services and supporting different languages.
  • The Language Server Protocol for standardizing how editors can provide "smart" features like autocomplete for different languages and projects.
  • Synchronizing work-in-progress code. Is Git too much overhead? Maybe! Dmitri likes using Dropbox.
Marty and Dmitri smile at the camera, sitting in front of a brick wall.Left-to-right:,

Thanks to everyone who came out! We look forward to seeing you at our next meetup on Wednesday, April 4th at 6:30pm!

#HWC #NYC #IndieWeb #wrap-up

Sunlit 2.4 now available

The new version of Sunlit is now available in the App Store. You can download it for free and use it with or to publish photos to an existing blog like WordPress.

Why does controlling our own photos matter? As I wrote in this post about the way out of the mess created by massive social networks, having posts at our own domain names unlocks a few very important features:

  • Open standards mean interoperability with multiple tools. I can use IndieWeb tools like OwnYourGram to automatically copy Instagram posts to, or use traditional blogging apps like MarsEdit to upload and post photos.
  • Content ownership gives the flexibility to move photos between hosting providers. You can host on or WordPress or some future blogging platform without URLs breaking.
  • Smaller social networks get us away from ad-based businesses that sell our data. Because Sunlit is powered by, you can even follow Mastodon or PixelFed users and see their photos in the Sunlit timeline.

I’m very excited about this release and hope you like it. It’s time to move away Instagram. If you need help importing your photos, check out this video I made about batch importing from Instagram to blogs.

Brightonians with websites: Homebrew Website Club Brighton is now happening every Thursday evening in the @Clearleft studio:

Show up from 6pm and we’ll mess about with our websites.

Indieweb reader access with Wordpress on shared hosting

An Indieweb reader (like Monocle, Together or Indigenous) authenticates you with your personal website which also tells the indieweb reader where to fetch your feeds. Wordpress is a popular option for a personal website.

Although I’m not an active wordpress user, I’ve helped a few wordpress users interested in adding Indieweb functionality. I haven’t had much of a problem with the indieweb wordpress plugins and themes but from time to time, I’ve needed a little help from the usual suspects on the indieweb-wordpress chat.

I also have very little experience with shared hosting but it seems that with their one-click wordpress installers, this could be a good option to experience the benefits of an indieweb reader while avoiding more complex hosting options. Shared hosting seems to be much more affordable, too.

At IndiewebCamp Austin 2019, I investigated Dreamhost and Reclaim Hosting as two shared hosting options for interoperability with indieweb readers.

It turned out that what I thought was a missing piece was already available. Your website needs to declare where you keep your feeds so that your indieweb reader can find them. On wordpress, this can be accomplished with the aperture plugin. So, I added and activated this plugin to my existing indieweb wordpress test site hosted on dreamhost. The plugin automates the creation of an aperture account and adds a microsub link tag to your web page which points to your aperture url so that your indieweb reader can find your feeds. This ability to declare where you are storing your feeds allows you to change the microsub provider that is hosting your feeds. There are already several microsub providers to choose from.

Next, I tried logging into the Monocle indieweb reader and received a “bearer token not supplied” error.

Bearer token not supplied

Aaron Parecki who was nearby explained to me that the web server running wordpress was unfortunately stripping out the authorization request header. A quick search revealed a workaround for this issue by adding the following line to your .htaccess file:

SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1

At this point, my unfamiliarity with shared hosting bit me as I had purposely avoided looking under the hood of my account. So, I assumed I could just use my normal credentials to upload the needed .htaccess file but my changes were ignored. It did not occur to me that there was another dreamhost user account under which the one-click wordpress was installed and I needed to use those credentials to make the changes.

As I didn’t immediately figure this out, I decided to try Reclaim Hosting as an alternative shared hosting provider and installed wordpress and the appropriate indieweb plugins and an indieweb-friendly theme. I had better luck this time (and much more affordable). Again, I ran into the “bearer token not supplied” error when logging into the indieweb reader, but luckily there was no multiple user account confusion with reclaim hosting. I could easily add the .htaccess file and confirm that it fixed the “bearer token not supplied” issue.

However, somehow I found myself in a coherency problem state as I received a “This token was issued to a different user” error where aperture was saying my microsub url was different than my website was claiming (different aperture user accounts). I was not able to resolve this issue by reinstalling the aperture wordpress plugin but I was able to resolve it by changing the aperture_microsub_url option name in the wp_options database table to match the one aperture was expecting.

Week Notes 19#11

A logistically challenging week with the little one at home with a fever.

  • Checked the city archives for the building plans of our house
  • Worked on a transparency benchmark for provinces
  • Had an early confcall with my World Bank colleagues and our Malaysian government client for our upcoming work there
  • Worked on an open data project for a province
  • Had a meeting with two directors of the National Archives
  • Did some planning for IndieWebCamp Utrecht in May
  • Agreed a lease for office space for The Green Land in Utrecht

Other people’s weeknotes

Paul is writing weeknotes. Here’s his latest.

Amy is writing weeknotes. Here’s her latest.

Aegir is writing weeknotes. Here’s his latest.

Nat is writing weeknotes. Here’s their latest.

Alice is writing weeknotes. Here’s her latest.

Mark is writing weeknotes. Here’s his latest.

I enjoy them all.

#weeknotes #writing #blogging #personal #publishing #indieweb

Homebrew Website Club SF!

When: Where: Mozilla San Francisco Host: Tantek Çelik

17:30: Optional writing hour and quiet socializing
18:30: IndieWeb demos and hack night!

Homebrew Website Club retro 1980s-style logo

Topics for this week:

Join a community with like-minded interests. Bring friends that want a personal site, or are interested in a healthy, independent web!

Any questions? Ask in #indieweb Slack or IRC

More information: IndieWeb Wiki Event Page

RSVP: post an indie RSVP on your own site!

Me: [scrolling through posts in Monocle, the IndieWeb reader]


8 nearly-identical posts saying 'Tantek Çelik liked a post on'

Me: I don't want to open up 8 tabs for Twitter. I'll just visit Tantek's homepage where I bet he shows these tweets in full context.

Tantek's website similarly has no context for these tweets, saying 'likes @jgarber’s tweet at 18:54, tweet at 18:53, @shiflett’s tweet at 18:53, tweet at 18:53, @mathowie’s tweet at 18:53, @leahculver’s tweet at 18:53, tweet at 18:52, and tweet at 18:52'


#IndieWeb #context #UX #twitter
I'm going!

Looking forward to my third IndieWeb Summit! It’s amazing to reflect on the improvements coming out of the IndieWeb every year. I wonder what I will hack on this time around??

Replied to IndieWebCamp Online 2019 by EddieHinkleEddieHinkle
... if I get it working and start creating private posts for people on the IndieWeb, it might encourage them to start adding AutoAuth to their projects as well!

Thank you for the write-up Eddie! Yes, if you get it working, I most definitely want to test AutoAuth on my WP site. Looking to experiment with selective access to parts of my postings, and doing so for different audiences. As described here.

Exporting a blog archive

Over a year ago I proposed a new blog archive format. The idea was to have a better way to save the posts and photos in your blog, or move your blog to another platform. I’m happy to announce that can now export in this format.

Here’s how it works:

  • Click Posts → Export → “Export in blog archive format”.
  • will generate the archive, which is an HTML file with Microformats, a JSON Feed of all posts, and a folder of uploaded photos. The HTML file uses relative img references so you can open it directly without a server. The JSON Feed includes both HTML and Markdown. ( actually uses Hugo to generate the HTML. I’ve made the theme available on GitHub.)
  • The archive is zipped and renamed with the .bar file extension. When you download a .bar file, you can rename it .zip to open it, but having a new extension should make it more convenient to copy the file or import it into other apps.
  • uploads the file to S3 and sends you an email when it’s available to download.

If you’ve uploaded a lot of photos, the archives can be fairly big. It’s working well for my blog and I’ll be monitoring it to see how well it works for other blogs. If you have a blog-related app that could import or export this format, let me know!

Getting Authorised Access Posts on the #Indieweb

This weekend an online virtual IndieWebCamp took place. One of the topics discussed and worked upon has my strong interest: making it possible to authorise selective access to posts.

Imagine me writing here about my intended travel. This I would want to share with my network, but not necessarily announce publicly until after the fact. Similarly, let’s say I want some of those reading here to get an update about our little one, then I’d want to be able to indicate who can have access to that posting.

In a platform like FB, and previously on Google plus with its circles, you can select audiences for specific postings. Especially the circles in Google allowed fine grained control. On my blog it is much less obvious how to do that. Yet, there are IndieWeb components that would allow this. For instance IndieAuth already allows you to log-in to this website and other platforms using your own URL (much like Facebook’s login can be used on multiple sites, although you really don’t want to do that as it lets FB track you across other sites you use). However, for reading individual postings that have restricted access, it would require an action made by a human (accepting the authorisation request), which makes it impractical. Enter AutoAuth, based on IndieAuth, that allows your site to log-in to mine without human intervention.

Martijn van de Ven and Sven Knebel worked on this, as sketched out in the graph below.


Selective access to content inside a posting
Now, once this is working, I’d like to take it one step further still. The above still assumes I have postings for all and postings for some, and that implies writing entire postings with a specific audience in mind. More often I find I am deliberately vague on some details in my public postings, even though I know some of my network reading here can be trusted with the specifics. Like names, places, photos etc. In those instances writing another posting with that detailed info for restricted access does not make much sense. I’d want to be able to restrict access to specific sentences, paragraphs or details in an otherwise public posting.

This is akin to the way government document management systems are slowly being adapted, where specific parts in a document are protected by data protection laws, while the document itself is public by law. Currently balancing those two obligations means human intervention before sharing, but slowly systems are being adapted to knowing where in documents restricted access material is located. Ideally I want a way of marking up text in a posting like this so that it is only send out by the webserver when an authorisation like sketched above is available.

So that a posting like this is entirely possible:

“Today we went to the zoo with the little one our little one’s name

general IMAGE of zoo visit
IMAGE with little one’s face

So this updates dynamically like the mentions do? Neat.
looking forward to Jacky's #indieweb demo at IWC 2019 online

@jgmac1106 Who was it you wanted to connect me with about a possible IndieWebCamp San Diego?