Résumé
Gardner Thornhill
jgardnerthornhill@gmail.com · 662-385-6333
gardnerstats.com · github.com/gardnerthornhill
summary
Incoming Data Manager at Mississippi Engaged, starting October 2026. Previously built data infrastructure for the Pennsylvania Democratic Party’s statewide voter-protection program: dbt/BigQuery pipelines, Python automation that cut a 24-hour manual process to under one hour, geospatial analysis, and a code-based BI platform that replaced Tableau. Works end to end, from data modeling and pytest-backed validation to CI-scheduled deployment.
skills
- Data modeling and warehousing
- SQL, BigQuery, dbt (staging → intermediate → marts), data-quality testing, fuzzy matching
- Python and automation
- Python, pandas, pytest, REST API client design, Playwright browser automation, TOTP/2FA automation, Google Cloud scheduled jobs, GitHub Actions CI
- Geospatial
- QGIS, shapefiles/KML/GeoJSON, Census API and boundary data, Census batch and Google geocoding
- Visualization and web
- Observable Framework, Tableau, Django, FastAPI, React, TypeScript, Netlify, Git/GitHub
- Campaign data
- NGP VAN administration, VAN/MyCampaign API, voter file analysis, turf cutting
experience
Mississippi Engaged
Incoming Data Manager · Mississippi · Starts October 2026Mississippi 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 the organization.
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, reducing a 24-hour manual process to under one hour; 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, validating model logic before production use.
- Migrated the team's BI layer from Tableau to a code-based analytics site built with Observable Framework on dbt/BigQuery marts, shipped to production on Netlify with user documentation, alongside a self-updating public voter registration tracker refreshed via GitHub Actions.
- Built the team's VAN integration layer: designed and packaged a reusable Python client library adopted as standard tooling, and reverse-engineered an undocumented URL-obfuscation algorithm to enable direct voter-record links from dashboards.
- Shipped an automated enrichment pipeline for the voter protection site 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 specialist for precinct and boundary GIS: matched 99.8% of 9,075 precincts to Census boundaries after surfacing a silent ~900-precinct mismatch, consolidated precinct geometries in QGIS, and geocoded ~8,000 polling locations.
- Produced a geospatial analysis of Spanish-speaking precincts (Census API, QGIS choropleth mapping, written report) that informed a Spanish-language ballot-access decision covering two counties.
- Trained 20 field organizers on VAN and built adopted operational tooling, including a volunteer health dashboard and tier-penetration call tracking used daily by organizing leadership.
independent projects
NXTStopHealth
Electron, JavaScript, Census data, GTFS · 2026- Built an offline transportation research app for Jackson Free Clinic, combining local address matching with JTRAN transit measurements and confirmation-based local records that exclude entered addresses.
MSU Football Attendance Model
Python, OLS regression, GitHub Actions, Netlify · 2026- Built a Python package and CLI predicting announced home-game attendance from resale get-in prices and opponent strength, with cached CollegeFootballData ingestion, pytest suite, leave-one-out validation, and 80% prediction intervals; cut out-of-sample RMSE 47% versus baseline (R² 0.66).
- Runs itself daily: a scheduled GitHub Actions workflow refreshes data, retrains, re-forecasts, and redeploys a generated static site with per-game forecasts and sellout odds to Netlify.
Election Dashboards: NYC Poll Tracker and Travis County
Python, web development · 2025- Built and published live election dashboards with multi-level district analysis (Assembly through Congressional); generated 100,000+ combined views across web and social media.
College Football Transfer Portal Analysis
R, PFF data, Substack · October 2025- Collected and cleaned a dataset of ~530 Group-of-Five-to-Power-Five transfers (2022 to 2024); published regression and correlation analysis by position group with visualizations on Substack.
education
Harvard Extension School
Data Science coursework · 2025- CSCI 101: Foundations of Data Science and Engineering; grade A (4.0).
Mississippi State University
B.A., History · December 2023- Coursework: Statistics, Computer Programming, Public Policy. Dean's List (2 semesters); President's List (Spring 2023).