Hello!
I'm Will. I tell stories with data.
If you have any questions about my journalism, editing, or coding experience, download my CV or drop me a message.

Your neighborhood in data
A JavaScript web app that allows users to compare data on a custom area in San Francisco with the city at large.
JavaScript, Mapbox, Python
Web of corruption
See how all the major players in San Francisco's ongoing city corruption scandal are connected.
Python, D3
How did your neighbors vote?
An interactive that shows users how their neighborhood voted on Nov. 8 compared to the rest of the city.
Mapbox, Google API, JavaScript
Bomb-armed police robots
Broke the news that SFPD was planning to explicitly authorize robot lethal force. The story made international headlines.
Plain old reporting
Trip in a driverless car
Contributed a dynamic scrollytelling map to Yujie Zhou's story about a trip through SF in a driverless cab.
Mapbox, JavaScript
Fatal SFPD shootings
An interactive database with details on everyone killed in San Francisco police shootings since 2000.
JavaScript, illustrations
Boudin recall funding
Interactive beeswarms and donut charts show donors for and against the recall of Chesa Boudin.
Python, D3, Illustrator
Green roofs in NYC
Green roofs have many benefits, but adoption has been slow. New NYC laws hope to change that.
Photography, QGIS
Nov. 8 donor web
An exploration and explanation of the complex web of donors giving millions in SF's local election.
Python, JavaScript
Leanna Louie investigation
Contributed a scrollytelling graphic to Joe Eskenazi's reporting on supervisorial candidate's fraud allegations.
Mapbox, JavaScript
Rise in scooter collisions
Interactive mapping and graphics to show the 58% increase in scooter collisions in the past year.
Mapbox, Python, Illustrator
June 7 recall election
Maps and graphics showing precinct-level results of the recall of District Attorney Chesa Boudin.
Mapbox, JavaScript, CSS
SF's redistricting debacle
Deeply covered the city's redistricting process, and broke the news that Chair Townsend felt pressured by the mayor.
JavaScript, Mapbox
How to write the perfect novel
Writing the perfect novel once required creativity and grit. Thankfully, we can now turn to data instead.
Python, Illustrator
Weekly news quiz
An interactive quiz format to recap the week's most interesting news nuggets, used over several months.
JavaScript
State climate partisanship
In state climate votes, partisanship has been steadily increasing over the past five years. But why?
JavaScript, Altair, Datawrapper
Community internet networks
When Covid struck, millions of children couldn't go to class. NYC community groups rushed to improve their access.
Python, Illustrator, JavaScript
Crime change in 2022
Maps and scrollytelling charts to show how different types of crime changed from 2017 to 2022.
Python, Illustrator, JavaScript