Redact: Privacy-First Face Detection Tool

faceprivacytoolprotectautomatically
Top 5 most frequent words from project text

A privacy-focused web tool that helps protect people's identities in photos by automatically detecting and covering faces with black rectangles. Built for activists, journalists, and community organizers who need to protect privacy in visual documentation.

The tool processes images entirely client-side, with no server uploads, using Face-API.js and a SSD MobileNet v1 neural network. It automatically strips all metadata (EXIF, IPTC, XMP) including GPS location, device information, timestamps, and other potentially identifying data.

Key Features

  • Automatic face detection
  • Manual rectangle controls for additional coverage
  • Complete metadata removal
  • Offline functionality
  • Simple point-and-click interface accessible to both technical and non-technical users
JavaScriptFace-API.jsHTML5 CanvasWebGLNeural NetworksPrivacy Engineering

Jenny Markov: Interactive Digital Art Installation

A generative art installation inspired by Jenny Holzer's "Truisms" series, combining Markov chain text generation with interactive CRT-style visual effects. Named as a playful homage to Holzer's work, this installation reimagines her iconic philosophical statements through algorithmic generation, running on an Adafruit PyPortal Titano.

The installation uses a weighted Markov chain algorithm to generate new philosophical statements from Holzer's original Truisms, maintaining the provocative and thought-provoking style of her work. The system analyzes word relationships, maintains frequency weights for word transitions, and generates new statements while preserving the philosophical essence of the source material.

Key Features

  • Real-time text generation
  • CRT-style visual effects (dynamic color shifting, phosphor glow simulation, scan line animation)
  • Touch-responsive interactions
  • Efficient memory management optimized for embedded hardware

The project demonstrates the intersection of generative text art, interactive media, retro computing aesthetics, and philosophical inquiry, while paying tribute to one of the most influential conceptual artists of our time.

CircuitPythonMarkov ChainsEmbedded SystemsInteractive ArtDigital Signal ProcessingHardware ProgrammingColor TheoryMemory Optimization

Rasterform: Image Channels to 3D Relief

Rasterform studio showing image-channel controls beside a color-mapped 3D relief in the interactive viewport

Rasterform is a local creative tool for translating image structure into editable 2.5D geometry. Rather than treating an image as a prompt, it treats luminance, hue distance, saturation, individual color channels, alpha, and edges as composable height fields.

Users can stack, reorder, invert, blend, and tune those signals, inspect the result in 2D and 3D, then export GLB, watertight STL, height maps, transparent 4K/8K PNGs, or reproducible recipes.

Its mesh checks report components, boundary loops, non-manifold edges, degeneracy, and Euler characteristic, making topology part of the authoring workflow instead of a hidden export failure. Everything runs locally in the browser with no account, backend, analytics, or remote inference.

Vue 3TypeScriptThree.jsWebGLImage ProcessingMesh TopologyGLB/STLCreative Coding

Fashion Photogrammetry: Three Editorial Studies

Fashion System Invisible Cities study with the original dress floating in a pastel chromatic WebGL field

An interactive WebGL fashion archive that stages two photogrammetric garment models across three distinct editorial worlds: Invisible Cities, Dialectic, and Wind Archive.

Built with Three.js and custom GLSL and post-processing, the project turns pointer, touch, and scroll input into responsive dress rotation, shifting scenography, spectral effects, and falling photographic prints. Mobile-specific models, GPU-aware rendering, and asset caching preserve the experience across devices without a backend.

Three.jsTypeScriptWebGLGLSLPhotogrammetryglTFCreative CodingFashion Archives

Image Portfolio Builder

imagesimpletoolbeautifulportfolio
Top 5 most frequent words from project text

A simple, elegant way to showcase high-resolution images without relying on social media algorithms. This tool enables photographers, digital artists, and creators to build beautiful portfolio websites by simply dropping images into a folder. The system automatically processes images for optimal display across all devices while maintaining quality.

The tool handles all the complex tasks automatically - from creating multiple image sizes for different devices to generating WebP and JPEG versions for maximum compatibility. It features a clean, minimalist layout that puts the focus entirely on the artwork, with smooth transitions and responsive design that works beautifully on everything from phones to large desktop displays.

Key features include automatic image optimization (800px, 1800px, 2400px variants), smart layout adaptation, fast loading through modern image formats, beautiful transitions, and simple deployment options. Built with modern web technologies, it requires zero database setup and can be deployed instantly to various hosting platforms.

SvelteViteTailwindCSSSharpFirebaseNode.jsWebPImage Processing

ClusterViz

imagepixelclusteringspacepoint
Top 5 most frequent words from project text

ClusterViz is an interactive clustering sandbox I built to make clustering feel concrete across two different data spaces inside the same workspace: editable 2D point clouds and image pixels treated as RGB vectors. It lets you generate or draw datasets, upload an image and sample its pixels, then run algorithms like K-Means and DBSCAN with a shared set of controls and a shared dataset state that stays consistent as you switch modules.

