Together v3

Over the last few months I have been completely rebuilding my social reader Together. So I felt I should write a post about it to highlight what's changed and show off what Together has to offer.

First off just a little info on the idea of a social reader: A social reader is an application that can be used to read and interact with content from all around the web, not just one walled garden.

In the world of the #indieweb that means following other websites and owning all your own content on your own website.

Features

Layouts

The content you follow from around the web comes in all different forms, it doesn't make sense to force a photo into the same layout as long form blog post.

To help with this Together supports a number of views:

Timeline View

The timeline view is similar to what you might find in twitter or facebook.

Each post has it's own card in a scrolling list of cards. Great for shorter format and mixed content.

Classic View

Inspired by classic RSS readers such as Google Reader (r.i.p.). The classic view uses a 2 column layout with small post previews on the left and you can click into a single post to view it on the right.

This view works well for longer form articles or news updates.

Gallery View

The gallery view shows a grid of photos and videos from your feeds.

You can click into an individual photo or view to view it full screen and swipe through them.

I use this view to follow my instagram feed and the micro.blog photo feed.

Map View

A more niche view is the map view that shows where the most recent posts in a channel come from.

This can be used to have a nice view where your friends have checked in recently.

Previews

Something I worked on quite a bit for this release was the feed following and preview UI.

The preview and search is now contained in one unified box, it's now much easier to see exactly what you searched for and what feed you are previewing.

Inline actions

Inline actions are not new in this version of Together, but have seen an update. The actions let you reply, like or repost to your website via micropub, perform admin actions (like blocking and muting sources) and viewing or loading the original content.

New in v3 is the consistent option to attempt to reload the content again from the source. This is useful for (annoying) feeds that only provide a short preview of a posts content.

Another new feature in v3 are the improved notifications. When you post a reply or like, notifications now have buttons to view your created post or immediately delete it if your micropub endpoint supports deletes.

Settings management

Channel settings have also seen a bit of an upgrade in v3, in particular the list of feeds you are following, or have blocked or muted. You can now more easily see exactly what each feed is and click through to view it.

Micropub Queries

This one is exciting to me! Micropub queries are very experimental but if your micropub endpoint supports them it allows Together to query your own website for recently published content that can then be displayed and managed.

My site also supports various post types, so I can see my photos, notes, articles or a variety of other content.

When viewing these posts from your own site you can also edit and delete them all from within Together.

Share Target

I constantly find articles and content online that I want to interact with or store on my own website, and the Together share target helps facilitate that. Now if Together is installed as a PWA with chrome, you can natively share content to it, and then interact with that content, like writing a reply or liking the url.

Contributions & Donations

With this new release, I've also added the ability to donate money towards the development of Together if you are so inclined. Payments are handled via my own website at pay.grant.codes . At some point I'd like to make this more obvious in a non-annoying way, but I've not thought of how to do that yet.

Non monetary contributions are also easier now too! In particular opening a GitHub issue is just a click away with error messages being autofilled into the issue.

Tech details

V3 of Together was a near total rewrite. Now the backend is a GraphQL server writtin in nodejs using Apollo and the frontend is a react app that reads from the server.

Backend

The new backend for Together is a GraphQL server. It is totally independent from the frontend, so if you want to run your own version for your own project you are very much welcome to.

The backend is basically a bridge between GraphQL and Microsub and Micropub.

Microsub maps quite well to GraphQL as it is based on JF2 which is a strictly defined format.

But there are a few transformations that the Together server performs: It converts keys for all properties to camel case, and fills in a few properties with smart defaults, such as feed names are based on their url if there is no name, channels have a number of custom properties that mainly relate to Together settings, these are prefixed with "_t_"

Micropub on the other hand uses uses the much more fluid microformats2 format, which does not map nearly so well, so there is a bit of passing json strings involved and some conversion between mf2 and jf2.

For realtime updates, data is pushed from the server using GraphQL subscriptions over websockets.

On the server your microsub endpoint is polled every minute for updates, and if there is new data it is pushed to the client.

A small amount of persistent data is also stored in a mongodb database. This is mainly for user data, such as their endpoint info, token, and channel settings.

Frontend

The Together frontend has always been built with react, but now it has been updated to be much more performant using newer features. All components have been converted to use react hooks.

Misc

IndieAuth Library

A while back I made (with a lot of help from @Marty McGuire) an IndieAuth helper library that improves on a lot of issues with the auth implementation I had used before. So I now use that in together so there should be fewer issues with people trying to log in.

@postrchild/editor-base

As part of a bunch of my projects I have forms to create mf2 content for micropub posts, I had this extracted into a reusable form, but it previously was not very well made and didn't follow a lot of react best practices.

But I have also rebuilt this to be way more performant and extendable, so now it is ideal for creating both super simple micropub client interfaces as well as far more advanced, customized interfaces.

Microsub Middleware

This is another little side project that works independently of Together. It simply watches your microsub channels and then automatically performs actions on the content.

At the moment I mainly use it to roll up likes and bookmarks in my channels into one post per day instead of cluttering up my feeds.

It also has an option to only keep the most recent checkin post of all users in a channel, this lets me keep an up to date location map of my indieweb friends.

Glitch Indieweb Starter

Want to use all these awesome things I have mentioned but don't know where to start? I've made something that can maybe help you with that! indieweb-starter.glitch.me is a pretty basic indieweb website that you can remix to instantly create your own (quite basic) website that supports IndieAuth, Micropub and Microsub - basically everything you need to get started using Together.

I wouldn't recommend it as your main forever website, but it is a nice place to start out and try out some indieweb functionality before moving to something more permanent.

PostrChild Browser Extension

With the other updates I also needed to update the PostrChild browser extension. So there will be a few updates there soon. The one I am currently happiest with is the automatic caching of a new post you are writing, it makes me feel much more comfortable knowing my content isn’t going to be lost.

Granary

I have to give a shoutout to granary and snarfed! Granary is a useful tool that can be used to convert data from silos such as twitter and instagram into a more friendly formats for the open web. I use this to covert my instagram feed and twitter lists into microformats2 html to follow in Together.

Comments

Replied to https://grant.codes/2019/07/08/together

I never really messed much with RSS readers, as was a former webmaster that once learned how to feed RSS in the 1st place.