As many of you may know - The Changelog Weekly — our free weekly email covering everything that hits our open source radar — was on hiatus this summer. After personally hand-crafting and shipping 29 consecutive issues, Adam burnt out. There was just no way that he could keep up that pace.
After months of silence and a constant stream of people asking what happened to Weekly, we got to thinking. Adam was the bottleneck. His process (manually writing ERB templates in Middleman) did not scale well. We needed to collaborate, but we lacked a collaboration tool. So we turned Trello into a Content Management System (CMS) for the newsletter. It saved Weekly.
I want to be clear: we are not using Trello to manage production of the newsletter. We are using it to manage the content of the newsletter. If Weekly were a blog, Trello would be our WordPress. If Weekly were an online store, Trello would be our Shopify.
Why we do it
We think Trello makes a great CMS for this kind of content. It works so well, in fact, that it almost feels like we’re cheating. Here are some of the biggest wins:
To reduce the "bus factor," we needed more than one person curating the content. Multi-user systems can be surprisingly complex to build. Thankfully, the Trello team has put a lot of thought and effort in to that complexity so we don’t have to!
We simply add Trello users to the board and they are instant collaborators. Permissions? Handled. Password reset? Done. Avatars, multiple email addresses (awesome feature, btw), notification settings? All of these features are there for us to use.
We can even discuss the content via the built-in commenting system!
Post from anywhere
Adam and I have different editing techniques. His philosophy is Always Be Collecting. Throughout the week, whenever he finds interesting content he emails it to Trello. At the end of the week, he goes through his findings, organizes everything, and includes the best stuff in the newsletter. It’s a mark-and-sweep approach, if you will. Prior to Trello, he was emailing himself (I know, right?) and triaging a label in Gmail at the end of the week. It was all stuck in his inbox (doesn't scale).
I’m more of a completionist. When I find something to post, I want to categorize it, write about it, format it, and be done with it. Rinse and repeat.
Trello is flexible enough to handle both styles. Adam uses Trello’s Create cards by email feature instead of emailing himself. These emailed-in cards go to a board called “Radar”. This way our board for the current issue of Weekly stays nice and clean. Trello lets you easily transfer cards between boards, so at the end of the week he goes through Radar and moves the best cards over to the board for the current issue of Weekly, edits, and ships.
Bonus: since Radar is also a shared board, I can look through all of the content Adam has collected for inspiration for what I'd like to include in Weekly as well as the blog or Twitter.
Trello’s mobile apps suit my completionist style quite well.
When I find content on the go, I can place it in our Weekly board, write it up, and be done with it.
Organize with ease
Content curation is just one part of creating something people love. You also have to present that content in an organized, easily digestible fashion.
With many CMS’s, this is where we’re often left to copy/paste our content in one big text field. With Trello, we can:
- Drag and drop stories to quickly reorder them
- Move stories to different lists or boards with ease
- Create new lists to define a new section in the newsletter
- Archive stories with a few clicks
The drag and drop UI is rad. What’s even better is how Trello instantly updates the state of a board for all users. If we’re both working on Weekly at the same time, we know it, and we don’t have to take turns by “checking out” or somehow locking the work-in-progress.
I don’t know about you, but at The Changelog we freakin’ love Markdown and write all of our content with it. If Trello didn’t support Markdown, it would’ve been a deal breaker for us.
Good thing it does. This means we can write all of our content in Markdown and Trello will display it to us the same way it’ll be rendered in Weekly.
How we do it
So that’s the why. Here’s the how.
Each issue of Weekly gets its own board. We have a board called “Weekly - Boilerplate” that is a skeleton of what a new issue needs. We copy that to a new board and we’re ready to roll. Anytime we learn something new or make a change, we update the boilerplate and any future issues will inherit the new stuff.
I’ll explain how it works, but let me first save 1,000 words. Here’s a screengrab of the Trello board for Weekly - Issue #33 (click for full res version):
And here is the Issue that the board produced (click for full res version):
(The archive for that issue is here, if that’s easier on your eyes.)
The first list in Trello (named “Meta”) is unique. Each issue needs some customizations, such as the date, preview text (what people see in their inbox previews), and an Editor’s Note. This list gets processed first and discarded.
Each subsequent list in Trello represents a section in Weekly (Latest Episode, Headlines, Projects and Repos, etc.). Each card in the Trello list is the respective story in Weekly. The Trello card titles become Weekly story titles, and we use labels (thatone is for sponsored content. We also use an label for drafts) to customize certain stories.
We put each story’s content in the Description field for the card in Trello (which is parsed with Markdown). Each story also needs a link, since the entire point of Weekly is to provide interesting & useful links. There are two ways we can add the story’s link:
- The first line in the description is a URL followed by a blank line
- The URL is added as an attachment to the card
We thought having the option would be nice, but in practice we only use the first method, since it’s less steps than the second.
How does this all happen for us? Via the Trello API. We have a sub-200 LOC Ruby script that connects to the board (using the Ruby Trello gem), loops over the lists, and outputs ERB (Ruby-embedded HTML) according to the rules laid out above. Middleman consumes that output and produces HTML that is shipped off to Campaign Monitor for delivery.
At the end of the day, Adam just has to execute a simple Rake command to kick the entire process off:
rake import ISSUE=33
This kicks off a call to the Trello API and looks for a board with the slug
The code that performs this operation is not all that interesting. It’s also completely coupled to our specific needs. That being said, here is a gist that shows exactly how we do it. You’ll need to adapt this to your circumstances.
We love using Trello as a CMS. But the tools could be improved. Here’s a few possible improvements:
- Remove Middleman from the workflow. The importer could generate the final HTML itself.
- Optimize API usage. Right now it takes up to 60 seconds to run the importer. This is not a huge deal, because we only to it a few times per week, but it could be better. I’m sure we’re hitting the API more than we need to, which accounts for most of the run time.
- Make it generic. It’d be rad if we could genericize the code and start an open source project around it. If anybody is interested in that, holler and we can discuss the possibilities.