An update on what is new in Together
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.
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:
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.
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.
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.
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.
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 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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
About to try and sync all my browser bookmarks to my #indieweb site. Let's see if this works...
Hmm, looks like my new inline micropub browser extension is just about ready for testing! #indieweb
Day 94 of #100DaysOfCode: Added RSVP support to my #indieweb chatbot and site 👋 with automatic webmention sending. https://grant.codes/2017/04/12/58ee3c3a9f99400e56703316
Day 86 of #100DaysOfCode: Added a method to verify access tokens to my #indieweb micropub helper: https://github.com/grantcodes/micropub
Day 82 of #100DaysOfCode: I now correctly append query variables to urls in my #indieweb micropub helper https://github.com/grantcodes/micropub
Day 81 of #100DaysOfCode: Updated my #indieweb like feed. So many embeded animals 😻 https://grant.codes/likes
Day 79 of #100DaysOfCode: Updated the omibear #indieweb chrome extension to use my micropub library