An interactive long-form article that examines the 2025 mid-decade redistricting scheme in Texas, in the context of a similar effort made in 2003. The piece walks through specific changes made to the maps in both cases, along with a close look at why one of the districts in the 2003 map was ruled unconstitutional in 2006. The piece also includes two interactive puzzles, one of which is a “pin the tail on the donkey”- crossed-with-jigsaw-puzzle game that challenges readers to place the new 2026 districts onto a blank map. The other gives readers the chance to gerrymander their own districts in crafting an unlikely victory.
2026
JavaScript
Svelte
D3.js
HTML + CSS
JavaScript
Svelte
D3.js
HTML + CSS
[View it on the web]
An interactive data visualization that takes a city from user input and loads a corresponding weather scene using the temperature, conditions, and wind speed. Two view options reflect more and less abstracted representations.
2024
TouchDesigner
Python
TouchDesigner
Python
[Read more]
This interactive visualization of air quality in Pittsburgh is part of an assignment for my data visualization course this semester. I’ll be updating this page throughout the semester, but the most recent version can always be accessed via GitHub.
2025
Svelte
D3.js
HTML + CSS
Mapbox
Svelte
D3.js
HTML + CSS
Mapbox
[Read more]
[View it on the web]
This visualization explores the Smell Pittsburgh data through interactive gameplay as you try to decrease the average smell by as much as possible. It was created as a practice exercise to work on my interactive skills in preparation for my data visualization final project. I’d like to explore more gamified data experiences in future work.
2025
Svelte
D3.js
HTML + CSS
Mapbox
Svelte
D3.js
HTML + CSS
Mapbox
[Play the game here]
This site visualizes my entire Google search archive dating back to 2011. Each point is one search. The searches are clustered and mapped using Xenova's all-MiniLM-L6-v2 model. The model is optimized for text clustering based on semantic content and outputs a 384-dimensional vector representation of the text based on its semantic meaning. I ran my dataset through the model via The Embedding Atlas, a data clustering and visualization tool developed by Apple. The work is greatly inspired by Vauhini Vara’s novel, Searches: Selfhood in the Digital Age.
[Read more]
*not currently on the web for privacy reasons
An animated graphic of the history of speed climbing records on The Nose in Yosemite Valley. Made for my first project using Flourish.
2025
Flourish
Flourish
[Read more]
[View it on the web]
A cartographic exploration into representations of vertical distance and space. The data represents the total vertical distance climbed at the New River Gorge National Park in 2024, as logged on 8a.nu.
2025
ArcGIS
Houdini
Airtable
ArcGIS
Houdini
Airtable
[Read more]
Using ProPublica’s methods for studying segregation academies in Alabama, I found and mapped segregation academies in Mississippi and their nearby public counterparts.
2024
DataWrapper
DataWrapper
[Read more]
A data project that investigates the historical pattern of rock climbers who’ve logged ascents of the route Proper Soul at the New River Gorge National Park.
2024
D3.js
Photoshop
Airtable
D3.js
Photoshop
Airtable
[Read more]
A data sketch built in Figma that I created to prototype a UNC sports history dashboard. I hope to return to this project later this semester to build with D3.
2025
Figma
Figma
[Read more]
A note on AI
None of the work on this site is AI-generated or “vibe-coded.” While I am curious about the future of how artificial intelligence may augment journalistic work--and particularly how it is already transforming the practice of creative coding--I do not use these tools to create my personal projects in an effort to learn as much as possible through making mistakes and experimenting in other ways. The only use of AI present in my work here is the use of Claude for limited debugging when working with D3.
An interactive digital snowboarding experience controlled with the Adafruit Circuit Playground microcontroller.
2024
TouchDesigner
CircuitPython
Adafruit Circuit Playground
TouchDesigner
CircuitPython
Adafruit Circuit Playground
A mixed media story about coal mining and outdoor recreation in West Virginia using archival and “found” footage, projection-mapped onto a 3D object as per class requirements.
2024
TouchDesigner
TouchDesigner
A 3D model and rendering of an imagined rock climbing exhibit. The model includes both public assets and objects I built in SketchUp. I would love to revisit this software for experiments in 3D reconstruction.
2024
SketchUp
Adobe Substance Stager
SketchUp
Adobe Substance Stager
An introductory video for the homepage of my blog, filmed on a Panasonic camcorder and edited to resemble the interface of said camcorder.
2024
Photoshop
Final Cut Pro
Photoshop
Final Cut Pro
Brand design for my climbing blog, climbPraxis, including a 3D climbing hold logo.
2024
Photoshop
Final Cut Pro
Photoshop
Final Cut Pro
This poster was designed for The Boulder Garden’s inaugural back-to-school bouldering competition.
2025
Photoshop
Photoshop
An infographic I created to accompany an experimental routesetting design at The Boulder Garden. This was displayed throughout the gym to help gym members navigate the new grading system.
2025
Photoshop
Photoshop
A physical-digital-physical experimental loop starting with a 3D model of a banana captured through photogrammetry, turned into a series of banana-phone shape grammars modeled in Houdini, and finally 3D printed and exhibited.
2024
photogrammetry (MetaShape)
Houdini
3D printing
Photoshop
photogrammetry (MetaShape)
Houdini
3D printing
Photoshop