Election Center

2014 Illinois Primaries Edition


Presented by David Eads @eads at OpenGov Hack Night, April 1 2014

Chicago Tribune News Applications @tribapps

Presentation: slides.chicagotribune.com/electioncenter


News river


Survey results from SurveyGizmo, stored with PostgreSQL hstore

Data managed with spreadsheet

This was a new one

Statewide and congressional race data from Thomson Reuters

Local results collected by Tribune reporters...

...in a Google spreadsheet.

Tangentially, Illinois is amazing. Consider that last screen of results...

Isaac "Ike" Carothers was convicted of public corruption charges and released from federal prison less than two years ago

Jerry "Ice Man" Butler is the longest-serving member of the Cook County Board of Commissioners, having been first elected in 1985. In the '60s and '70s, Butler had a successful career as a soul singer. Butler was the original singer for the Impressions (later to be replaced by Curtis Mayfield). In 1968, Butler's song "Only the Strong Survive" reached #4 on the Billboard Hot 100.

A universal widget

If it doesn't work in mobile, it doesn't work

Stronger engagement (races viewed, time on page) on election night, more pageviews the day after


Frontend / Results


  • Django Medusa to generate pages (patched at the last minute to allow partial sections of the site to be built)
  • Amazon S3 for hosting
  • cron to publish on the regular

Print integration

  • Use Python API bindings and Django templating to generate XML for the Tribune's print production system
  • Results XML files are uploaded to print service queue or accessed via the web
  • With post-processing, print team can drag and drop tables with up-to-the-minute data onto pages
  • Templates custom-made to print team's specifications


  • Sideways guy: Some strange EXIF data apparently told Pillow to rotate one candidate's photo 90 degrees. Fixed by opening in Mac Preview app and resaving.
  • The plagiarized survey: A candidate plagiarized some parts of her survey responses.
  • Stop the presses: Due to an administrative error on the part of a precinct, we made a last minute correction to all the statewide races right before a print deadline.
  • Get rid of these candidates: Thinking I could easily remove candidates from our source data, I broke the spreadsheet the reporters were working on for a few minutes and caused a fair panic.

Credits + shoutouts

  • Editorial board coordinator: Jessica Reynolds
  • User interface & design: Alex Bordens, Chris Courtney
  • Frontend application: Chris Courtney, David Eads, Ryan Nagle
  • Print integration: Andy Boyle, Jordan Dziura, Rodney Eslinger, Dave Berry
  • Site development and data management: David Eads, Andy Boyle
  • Local race and referenda data: Chicago Tribune staff
  • Project management: Deborah Vinakos (Tribune Company), Bo Rosser (Thomson Reuters)

What's next

  • Election Centers and widgets developed for upcoming primaries covered by other Tribune newspapers
  • National results and widgets for November 2014 general election
  • "Big board" results page
  • Better integration of coverage and results
  • Monetization strategies that benefit from strong engagement during election night

Choose your leaders

Choose your leaders with wisdom and forethought.
To be led by a coward is to be controlled by all that the coward fears.
To be led by a fool is to be led by the opportunists who control the fool.
To be led by a thief is to offer up your most precious treasures to be stolen.
To be led by a liar is to ask to be told lies.
To be led by a tyrant is to sell yourself and those you love into slavery.

~ Octavia Butler