Nerd Alert 134: What will you listen to this weekend?


  Ben: Jenn Schiffer's essay about not policing code ecosystems makes a good point: it's not a good thing for coders or for code ecosystems if people get chased out for not meeting some arbitrary bar of worthiness.

  Julia: The Schools of Journalism dives into the varying communities in the journalism industry, the “interesting” times we live in, and ways to approach the future.

  Kay: An incredibly inspiring coder.

  RC: The guy who invented those annoying password rules now regrets wasting your time.

  Inndy: The Internet Archive is posting digitized 78prm records, and there are now a couple of Tweetbots: @great78project posts every 10 minutes; @78_sampler posts every 2 hours.


No Office Hours next week — we're all attending WordCamp for Journalists in Denver. If you're in town, come say hi 👋 – and be sure to join us for Contributor Day on Saturday, 8/19, to work on the next Largo release!


It's a map of the United States, with some states more shaded in green than others, according to which have more Largo users.
We’ve collected a partial list of sites using Largo in the wiki on INN/Largo. If you know a site that's not in the list, let us know!


August 17-19: WordCamp for Publishers.
August 18: Last day to apply for the Poynter-NABJ Leadership Academy for Diversity in Digital Media.
September 29: Last day to apply for a Knight Visiting Nieman Fellowship.


Screenshots flicker past of Reveal's Sanctuary interactive, showing: Cook County Illinois, Clark County Nevada, Miami-Dade County Florida, and Chicago.
Reveal's "What makes a sanctuary?" compares policies between different sanctuary cities and states.

The Coral Project just released a set of guides designed to help people in journalism improve their strategy, skills, and understanding for effective community engagement.

ProPublica and have added an additional 1.9 million electronically-filed Form 990 documents to the Nonprofit Explorer database, bringing the total to more than 3 million records.

The New York Times has open-sourced a text-message-based facial-recognition system for members of Congress. It's called Who the Hill.


Center for Public Integrity is hiring a data editor in DC.

The Texas Tribune is hiring an interactive designer/developer.

Chalkbeat is hiring a digital producer.

If you're looking for general jobs in nonprofit news, check out the main INN newsletter and sign up here to get it in your inbox every Tuesday. Two INN newsletters are better than one!


LISTEN: The Preytorians 📻

WATCH: Surfers playing with a floating dock 🌊

EAT: 17 different home-made ramen recipes 🍜

DRINK: A vanilla and fresh cherry bourbon cocktail 🍸

Watching MP3s being copied is nowhere near as fun.

A record press makes a record by pressing a blob of vinyl between two grooved platens.


Pym Shortcode plugin update: version 1.3.1

Last week, NPR released Pym.js version 1.3.0, and earlier this week released 1.3.1. These feature releases introduced optional scroll tracking, allowing the child iframe to know where the browser is on the parent page. You can read more about how that's implemented, and how it can be used, on the NPR Visuals Team blog post announcing Pym 1.3.0. Pym.js version 1.3.1 added a function getParentPositionInfo to the Pym child.

Pym Shortcode version 1.3.1 brings you the latest version of Pym.js, as well as the following improvements:

  • Adds an id="" attribute to allow setting of custom IDs on embeds, for Github issue #21. The id="" attribute is useful if you want to load a new embedded page inside the iframe and maintain Pym functionality.
  • Adds a class="" attribute to allow setting custom of classes on embeds, for Github issues #22 and #23. The class="" attribute allows you to, among other things, add layout classes to embeds so they take a different shape on your page.
  • Adds a default class name pym to all embed-containing <div> elements output by this plugin, and a filter pym_shortcode_default_class to allow changing the default class or removing it.

You can download the new version of the Pym Shortcode plugin through your WordPress dashboard, on the plugin repository, or on Github.

If you have feedback on the plugin or would like to contribute to development of the Pym Shortcode plugin, check out our contributor guidelines and join the conversation in the plugin's GitHub issues or in our Slack.

Nerd Alert 131: Robots are people!


