Skip to main content
A protester with a sign in the background that reads "Fight Racism. Sexism. All Oppression."


Amplifying diverse voices on the left.

Portside is a digital media outlet that publishes and curates articles and videos of interest to the left. This curation lifts up critical voices in an age of media saturation and facilitates thoughtful, bold dialog online.

The Challenge

The outlet publishes articles to their site on a daily basis, manages several mailing lists as well as Facebook and Twitter accounts, all through volunteer power. The level of activity and impact they have as an all-volunteer community is impressive, but their Drupal 7 website, initially a powerful publishing platform, was aging. The site wasn’t responsive and adding new features on top of an older codebase proved increasingly difficult.

Portside needed an updated design that worked across devices and with a set of authoring and publishing tools that could automate as much of their workflow as possible, freeing their volunteers to focus on writing and curating content.

The Approach

Authoring Experience: Simple, But Not Constrained

Portside’s advantage is a large moderator team. They have 20 dedicated volunteers who scour the web for the best reporting happening on the left. The technical background of the team spans the spectrum. It was imperative that we develop an authoring experience that was simple for anyone to use, without sacrificing functionality.

Building off the improved authoring experience Drupal 8 offers, we tested the pasting of content from common sites Portside republishes, ensuring the various markup coming in from other sources had sensible CSS rules within Portside so that articles display nicely.

Embed Rich Media

When using dated software, we become adept at workarounds. An infamous one for Portside moderators was embedding tweets. Their old system did not support Twitter embed codes. The workaround was to take screenshots of tweets and link the image to the original tweet. We used the Media Entity Twitter module in concert with Drupal Core’s Media module to enable editors to seamlessly embed tweets in their articles. Goodbye workarounds.

One thing that did work well on their Drupal 7 site was embedding YouTube and Vimeo videos. With the WYSIWYG Media Embed module they simply needed to paste the url into their article and it would display properly. Unfortunately there was no Drupal 8 version of this module. So we helped port the WYSIWYG Media Embed module from Drupal 7 to Drupal 8. Now authors can easily embed videos from YouTube and Vimeo.

Customized Styles

CKEditor allows for the defining of custom styles that authors can choose to apply to text. This was helpful for authors who aren’t as versed in HTML. Authors can now style text with terminology meaningful to them, but that uses semantically correct HTML under the hood.

Screenshot of custom styles We added custom style options to the WYSIWYG editor so moderators can style content using terms familiar to them, but producing standards-compliant HTML and CSS.

Publishing Workflow: Automated and Error-Proof

To further save editors’ time, we looked for ways to automate tasks. We identified three areas: publishing posts at a set time, easy posting to social media platforms, automated posting to listservs.

Scheduled Publishing

Portside publishes their articles each day at 8pm Eastern. This gives authors a grace period to fix any issues with their article before it publishes. We programmed this into the site so that when an author creates an article they can either save it as a draft, or save it as an article ready for publishing. Each day at 8pm Eastern Time articles in the Draft state remain so, while Articles in the Ready state are published.

Automated Posting to Listservs

Portside subscribers can stay current with content in several ways:

  • be emailed each new article published
  • be emailed articles of a certain category (General, Labor, and Culture)
  • be emailed daily with a recap of the articles published the previous day (Portside Snapshot)

We built an integration between the website and their listserv software, Listserv, so that when an article is published it is sent to the appropriate listservs. For Portside Snapshot, all articles published on the previous day is aggregated into an email template and sent out.

With automation there is always the risk of human error. We built in safeguards for foreseeable mistakes. Each article is held in a queue which awaits moderator approval before being sent out. Also, if an article is published with an issue, an author can fix the mistake and then resend the article to the listserv. The moderator can then dismiss the first article with the error and accept the follow up corrected article to be sent out.

Screenshot of checkbox to resend an article to the listserv Moderators can resend an article to the listserv queue when they've made an update.

Post to Social Media

We streamlined their workflow further by equipping authors to post articles to Facebook and Twitter during the authoring process.

We did this by contributing to the Drupal Social Initiative, a working group harmonizing social networking functionality in Drupal. By making it easy for authors to post content from their website to social media platforms we intend to combat the disturbing trend of more and more content living behind walled gardens, a threat to the Open Web. Offering seamless “post to” workflows allows authors to keep control of their content while easily promoting it to their followers on social media platforms.

The Social Post Facebook and Social Post Twitter add a configuration page for users to link their website account with their respective social media accounts. Content published by a user is then automatically posted to their respective social media accounts.

For Portside, we took this one step further by adding a text field on the article content entry form. This field allows authors to enter the text they wish to post accompanying a link to the content they are publishing.

Screenshot of social media post fields. When moderators include text in the social media fields the article is automatically posted to Facebook and/or Twitter.

Meaningful, Relevant Editor Dashboard

Twenty editors posting to the site, site visitors suggesting articles to be posted, multiple articles in draft while others are ready but yet to be published-- there’s a constant flurry of activity on; enough to make your head spin. Editors needed a dashboard to easily keep track of everything.

We enhanced Drupal’s default administrative page for content to show the article’s custom workflow state and the Portside Date (the date an article is set to be published). To help editors focus just on articles yet to be published we created a Moderated Content page and for articles queued up to be published they now have a Scheduled page.

Screenshot of content administration page. We customized Drupal's default administrative content page to show the moderation state each article is in. Screenshot of the scheduled content page A custom administrative page shows which articles have yet to be published, but are scheduled to be.


With a new and improved workflow, the Portside team is now able to efficiently draft, revise and schedule videos and articles for their readers.

Since we launched the redesign in February 2018, has seen a 39% increase in users visiting the site, 23% increase in pageviews, 13% increase in session duration and a complimentary 11% decrease in bounce rate. This is all in spite of Facebook’s algorithm changes which severely hurt Portside and other independent publishers.

We continue to work with Portside to monitor the site’s performance, finding additional ways to improve the site and contribute to the independent, left media that is so critical in these times.

Project Details




Drupal 8 and Give module

development, migration, and training

Benjamin Melançon, Clayton Dewey, David Valdez, and Michele Metts

Rom Creative