Features

  • Dual-space workspace: cluster editable 2D points and image pixels (RGB vectors) in one app
  • Data creation tools for generating synthetic sets or drawing custom point clouds
  • Image upload and pixel sampling pipeline for color-space clustering experiments

The app is currently hosted on Firebase.

tensorflow.jsd3JavaScriptFirebase

W.E.B. DuBois Data Visualization Recreation

Recreation of W.E.B. DuBois data visualization showing social and economic conditions of Black Americans

With D3.js I recreated one of W.E.B. DuBois' data visualizations; DuBois was a renowned sociologist, and civil rights activist, who was known for his work on racial issues in America, particularly the Black Community. He created a data visualization called "Black Data Portraits" that depicted the social and economic conditions of Black Americans in the late 19th and early 20th centuries. This script is a modern-day interpretation of that visualization, using D3.js and deployed on Firebase.

Key features include:

  • Modern D3.js implementation
  • Hosted on Firebase
  • Honors DuBois' legacy
  • Visualizes social and economic data
D3.jsFirebase

Live-User-Touch: Interactive 3D Video Art Installation

videocolorartinteractiveinstallation
Top 5 most frequent words from project text

A Three.js-powered interactive video art installation that transforms ordinary videos into dynamic, responsive 3D artworks that change based on user movements. Created for a Media Archaeology class exploring the intersection of fashion and film, this project reimagines amateur garment creation videos through real-time 3D color manipulation.

The installation features real-time 3D video processing using Three.js and WebGL, where users can control color temperature and contrast through intuitive movements. Moving left/right adjusts the color temperature (cooler/warmer), while moving up/down controls contrast levels. The experience is unique to each viewer's interaction, creating a personalized 3D artistic experience that transforms everyday fashion content into dynamic visual art.

Key features include real-time 3D color grading effects, responsive touch/mouse controls, dynamic look-up tables based on movement, and support for multiple video sources. The project demonstrates the intersection of 3D web technologies and art, making professional color grading techniques accessible through interactive experiences while exploring the relationship between fashion documentation and digital media.

Three.jsWebGLJavaScriptHTML5CSS3Interactive ArtReal-time ProcessingMedia Archaeology

Citation Networks in the Digital Humanities

Network graph showing citation relationships between authors in digital humanities

Using the Python library NetworkX, I created a graph to represent the relationships between different authors and the common projects they have cited in their work.

Features

  • NetworkX graph analysis
  • Matplotlib visualization
  • Hosted on GitHub Pages
  • Visualizes author relationships

The edges of the graph are labeled with the names of the common projects that the authors have worked on. The size of the nodes in the graph is determined by the degree of the nodes, which is a measure of how connected the author is to other authors in the graph. The graph is plotted and visualized using the Matplotlib library and is hosted on a GitHub Pages site, for which I also designed the layout.

PythonNetworkXMatplotlib

CCLOSET: AI Wardrobe Visualization Studio

outfitwardrobeimagecclosetstyling
Top 5 most frequent words from project text

CCLOSET is an AI styling studio for testing outfits before a pull, shoot, purchase, or client presentation. The app lets users upload a person reference, add wardrobe pieces by category, build valid outfit combinations, and render generated lookbook images from real styling context.

Features

  • Person and wardrobe reference uploads, including image URL imports
  • Category-based outfit queue for tops, bottoms, outerwear, shoes, and accessories
  • OpenAI image editing pipeline for editorial outfit previews
  • Free-session and paid-credit flow backed by Stripe
  • Private accounts with saved, ranked, favorited, and annotated looks

The production app is deployed with Firebase Hosting and Cloud Functions, using an Express API for generation runs, checkout, account state, URL safety checks, and saved-look storage.

Vue 3ViteExpressFirebaseOpenAIStripeCloud FunctionsImage Generation

Writing & Sample Courses

Embedded Humanities: The Khipu as Situated Information System

This paper explores the khipu as a situated information system, examining how these ancient Andean devices encoded and transmitted knowledge within their cultural context. Through an analysis of their material properties, structural patterns, and historical usage, I demonstrate how khipus functioned as embedded humanities artifacts that integrated technical and cultural knowledge.

Critical Data Studies: A Practicum (Sample Syllabus)

What changes when a record becomes a data point, a category, or an image? This seminar and web studio pairs close reading with small experiments in HTML, SVG, and JavaScript. Derrida's account of the supplement informs a comparison of data and display; Chun's work on similarity accompanies a clustering experiment; Glissant's right to opacity informs decisions about what a project should withhold. Students work with archives, images, and khipu documentation, then build an interactive essay whose argument can be examined in both its writing and its code.

From Analysis to Deployment (Sample Syllabus)

A studio for taking a small analysis beyond the notebook. Students use Python, uv, and DuckDB to make the data work reproducible, then build a usable interface with JavaScript and Vue. FastAPI and PostgreSQL enter when a project needs a service or shared, persistent data. Git, tests, accessibility checks, and deployment run through the semester. Each project must explain how its queries, defaults, and publication choices shape what someone can conclude, and include enough documentation for another person to run, maintain, or take it offline.