Programmer, designer, and journalist in Austin, Texas.

Currently working as a senior software engineer at Q2eBanking.

Design and development

Develop consumer and back-office financial technology products for Q2eBanking, including personal financial management and person-to-person payments.

Tools: Docker, Linux, PostgreSQL, Python, SQL Server
Election app

Live election results for Louisiana using precinct-level maps. This includes an automated data processing script and front-end visualization of the election data. This election coverage has been the subject of a successful crowdfunding campaign and has been sold to news outlets in New Orleans and Louisiana.

Tools: AWS S3, Bash, D3.js, GDAL/ogr2ogr, JavaScript, Leaflet, Make, Mapbox, Python, QGIS, TopoJSON
Oklahoma poverty map

Examining poverty rates across Oklahoma’s census tracts.

Tools: Carto, QGIS
Oklahoma election results

Election results analysis for Oklahoma’s presidential race and state questions.

Tools: AWS S3, Bash, D3.js, GDAL/ogr2ogr, JavaScript, Make, Pandas, Python, TopoJSON
Payment processing
Support Us

I combined Stripe payment processing and Salesforce donor tracking to create a donation system for The Lens. This required combining an Nginx server with an SSL certificate from Let’s Encrypt to allow for secure, HTTPS traffic. The Lens used this page to accept online donations from 2016 to 2019.

Tools: JavaScript, Linux, Nginx, Pandas, Python, Salesforce, SQL, SSL, Stripe
Missing Home

This project combined text, photos and interactive design to present the stories of planned and unexpected demolitions in New Orleans following Hurricane Katrina. The project drew on FEMA databases, archived photos and on-the-ground reporting.

Tools: AWS S3, JavaScript, Jinja, Leaflet, Make, Mapbox, Python
Property sales tracker

A daily web scraper and searchable archive of property sales. New land sales are geocoded and plotted on a map.

Tools: Flask, JavaScript, Leaflet, PostGIS, PostgreSQL, Python, SQLAlchemy, Selenium
Government contracts tracker

A daily web scraper that downloads all of the City of New Orleans’ new contracts and stores them in a fully searchable archive.

Tools: AWS S3, DocumentCloud, Flask, JavaScript, PostgreSQL, Python, SQLAlchemy, Selenium

A look at the population changes in Louisiana since Hurricane Katrina.

An investigation into the resurgence of methamphetamine production in Illinois. The radio piece for this series won the Edward R. Murrow Award for best investigative reporting in a small market (2014).

An examination of bridge infrastructure in Illinois and Champaign County that found the bridges most in need of repair often went years before receiving funding or repairs.

The life of one farmer who represents the new normal: part-time farming.

Side projects

A collection of data visualizations I have created while practicing D3 and Adobe Illustrator.

Tools: ai2html, Adobe Illustrator, D3, GDAL/ogr2ogr, Make, TopoJSON
Geographic data

This is a fully scripted geographic data-processing pipeline for Louisiana and New Orleans. It combines a Makefile and command-line tools to download and convert raw geographic data into Shapefile, GeoJSON and TopoJSON file formats. This was created to eliminate duplicate work and increase development speed for new graphics.

Tools: GDAL/ogr2ogr, Make, Mapshaper, PostGIS, PostgreSQL, TopoJSON

Erin Skarda and I discussed our experiences with hiring and including developers in newsrooms. We talked about why they are important, why they are worth the investment and how they can boost the newsroom.

A hands-on workshop teaching Google Fusion Tables.

The introductory portion of a three-part series of hands-on workshops taught by me, Ron Campbell and T. Christian Miller. This tipsheet covers my portion of the series.

A presentation arguing the case that journalists should continue to advance their data skills even when they are proficient at Excel.

Abe Handler, Todd Wallack and I presented some of our favorite notification tools that assist our reporting and shared the stories that they resulted in.