Full-Stack Developer

Data journalism requires a broad set of skills. I've worked my way to proficiency with all the tools you need to run a news app - servers, databases, data analysis and visualization, front-end development

2026
sombrero.quest
sombrero.quest screenshot 1sombrero.quest screenshot 2

A full-featured private fantasy baseball league platform — live scoring, standings, drafts, and player management. Built with Django and PostgreSQL on the backend, Vite on the frontend.

2025–2026
CMS migration at The Washington Post

Led the migration effort from the interactive stories side when the Post moved to a new CMS. Handled API changes, built a backwards-compatibility layer to shield in-progress interactives from breaking changes, and coordinated closely with main engineering throughout so designers and developers working on stories were never interrupted.

2021–2026
Interactives infrastructure at The Washington Post

Built and maintained the framework powering interactive storytelling across the Post's design and graphics desks, enabling ambitious immersive stories. Developed a local GUI for project management, and led the effort to package reusable components (charts, UI elements, scrollytelling) shared across the team.

Visual Journalist

I've spent the last decade building visual and interactive journalism at the Los Angeles Times and The Washington Post — 3-D maps, satellite imagery analysis, data-driven graphics, and immersive scrollytelling experiences.

December 10, 2025
Are you in TikTok's cat niche? What 121,000 videos reveal.
Are you in TikTok's cat niche? What 121,000 videos reveal.

With reporters Jeremy B. Merrill and Leslie Shapiro, I built an interactive that maps 121,000 TikTok videos to show how the platform's recommendation algorithm clusters content by user behavior. Readers could explore the map by interest category and look up any hashtag's nearest neighbors and opposites.

Invalid Date
TikTok's mental health 'rabbit hole'? It's not in your head.
TikTok's mental health 'rabbit hole'? It's not in your head.

Built an animated rabbit hole sequence with illustrations by Dani Choi to open the story, and designed an interactive explanation showing how skipping or watching videos shifts your TikTok feed over time.

January 10, 2022
Play mini golf to see how politicians tilt elections using maps
Play mini golf to see how politicians tilt elections using maps

With cartographer Dylan Moriarty, I built a playable mini-golf game that teaches readers how partisan gerrymandering works — each hole is a real district map. Built using canvas, matter.js for physics simulation and svg for object boundaries.

November 30, 2021
What Happens to Democracy When Local Journalism Dries Up?
What Happens to Democracy When Local Journalism Dries Up?

I created the data maps for this Margaret Sullivan essay on the local news crisis, visualizing the collapse of U.S. print newspapers between 2005 and 2020 and mapping which counties were left with no newspapers.

October 9, 2019
Fantastic fall foliage … and where to find it
Fantastic fall foliage … and where to find it

To provide some needed counter-programming amid all the political news, Lauren Tierney and I made this story about something everybody likes: fall. I took the lead on the forest type map and the leaf illustrations.

July 17, 2019
How to dress for space
How to dress for space

My colleagues and I created 3-D models of historic and future space suits using photogrammetry, then displayed them with commentary from the Post's space reporter and fashion critic. I built the interactive experience and performed two of the photogrammetry shoots.

June 6, 2019
A new old home for the nation's dinosaurs
A new old home for the nation's dinosaurs

To take readers inside the newly renovated dinosaur hall at the National Museum of Natural History, I built a scroll-driven video tour as the intro of this story. I also prepared the embedded 3-D skeleton model.

April 25, 2019
How terror detonated with precision across Sri Lanka
How terror detonated with precision across Sri Lanka

This breaking news map was a one-day Mapbox project to explain the Easter Sunday bombings in Sri Lanka.

April 19, 2019
Mueller report offers clues to what's behind the redactions
Mueller report offers clues to what's behind the redactions

Rather than simply showing the number of redactions, we analyzed the Mueller report and added context to give some idea of what the redactions were about.

April 2, 2019
What remains of Bears Ears
What remains of Bears Ears

A months-long project, I was involved in capturing the drone imagery, creating the petroglyph panorama, web development, reporting and writing this story about cultural and archaeological sites in the former Bears Ears National Monument.

November 9, 2018
These wealthy neighborhoods delivered Democrats the House majority
These wealthy neighborhoods delivered Democrats the House majority

