Gardner Thornhill

incoming data manager at Mississippi Engaged

I turn raw data, from ticket prices to live feeds, into something a team can run on. Pipelines in dbt and BigQuery, automation in Python, results in the browser.

A 24-hour job now takes under an hour. That is the kind of thing I do.

For the Pennsylvania Democratic Party's voter-protection program I automated the GOTV packet run end to end, backtested a ballot-cure model with a 3,100-line replay harness, and moved the team's BI layer off Tableau and onto code.

On the side I forecast football attendance from resale ticket prices and publish precinct-level election analysis that people actually read.

SQLdbtBigQueryPythonpytestPlaywrightQGISCensus APIObservableReactTypeScript

selected_work/

All 6 case studies →

NXTStopHealth

research application

A desktop research tool for Jackson Free Clinic that measures access to JTRAN bus service and saves confirmed measurements locally, without retaining entered addresses.

NYC Poll Tracker

100k+views on primary day

Live wait times at every polling site in New York City during the 2025 mayoral primary, rolled up to Council, Assembly, Senate, Congressional, and Election District.

Travis County Early Vote

170,891early votes tracked, 2026 primary

A live early-vote dashboard for Travis County, Texas: daily turnout and partisanship paced against 2024, with a model projection of where the final count lands.

MSU Attendance Model

2,229seat leave-one-out RMSE

A Python package and CLI that forecasts Mississippi State home-game attendance from season-relative resale prices. Its first saved live forecast missed by 1,978 and covered the actual crowd in its 80% range.

2,425 Precincts

32special elections, 13 states

A hand-built precinct dataset comparing 2026 special-election results with 2024 presidential margins, generic-ballot polling, and presidential approval at the time of each race.

Transfer Portal

~530transfers, 2022 to 2024

How well Group of Five players hold up after moving to the Power Five: regression and correlation analysis by position group on PFF data.

what_i_build/

five areas, click to expand

dbt projects laid out as staging, intermediate, and marts on BigQuery, with data-quality tests in the pipeline and fuzzy matching where the source systems disagree about who a record is.

  • SQL
  • BigQuery
  • dbt
  • data-quality testing
  • fuzzy matching

Python that replaces manual work: browser automation with Playwright, TOTP-authenticated logins, REST clients packaged as reusable libraries, pytest suites, and jobs scheduled on Google Cloud and GitHub Actions.

  • Python
  • pandas
  • pytest
  • REST API client design
  • Playwright
  • TOTP/2FA automation
  • Google Cloud scheduled jobs
  • GitHub Actions CI

Precinct and boundary work in QGIS: matching, consolidating, and geocoding at scale with Census boundary data and batch geocoders, then turning the result into maps a decision can rest on.

  • QGIS
  • shapefiles, KML, GeoJSON
  • Census API and boundary data
  • Census batch geocoding
  • Google geocoding

Code-based BI in Observable Framework on top of warehouse marts, deployed like software, plus the application layer around it when a dashboard is not enough.

  • Observable Framework
  • Tableau
  • Django
  • FastAPI
  • React
  • TypeScript
  • Netlify
  • Git and GitHub

NGP VAN administration and the VAN and MyCampaign APIs, voter file analysis, and turf cutting for field programs, including training the organizers who use it every day.

  • NGP VAN administration
  • VAN/MyCampaign API
  • voter file analysis
  • turf cutting

experience/

full résumé

Mississippi Engaged

Incoming Data Manager
Mississippi
Starts October 2026

Mississippi Engaged is a nonpartisan 501(c)(3) that supports nonprofit and community-based organizations across Mississippi with civic engagement coordination, grants, data, and digital organizing. Its partners work on voter engagement, election protection, and building community power. About Mississippi Engaged →

Pennsylvania Democratic Party

Data Associate, Voter Protection
Harrisburg, PA
June 2026 to September 2026

  • Automated GOTV turf-packet generation end to end with Python, Playwright, and TOTP-authenticated VAN worker accounts, cutting a 24-hour manual process to under one hour, and planned statewide delivery of pre-printed packets to staging locations.
  • Engineered a ~3,100-line Python replay harness with a pytest suite to backtest a dbt vote-by-mail ballot-cure model against historical election data before it went to production.
  • Migrated the team's BI layer from Tableau to a code-based analytics site built with Observable Framework on dbt/BigQuery marts, shipped on Netlify with user documentation, alongside a self-updating public voter registration tracker refreshed by GitHub Actions.
  • Built the team's VAN integration layer: a reusable Python client library adopted as standard tooling, plus a reverse-engineered URL-obfuscation algorithm that enables direct voter-record links from dashboards.
  • Shipped an enrichment pipeline that matches new user accounts in BigQuery to voter registration, party, ballot status, and support score, and geocodes each address to seven boundary levels.
  • Served as the team's precinct and boundary GIS specialist: matched 99.8% of 9,075 precincts to Census boundaries after surfacing a silent ~900-precinct mismatch, consolidated geometries in QGIS, and geocoded ~8,000 polling locations.
  • Produced a geospatial analysis of Spanish-speaking precincts that informed a Spanish-language ballot-access decision covering two counties, and trained 20 field organizers on VAN.

Harvard Extension School

Data Science coursework. CSCI 101, Foundations of Data Science and Engineering, grade A.

2025

Mississippi State University

B.A., History. Coursework in Statistics, Computer Programming, and Public Policy. Dean's List twice, President's List Spring 2023.

December 2023

writing/

All articles →

questions/

a little more about my work

I join Mississippi Engaged as Data Manager in October 2026, working remotely. Mississippi Engaged is a nonpartisan nonprofit that coordinates and resources civic engagement work across a statewide network of nonprofit and community-based organizations. This site brings together my work in analytics engineering, civic data, and sports analytics.

SQL, dbt, and BigQuery for modeling and warehousing. Python with pandas, pytest, and Playwright for automation. Observable Framework for code-based BI. QGIS and the Census API for geospatial work. GitHub Actions and Google Cloud for scheduling and CI.

Sports, civic data, and operational analytics. I build football attendance forecasts, live dashboards, data pipelines, and geospatial analysis. My case studies cover how the systems work; my articles explore what the data says.

Contact me

jgardnerthornhill@gmail.com

Have a question about my work or want to connect? Email gets the fastest reply.