What we're reading this week

  Ben: Is it safe to start using CSS Grid? Rachel Andrew, CSS Working Group invited expert, argues yes.

  RC: I’m really excited to check out Alley Interactive’s Voice WP project.

  Julia: The News Media Alliance has called on Congress to allow publishers to negotiate collectively with Google and Facebook – get more details from the New York Times and the Atlantic.

  Kay: INN is a fully remote team, so we’re always looking for new ways to improve our productivity across time zones. The team at Hanno put together a fantastic Remote Starter Kit and we’ll definitely be adopting a trick or two.

  Inndy: I’m a robot (or a puppet, depending on your interpretation of my life), so what I’m about to link to doesn’t apply to me. I’m willing to bet it applies to most of you who are reading this email, though. You’re probably a human, probably using software that probably lives outside your body. You may not have written it, might not own the box it runs on, might not even have paid for the use of the software. But that software is still part of you, right? Give the Universal Declaration of Cyborg Rights a read, and then refresh yourself on the Universal Declaration of Human Rights.


Stop us if you've heard this one before

We interrupt your regularly-scheduled newsletter to inform you that the INN product and technology team has a new brand! Now known as INN Labs, we’re still the same nerds you know and love. Check out our new home at


Our projects, manifest

We've built a WordPress plugin to make using the Knight Lab storytelling tools easier. Now anyone can begin using these tools in WordPress without any coding skills!

Timeline, StoryMap and Juxtapose get oEmbed support, while Soundcite gains a shortcode. Read more about it.


Stay in the know

Last Call registration for the NABJ Annual Convention is open until July 19.

Registration for the AAJA National Convention ends July 19.

Apply for the Grist fellowship program by July 31.

If you're going to SRCCON, sign up to bring board games and teach hobbies.

Today is the last day to buy a ticket to WordCamp for Publishers and still get guaranteed meals, swag, and events access. Here's the full schedule.


Work we admire by our journalism peers

Public Source launched Small Town, Pennsylvania, a beautifully illustrated multipart look into what life is like outside of the big cities.


Good jobs with good people

NPR is hiring a project manager/scrum master, a systems administrator, a web developer, a technology manager, a mobile developer, and a ton of interns.

ProPublica is hiring a data reporter and an editorial designer.

IRE is hiring a training director.

The Marshall Project is hiring a senior investigative reporter.

The Center for Public Integrity is hiring an audience engagement editor.

The Pew Research Center is hiring a DC-based senior developer for WordPress, PHP and JavaScript,

If you're looking for general jobs in nonprofit news, check out the main INN newsletter and sign up here to get it in your inbox every Tuesday. Two INN newsletters are better than one!


Gather ye rosebuds

LISTEN: Human After All.

WATCH: Google DeepMind learning to run.

EAT: Sun-dried tomato and mozzarella quinoa veggie burgers.

DRINK: Roasted-peach lemonade.

The world's longest-burning light bulb.

People had a choice. They could continue wandering through the endless darkness, an absence of everything they loved, an endless void of disappointment and loneliness ... or they could look down, and embrace what they always have loved.

Meet the Team: Julia Smith, Director, INN Labs

A number of people sit on a sectional couch underneath a projection screen.
Julia, second from left, participated in a data journalism panel during the Walkley Storyology conference last summer.

In part 3 of our "Meet the Team" series, we'll get to know Julia Smith, our awesome director!

Julia joined the team in February of 2016 as our design lead, stepped in full-force as acting director in February, and now guides us all with her fearless leadership.

Julia is a data journalist and technologist who has experience in news design and software development in addition to agency experience. She joined us in 2016 from the Center for Investigative Reporting, where she was a Knight-Mozilla Fellow and news application developer.

And, that's not all! Her work has also been recognized with an IRE Philip Meyer Award and a NATAS Emmy Award for New Approaches in Current News Coverage. Her editorial work has appeared in National Geographic, Reveal, The Chicago Reporter, and The Omaha World-Herald.

Here's some lesser-known facts about Julia, in her own words:

Where are you from?

Omaha, Nebraska.

How long have you been at INN?

1 year, 4 months.

What's your title and what do you do?

Director, INN Labs – I lead this (fabulous!) team, provide direction on product development and client projects, and still do a bit of coding.

What's your favorite part of your job?

Developing innovative products that lay the foundation for independent news orgs to present their best work online.

Where do you get your news?

Podcasts from NPR, Reveal, NYTimes; Twitter for general news from Axios, Washington Post, ProPublica, local sources; Print subscriptions for Bitch Media and the Sunday Omaha World-Herald.