We published an analysis of precinct-level results and analysis very quickly after the 2018 midterm election thanks to a lot of prep work, including my data processing setup for all the House districts we were interested in. I worked the overnight shift to process results as they came in.

October 17, 2018
BORDERLINE: Navigating the invisible boundary and physical barriers that define the U.S.-Mexico border
BORDERLINE: Navigating the invisible boundary and physical barriers that define the U.S.-Mexico border

This 3-D scroll-driven map was a really fun project to work on. The basic framework of a slippy 3-D tiled map was built when I joined the project, but I wrote a lot of the interaction, motion and rendering code and took over the project as the lead developer partway through.

September 14, 2018
Tracking Florence's deluge
Tracking Florence's deluge

All thanks to Adam Pearce for this great tutorial, which was helpful despite the unique wrinkles I ran into while building this rainfall map on a very tight deadline. It updated live as the hurricane passed through.

July 16, 2018
Just how weak is this year's Home Run Derby field?
Just how weak is this year's Home Run Derby field?

Gabriel Florit and I created these 3-D home run arc plots in Blender. It was a fun exercise and we made animated versions for social media that I tweeted during the Derby.

March 22, 2018
How to find shade at Dodger Stadium
How to find shade at Dodger Stadium

Using a 3-D model of Dodger Stadium and sun position math, I simulated the shadows throughout the season to help fans pick a seat that wouldn't be uncomfortable in the Los Angeles summer. I also wrote an explainer post.

January 23, 2018
The Thomas fire: 40 days of devastation
The Thomas fire: 40 days of devastation

I built a 3-D model to tell the story the largest wildfire in California history. The project used satellite imagery and three.js to create an immersive experience.

December 6, 2017
Before and after: Where the Thomas fire destroyed buildings in Ventura
Before and after: Where the Thomas fire destroyed buildings in Ventura

We used satellite imagery to determine which buildings had been destroyed the Thomas fire.

November 2, 2017
Despite a record number of strikeouts, Dodgers' pitchers fell short
Despite a record number of strikeouts, Dodgers' pitchers fell short

This scatter plot was made with the vector mapping library Tangram — a quick way to render a large number of data points.

October 13, 2017
Why the 2017 fire season has been one of California's worst
Why the 2017 fire season has been one of California's worst

Using Landsat imagery, I showed how fire-stricken regions of California had started the year lush and green but dried out by the autumn.

July 12, 2017
Don't waste your time waiting in line at Disneyland
Don't waste your time waiting in line at Disneyland

We used data analysis to come up with strategies for riding the best rides at Disneyland without waiting forever in line, then went to Disneyland and tested them out. I created CSS-only charts for each ride using Django templating.

February 8, 2017
A week in the life of P‑22, the big cat who shares Griffith Park with millions of people
A week in the life of P‑22, the big cat who shares Griffith Park with millions of people

For this project, I created a 3-D model of Griffith Park using USGS and NOAA data and animated it to show the mountain lion's movement throughout the story.

November 10, 2016
Did your neighborhood vote to _____________?
Did your neighborhood vote to _____________?

Months of data collection went into this project, which was the most comprehensive election results map available for California after the November 2016 election.

October 30, 2016
A web of campaign contributors

This 3-D visualization of a network of political donors in Los Angeles was part of a Loeb Award-winning package.

July 11, 2016
Pitch by pitch: How Clayton Kershaw dominates hitters
Pitch by pitch: How Clayton Kershaw dominates hitters

I wanted to show what it's like for a batter to face one of baseball's greatest pitchers, so I created a 3-D visualization of real Clayton Kershaw pitches from the first half of the 2016 season.

April 14, 2016
Every shot Kobe Bryant ever took. All 30,699 of them
Every shot Kobe Bryant ever took. All 30,699 of them

We plotted every shot Kobe Bryant took from the floor in his 20 years in the NBA. Some of this project's code is on GitHub.

February 25, 2016
When would it be without leap years?
When would it be without leap years?

I made a 3-D simulation of the way the calendar year lags behind the Earth's orbit of the sun as part of this explainer on leap years.

February 2, 2016
L.A. Rams throwback throw down
L.A. Rams throwback throw down

A simulation game that lets you put historical NFL Rams teams head-to-head. Plus a mathy explainer!