D3.js, Svelte, Jupyter Notebooks with iPython
A data dashboard built to surface county-level housing trends, enabling users to search for U.S. counties and compare median home prices and inventory levels against national baselines. Designed with modular components using Svelte and JSON data fetching for scalable geographic coverage.
D3.js
I led the design and development of Quiet Caucuses, an interactive for FiveThirtyEight that maps the alignment between House members' caucus affiliations and their 2023 voting behavior. I built a custom scroll-driven interface using D3.js and JavaScript to reveal patterns in a high-dimensional dataset, translating vote similarity scores into an interpretable and responsive layout. The project required close coordination with reporters to iterate on data structure, visual encoding, and user flow.
D3.js
I led the design of FiveThirtyEight's 2024 election forecast and helped develop the frontend, visualizing polling uncertainty and highlighting the significance of seven swing states.
D3.js, Python
I built a 50-page interactive combining custom-rendered county-level maps and data tables to guide readers and ABC reporters through live election results. I processed and simplified shapefiles into optimized TopoJSON for each state, then dynamically rendered maps with D3 to minimize load and maximize clarity. The interface paired spatial and tabular components to help users interpret partial vote returns in real time.
D3.js
I designed and developed a three-part interactive for that visualizes the delegate race across the 2024 Republican primaries. The centerpiece was a set of five synchronized D3 line charts with a custom hover system that let users compare candidate trajectories without jitter or overlap. I also condensed a dense delegate calendar and benchmark data into a responsive, scrollable layout to balance clarity with depth.
Vue.js, D3-geo (command-line interface), Excel
I built an interactive retirement quiz for MarketWatch using Vue.js and JavaScript's Web Workers to deliver a smooth, responsive experience even with a large JSON file. The tool guided users through a series of questions about lifestyle, climate and cost preferences, then matched them to potential retirement locations based on a weighted scoring algorithm created by myself. I used a Web Worker to handle filtering and ranking logic off the main thread, ensuring fast, fluid updates and maintaining performance.
D3.js, Svelte, Python, Pandas
Built with Svelte, this interactive lets readers explore childcare costs in their county using data from the National Database of Childcare Prices. Users can input their income to see how local childcare expenses compare to both their household earnings and the county median—making abstract cost burdens tangible at a personal level.
Svelte, D3.js, GitHub Actions, Python
A series of interactives where I breakdown and visualize top-line economic indicators and make its components searchable.
A column where I regularly take a deep dive into one data point that is meaningful to the financial world and your money. There are so many metrics that can help us make informed financial decisions. I explain how they are derived and what we can learn from them.
D3.js, Svelte, Python, GitHub Actions
I analyzed data on total listings of single-family homes collected by Realtor.com to organize and present data in a personalized way.
D3.js, Vue, Google Sheets
By collecting data from each of the nine largest container ports in the U.S., I created a unique dataset that tells the story of how the supply chain is being affected by the changing economy, particularly from the increased demand for goods.
D3.js, Vue, Google Sheets
I analyzed data from over 200 public pension systems, identified outliers in funding ratios and put these data points into context of market conditions and legislation.
D3.js, Vue, Google Sheets
Python/BeautifulSoup
I searched the SEC's EDGAR database using Python and BeautifulSoup to find mentions of crypto-related words in Form D filings with the SEC, which is where some companies are initiating ICOs
Python/pandas, Excel, OpenRefine, Vue.js
Looking at FEC data, I identified CEOs of S&P 500 companies for the 2018 reporting cycle using Python to fetch and format the data, OpenRefine to standardize last names and employers and Excel to analyze the data. I built the interactive with Vue.js.
Python, D3.js, JavaScript
I wrote a script that calculated the make-up of PCE inflation and could be run every month after the Commerce Department's release of the figures. I also contributed to the frontend design and development of the tool.
Bootstrap Tables, Handlebars.js
The State Department released Hillary Clinton's emails from the time when she was secretary of state on a monthly schedule. I implemented Bootstrap Tables and server-side pagination to improve load time. Features include the ability to search by certain senders/recipients and popular search terms to guide users on what to search for.