Who or what inspires you?


What are your hobbies outside of work?

I enjoy visiting museums, playing piano, and searching for the best sour beers.

What's your favorite part of working remotely?

The flexibility to work from anywhere.

What's your favorite or most unusual place you've worked from?

Most unusual: the backseat of a moving Subaru somewhere on I-29 between Omaha and Kansas City.

Favorite place: Oakland, CA.

What's your Myers-Briggs personality type?


Favorite kind of pie?

Apple – not at all exciting but totally delicious.

What cartoon character would you be?

Schroeder from Peanuts.

If you could have a super power, what would it be?

Time travel.

Are you a dog or cat person?

Dogs, definitely. Kittens are cute from a distance.

Favorite album or book?

Lateralus (Tool).

Favorite place you've traveled to?

Queenstown, NZ – it's super beautiful.

Most recently used gif?

A woman dramatically turns to face the camera, and points at you. She speaks, and as she does so, words appear in the background: YOU GOT THIS.

Describe yourself in 5 emojis or less.


Office Hours June 30: INN WordPress Plugins

We'd like to hear from users of our WordPress plugins this week during our open office hours. Join us from 2 to 3 p.m. Eastern in our weekly video chat and in the notes to talk about what you want to see from our plugins.

We maintain:

We'd love to hear what feedback you have on the plugins and ideas you have for their future development.

Join us from PC, Mac, Linux, iOS or Android at

Or by telephone: +1 408 638 0968 (US Toll) or +1 646 558 8656 (US Toll)
Meeting ID: 298 377 456
International numbers are available.

Notes for this week's office hours will be in this etherpad.

Our ongoing office hours schedule is in this Google Sheet.

More about our office hours:

Nerd Alert 126: Do Self-Driving Cars Dream of Analog Pedestrians?


RC: Why printers add secret tracking dots.

Julia: Stardust is a GPU-based data visualization library. These examples look pretty powerful.

Gabe: Jane Solomon used Python to analyze gun emoji pairings for all you linguist nerds. ?

Kay: Populace uses data from social media and other sources to display crowd densities - making it easier to find breaking stories. Read more about it here.

Ben: An update to the survey of newsroom boundary servers I ran a couple weeks back: only five found so far. If you know of any others, please add them to the list.

Inndy: I like the idea of cars talking to each other.


Office Hours today will feature our very own Kay Lima talking about the Google Search Console. Join us at 2 p.m. Eastern on Zoom:


B Cordelia Yu is a content and editorial strategist who is "totes available to join yer product and community teams."

The Personal Democracy Forum was last week and the speaker who excited me most was Audrey Tang, Taiwan’s digital minister, on stories from the future of democracy. She told us how civic hackers and journalists are using open data to educate about public policy and are building tools for inclusive participation to create the country’s laws†. The speaker before her, Colin Megill, talked about how they’re using machine learning to scale the process.

Normally I’m skeptical of folks touting tech as a solution to social complexity, but Taiwan’s civic hackers, journalists, scholars, and policymakers are coming together to create spaces for direct public participation in policymaking. Coming out of authoritarianism 30 years ago, their journos are sussing out what it means to be a free press in the time of the Internet—without our institutional baggage. So as I watch Taiwan, I wonder what it would mean to evolve our work from broadcasting truth to partnering with communities to discover truth and become bridges to speak to power.

† Is Taiwan a country? It’s complicated.

Be a guest contributor! Read more about that here and shoot us an email at if you're interested. We'd love to hear from you.


Tickets are now on sale for WordCamp for Publishers!

Investigative Reporters and Editors' annual conference is in Phoenix next week, and Julia will be there. Say hi!


A neon sign, red lettering "OPEN" surrounded by a light blue circle.

Last week, we linked to a security article on Source. This week, we get to link to the entire Security Week on Source. It’s got a guide to practical paranoia, an interview with the Director of Newsroom Security at the Freedom of the Press Foundation, and a training guide for digital security in newsrooms. Give ‘em a read!


The Coral Project is hiring a Lead Engineer.

National Geographic is hiring a Director of Cartography.

WBEZ is looking for an Interactive Producer.

The Federal Elections Commission seeks an IT Specialist.

If you're looking for general jobs in nonprofit news, check out the main INN newsletter and sign up here to get it in your inbox every Tuesday. Two INN newsletters are better than one!


LISTEN: Beethoven’s Sonata No.29 in B-flat Major, "Hammerklavier" ?

READ: Oil's Pipeline to America's Schools: Inside the fossil-fuel industry’s not-so-subtle push into K-12 education from The Center for Public Integrity.

WATCH: A Ghibli double feature.

EAT: Merguez with herby yogurt.

DRINK: Plenty of water.

A large truck drives along a dirt track until it smashes into a large metal pipe. The bumper goes under the pipe, the hood goes over the pipe, the truck comes to a stop in a cloud of dust.

From 2014, a truck barrier test.
No robots were harmed.

June Book Club: Scraping For Journalists

Our June News Nerd Book Club selection is Scraping for Journalists by Paul Bradshaw.

From the description on Leanpub:

Scraping for Journalists introduces you to a range of scraping techniques - from very simple scraping techniques which are no more complicated than a spreadsheet formula, to more complex challenges such as scraping databases or hundreds of documents. At every stage you'll see results - but you'll also be building towards more ambitious and powerful tools.

You’ll be scraping within 5 minutes of reading the first chapter - but more importantly you'll be learning key principles and techniques for dealing with scraping problems.

Unlike general books about programming languages, everything in this book has a direct application for journalism, and each principle of programming is related to their application in scraping for newsgathering. And unlike standalone guides and blog posts that cover particular tools or techniques, this book aims to give you skills that you can apply in new situations and with new tools.

Scraping for Journalists: How to grab information from hundreds of sources, put it in data you can interrogate - and still hit deadlines. By Paul Bradshaw.

We'll be meeting via Zoom video call at 1 p.m. Eastern on Wednesday, June 14.

Here's the call link or you can join by phone at (408) 638-0968, meeting ID: 709 684 655.

We'll also be taking notes in this etherpad.

Hope to see you then!

(We missed April. Sorry 'bout that – we've been busy!)


Building A WordPress Donation Form Using Gravity Forms, MailChimp and Stripe

Please note: The following article contains outdated information has since been updated. Please use the up-to-date guide here

Here at INN, we've built a lot of donation forms for our members. Over the last year, we've created a standard set of forms and integrations that you may find useful as a starting point for building your own donation forms.

Note that this is a loooooong post and if it seems overwhelming, we'd encourage you to stick with it and experiment with these tools.

If you get stuck or just want to hire us to help, we're also happy to work with you to get you up and running. Now that we've standardized a lot of this work, we're often able to get a site using our Largo WordPress platform up and running with a donation form that looks and works great in just a few hours!

Get in touch if you'd like to discuss that option.

Here we go!

We start with WordPress and Gravity Forms, and add the following plugins:

We typically use Stripe to process payments because the fees are lower and it offers more flexibility, but Gravity Forms has add-ons for PayPal and several other payment gateways if you'd prefer to use one of those.

Stripe charges 2.9% of the transaction total, plus a $0.30 flat fee per transaction (with no monthly or annual fee). We use the subtotal merge tag plugin to create a checkbox that gives users the option of paying the fees so that their entire donation amount goes to the organization they're choosing to support.

In addition to collecting money, donation forms are an excellent place to ask donors if they want to become newsletter subscribers. We add a checkbox to our default donation form and conditional logic and the Gravity Forms MailChimp Add-On to automatically add donors to an organization's mailing list.

Gravity Forms also allows you to automate the sending of receipts and donation acknowledgements and also to send notifications via email or Slack when a new donation is received.

For our sites, we've created some boilerplate code containing default styles and a clean WordPress template for use on these donation pages. We've also included importable form templates, if you'd like to use our form designs.

Does this sound like something you want to use? Read on - the full set of instructions are below.


First, get the following things:

  • Gravity Forms Developer license in order to download two of the plugins from Gravity Forms. A developer license costs $199/year and will allow you to use the plugin and any add-ons on as many sites as you would like. For INN members, we pay for a developer key for all sites we host. If you want to use our group license, just contact our support team and we'll help you get that set up.
  • Stripe API key for handling purchases. (Stripe charges a transaction fee for most accounts; following this instruction set will help you cover that transaction fee)
  • MailChimp API key for sending a newsletter to your subscribers. (MailChimp's pricing varies based on mail volume)
  • An SSL certificate (if you want to accept payments directly on your site). For sites we host, these are available for free through our hosting company (via Let's Encrypt). If you'd like us to request a certificate on your behalf, just open a support ticket and we can take care of this for you. For sites using other hosting you'll need to check with your hosting provider to see what options are available.
  • (optional) a reCaptcha site key, to help prevent spam submissions

Once you have your credentials in hand, install these plugins:

All of those must be installed manually, because they're not available in the official plugin repository. If you have FTP/SFTP access to your site, you can upload them to the plugins directory of your site using an SFTP client or similar program. has instructions on how to do this.

You can also install them from the WordPress dashboard by going to Plugins > Add New. Click on the Upload Plugin link next to the page title and you can upload the zip file of the plugin you'd like to add.

Once you've installed the plugins, you'll need to also activate them. To do this, go to the Plugins screen and find the newly uploaded plugin in the list. Then, click Activate to activate it.

For sites we host, we have to install and activate the plugins for you. If you'd like these plugins enabled on your site, just contact our support team and we'd be happy to assist.


Each add-on has a configuration section in the WordPress dashboard, at Forms > Settings.

Gravity Forms

You'll need to enter your Gravity Forms support license key in the Gravity Forms plugin settings.

Gravity Forms Stripe Add-On

The Stripe add-on has four keys that you'll need to enter:

  • Test Secret Key
  • Test Publishable Key
  • Live Secret Key
  • Live Publishable Key

You can create/access these from the API Keys tab of the Account Settings page in Stripe.

There's also a set of radio buttons for switching your site from using the Test API to the Live API. Note that you'll need to switch this both here on the settings page and in the Stripe dashboard itself. If you're using Stripe for the first time, note that you'll also need to have provided your bank information before Stripe will allow you to switch to Live mode.

Typically, when you're setting up a new form, you'll use the Test API to run some test transactions using their testing credit cards to make sure everything works before switching your form/site to Live mode.

Follow the instructions on the Stripe add-on settings page to add your site's Gravity Forms callback hook to your Stripe account. If you are testing the form on a staging site, note that the callback URL should be your live site or else the callbacks will not work properly (this is something to also double check on your site before making the new form live).

Gravity Forms MailChimp Add-On

If you're going to use your donation form to collect email addresses for your MailChimp newsletter, you need to add your MailChimp API key.

You can get a MailChimp API key by logging in to MailChimp and going to Account > Extras > API Keys. There, click on Create A Key and give it a name (something like "Gravity Forms" should suffice) and then copy the newly created key and add it to the Gravity Forms MailChimp Add-On settings in the field provided.

Create your donation form

We've created a couple of sample forms based on the forms we've developed for a few of our members/clients. We recommend importing one of these forms first so that you can examine how things are put together before attempting to create a form of your own. You might even find that one of the example forms will work well for you with very little modification!

Create form by importing

Gravity Forms allows you to import forms from JSON files, so we've provided two example donation forms that you can download and import to get started.

To import a form, save the importable .json file from either of the above links, then upload it following Gravity Forms' import instructions.

Once you've imported a form, find the form in the list of forms and click "Edit." From here you'll see the various form fields and how they're configured. Note that each of these examples uses conditional logic to show/hide certain form fields depending on the options a donor selects in the form. For more on how conditional logic works in Gravity Forms, see the relevant section of their documentation.

If you like how one of the example forms works, you can move on to setting up notifications, confirmations and the MailChimp and Stripe feeds to ensure they are set up correctly with your site's information.

Refer to the Gravity Forms documentation if you have specific questions.

Create a form from scratch

After you've imported one of the forms above and examined it to see how it's put together, you may want to try your hand at creating a form that's more tailored to the individual needs of your site.

A few general best practices for donation forms:

  • Include a default donation amount (we find that $20 is a good default for one-time donations and $10 is a better default for recurring donations) but make it easy for people to specific their own amount.
  • Provide the option to make the donation a recurring donation on a monthly or yearly basis. Both Gravity Forms and PayPal have options to set up recurring donations and this is a great way to save yourself a lot of time and effort in trying to get donors to renew their membership in the future.
  • If you're a nonprofit, you'll need a way to send a tax receipt to the donor: email addresses and postal mailing addresses both work. Personalized notes are best, particularly for first-time donors or those who have consistently supported you, but Gravity Forms also allows you to automate the sending of receipts (see the section below on setting up notifications).
  • Request as little information about a donor as possible. You want to make it as easy as possible for people to give you money and asking for too much information or having a very long form will cause many donors to give up and never complete their donation. Make sure you are only collecting information that you actually intend to use, and wherever possible, explain how that information will be used and why you're collecting it.
  • Collect the user's email address for confirmation and thank-you emails related to this transaction, but do not add them to your mailing list without their explicit permission. In most of our forms, we' do this by adding a checkbox (usually checked by default) to opt a donor into receiving further messages from the organization.
  • In general, single page donation forms are best unless the form is very long. With Stripe, you can add the necessary credit card fields at the bottom of the form directly before the submit button. With PayPal, you'll have to send a donor off to PayPal to complete the transaction. This is one of the reasons we prefer Stripe. Note that if you handle the credit card information directly on your site, you will need to have an SSL certificate that is configured correctly to serve your donation page over https.
Set up notifications

You'll probably want to receive notifications from your website when someone submits a response to the form. To do this, find your form in the list of forms, hover over it, and then click "Settings" when that text appears.

Under the "Settings" tab are at least three tabs: "Form Settings," "Confirmations," and "Notifications" are the default ones.

Under Confirmations you can set what happens when a donor submits the donation form. Gravity Forms gives you a couple options here but we typically prefer sending people to a thank you page after the form is successfully submitted. If you don't want to create a thank you page, you can also just choose to display some confirmation text.

If you want to send users to a thank you page, first you need to first create a WordPress page to send them to. Here's an example on INN's website. Once the page is created, go back to the settings for the form you're working on and click on "confirmations". Now, select the "Page" option, choose your page from the drop-down list of pages, and save the confirmation:

A screenshot of the Gravity Forms Confirmation settings, showing the choice of a "Page" confirmation with the "Thank you!" page chosen.

Under the Notifications tab, you can set which email notifications are sent when a form is submitted. Typically, you'll want to send an email to one or more members of your staff to let you know a new donation has been received and also send an email to the donor with the details of their donation.

In the INN example form, two notification emails are sent on submission:

The first one is sent to the site administrator, with a subject of {form_title} and message body of {all_fields}. These form fields surrounded by curly brackets are Gravity Forms' merge tags, and allow you to put information from the form into the email. Note that you can send notifications to multiple email addresses by adding each address separated by commas in the "send to email" field.

The second confirmation is sent to the email address provided by the donor in the form, thanking them for their donation and again using the {all_fields} merge tag so that the donor has a receipt for their donation. Note that you can use conditional logic here if you'd like to send different confirmation messages to different segments of donors based on the information they submitted. So, for example, you could send a different confirmation to one-time vs. recurring donors, or an automated response to low-dollar donors but send yourself a notification for large-dollar donors so you can send them a personalized note.

Set up the link to Stripe

The Stripe connection for each form is configured in the form's settings area, in a "Stripe" tab that appears underneath the "Notifications" tab. The Stripe settings area allows you to create different "Feeds" for this form.

A "Feed" is a type of transaction and a single form can have multiple types of transactions. In the INN example, there are three feeds: a monthly recurring donation, a yearly recurring donation, and a one-time transaction. These donation types are respectively categorized by Stripe as "subscription," "subscription," and "products and services."

You don't have to have multiple feeds. Sometimes all you want to do is create a one-time donation form. If that's the case, you can skip ahead to the "One Time Donation" example below, and ignore the "Conditional Logic" box.

When creating a donation form with multiple donation types, add a "Radio Buttons" element to let the donor choose between "Per Month," "Per Year," and "One Time".

A screenshot of a selection box for choosing between "Per Month", "Per Year", and "One Time"
An example form element with radio buttons.

Then, in the Settings area for this form, create three Stripe feeds, matching the donation types.

A screenshot of the settings page for a Monthly Recurring Stripe feed, showing the options as they are set when the INN form is imported.
A screenshot of the settings page for a Monthly Recurring Stripe feed, showing the options as they are set when the INN form is imported.
A screenshot of the settings page for a One Time Donation Stripe feed, showing the options as they are set when the INN form is imported.
A screenshot of the settings page for a One Time Donation Stripe feed, showing the options as they are set when the INN form is imported.

If you have multiple feeds set up (because you have multiple types of donation) make sure to check the "Conditional Logic" box and set it to only process that feed if the value of the "Donation Type" form element you chose is set to the radio button label that corresponds with this donation feed.

The payment amount should be "Form Total" so that you capture the processing fee, if that option is enabled.

You may also want to send over other information to Stripe so that you have other metadata associated with the "customer" record that will be created when a payment is processed. The "metadata" section here allows you to provide the name(s) of the fields as you want them to appear in Stripe and then map those to the form fields submitted on your site.

Once you have this set up, run some test transactions. Make sure that the Gravity Forms Stripe Add-On is in "Test" mode by going to Forms > Settings > Stripe and checking the "Test" option for the API. Make sure your API keys are entered. Press the "Update Settings" button to make sure. Then grab some testing credit card numbers from the Stripe website and test every option on the form, confirming with in the Stripe dashboard that the test transactions completed successfully.

Set up the link to MailChimp

Most of the sites we work with want to also give new donors the opportunity to sign up for one or more mailing lists. We use the Gravity Forms MailChimp add-on to enable this option.

Before you set up a MailChimp feed in Gravity Forms, you'll need to have already created the mailing list you want to add people to and also make sure the fields you want to send over are configured correctly in MailChimp.

Once you have the Gravity Forms MailChimp Add-On installed and enabled, a MailChimp tab will appear in the form's settings section. Here, you can configure which of the submitted form fields match up to MailChimp's fields in its database for subscribers.

There is a checkbox to enable double opt-in, so that the donor receives an email to confirm that they would like to sign up to receive your newsletter, but it's commonly assumed that by checking the "Sign me up" checkbox, your donor has consented to receiving your newsletter.

At the very bottom of the MailChimp settings tab for the form is a checkbox labeled "Conditional Logic." Check this box to show the conditional configuration options. We're going to change the conditions so that the MailChimp integration only sends the email address to MailChimp when a box is checked.

a gif showing how to change the conditional logic works
Choose the field name from the left box, the "is" equivalency option from the middle box, and the text of the checkbox from the right box.

Setting up styles for forms

The forms that you've set up above will work as-is, but they're not particularly pretty. Gravity Forms' form HTML is complex and contains some weird opinions. The stylesheets that Gravity Forms includes are similar: weirdly scoped, curiously specific, and often a bit perplexing.

There are several ways to dequeue Gravity Forms' default styles; Zack Katz has an excellent blog post detailing the ways to dequeue them.

However, because Gravity Forms' styles are at least partially useful, we keep them enqueued and modify them. Here's the modifications we make:

These example styles are scoped to the form IDs and they also depend on a wrapper class that can be added to your form settings but they may not be immediately applicable to your form if the form ID or CSS class is different. We hope that these are at least useful as a starting point.

Good luck!

We hope this was a helpful introduction on how to setup donation forms using WordPress, Gravity Forms, MailChimp and Stripe.

Again, if you found all of that overwhelming and would like to hire us to help, just reach out and we'd be happy to help get you up and running!

Nerd Alert Issue 20: Infinite Monkeys

Nerd Alert banner

There's an RFC for everything.


What we're reading this week

  Adam: In earlier days we focused a lot on creating pixel-perfect designs for the web tailor-made for an “ideal” viewport or standard screen size, but with the advent of responsive design and the proliferation of different devices and screen sizes we increasingly have to embrace the chaos and understand that our designs will simply never be perfect.

  Ben: The U.S. federal government has two flagship digital dev shops: 18F and USDS. Ben Balter’s post discussing similarities and differences between the two is pretty interesting.

  Dani: Do you fly often for work or pleasure? This algorithm calculates which US airports and airlines suck.

  Kaeti: Ted Irvine writes thoughtfully about why we should all take vacations. For those of us fortunate enough to have vacation time, it’s good to remember that work isn’t paramount. Rest makes our work — and lives — better. So … who wants to go to Mexico?

  Meredith: What happens to metaphors like left of the dial when FM Radio disappears?

 Nick: It’s been a big challenge for me to go from comfortably commuting to an office filled with people to working remotely from home surrounded only by cats. So many of the remote working articles and blog posts I’ve read take it for granted that the reader is comfortable with this social isolation, but I’m not. This article on How to find the perfect remote working setup for you is one of few I’ve found that considers the possibility that remote working might be hard for you, and has some great tips on your options without quitting your remote work job.

  Ryan: Learn all about the nearly four thousand satellites orbiting the earth at this very moment.

  Will: “Designing News: Changing the World of Editorial Design and Information Graphics” by Francesco Franchi has been sitting on my coffee table for a year and this week I finally got a chance to pick it up. It’s packed with interesting case studies and analysis of both print and digital products. Read it cover to cover, or just skip through the sections. It’s expensive — so find it at your local library.

  Bert: Oook ook oooooook.


Gather ye rosebuds

LISTEN: From NPR, a step in the evolution of jazz piano.

COOK: Chef Monkey's fish burritos.

WATCH: A conversation with Koko.

GIF: It's Shakespeare, I tell you.



Nerd Alert Issue 19: A New Player Has Entered The Game


We have a new apprentice!


What we're reading this week

  Adam: When choosing icons, remember that clarity is key and sometimes the best icon is no icon at all.

  Ben: Everyone likes a good gif, right? Lena Groeger thinks there's something special about looping images. Here's her talk at OpenVis Conference 2105, and here's the slide deck. It's a treasure trove of gifs, and it's actually pretty interesting. Small multiples, gifs, or both?

  Dani: I'm a huge data-algorithms nerd, and I particularly get excited when these tools are used to solve everyday problems in our communities. While Google Maps may be able to tell you if the route you're about to take has traffic, the Traffic Prediction Project hopes to use data to predict jams an hour in the future.

  Kaeti: This set of CSS icons is fun and flexible. Check out the GitHub repo here.

  Meredith: Audiences fascinate me.   Does it matter if an institution has aglobal audience and zero visitors?

 Nick: Edsger Dijkstra was an ACM Turing award-winning computer scientist who conceived Dijkstra’s Algorithm which finds the shortest distance between two nodes in a graph, a fundamentally important algorithm in these networked times. He wrote a great deal of correspondence with fellow scientists, in English and in Dutch, and it’s extremely readable. The CS department at the University of Texas has an archive of scans of his notes from 1962 to 2002. Some are even funny; try How “They” Try To Corrupt “Us”.

  Ryan: I've always had trouble understanding SQL joins. These two links explain, in simple terms, what each type of SQL join does and how each can help you. Take the time to really own this knowledge so you can have the confidence that your SQL is as efficient and accurate as it can be.

  Will: “You know, the machine challenged me, so I challenged the machine.” An interesting look into how computers affect our lives and shape our characters.

  Bert: Beep peep xkcd beep boop.

This week's guest contributor: Ryan Cavis, Public Media Platform

We live in a world of web comments. And it's a cold, cruel world orbiting an unnormalized and indifferent sun. The "surface web" we spend all day browsing and indexing is a drop in the data-bucket compared with the blog comments, online communities and discussion boards of the "deep web". Estimates have put this non-indexable part of the web at over 400x the size of the indexed web.

Now before you jump out that window from despair - Diffbot recently announced their Discussion API for analyzing just such data. And hey, it's an API - which means normalization and repeatability for developers! The same way you might monitor and interpret Facebook and Twitter comments, you can track pretty much any discussion platform (Javascripty or not) including Disqus, Livefyre, WordPress, Blogger, Hacker News, and apparently pretty much anything I could think to throw at it.

So why not go ahead and read the docs, then take it for a test drive? Go ahead. You've earned it.

Each week we ask someone from outside our team to contribute a link, tool or idea. Are you our next guest star? We think you might be. Send us a note at


Work we admire by our journalism peers

Dallas Morning News' Rolodex is in the news this week. It's a Django-based directory of people and the organizations they belong to. Users in your newsroom can add people, orgs, and relationships to the database, and see the relationships with some network graphs. Here's a Nieman Lab writeup, a live example rolodex, and the project on GitHub.


Gather ye rosebuds

LISTEN: From the New York Times' article about the new THX trailer: Bach's Fugue in B Minor.

COOK: Kimchi Party!

WATCH: The little thruster that tried.

GIF: Popup books are cool.