Matthew KimStep into the 3D workshop →
← All projects

Historic Fashion Archive — Research Assistant & Full-Stack Build

3D viewer built from real photogrammetry scans of the collection

Scanned garments walking a black 3D runway, with era and type filters
The 3D Runway: garments from the collection, rendered from real photogrammetry scans, walking a runway you can filter by era and type.
Role
Research Assistant, UVA Historic Fashion Archive (2024–present)
Stack
Next.js 16 (App Router), React 19, TypeScript 5, Tailwind CSS v4; Three.js / @react-three/fiber / @react-three/drei v10 for the 3D viewer
Backend
CollectiveAccess (Providence), custom profile on the Costume Core metadata standard; cookie + Basic Auth integration, 5-minute in-memory cache with static-JSON fallback
Scope
both the backend metadata schema and configuration and the public-facing "runway" site, end to end
Recommendation algorithm
content-based filtering across five weighted attributes — era (30%), type (25%), color (20%), material (15%), decade (10%)
3D viewer
garments rendered from real photogrammetry scans (see garment-capture-pipeline.md); per-scan front-facing calibration; a runway walk-cycle animation and a "backstage" pedestal display
Data pipeline
filtering, search, analytics tracking, JSON/CSV/PDF export for the collection
Security work
HMAC-signed sessions, rate limiting, CSP headers, timing-safe auth checks, hardened from an initial shared-secret header into a real session system
Live site
uva-collectiveaccess-frontend.vercel.app

The problem

Before this, the Archive's public-facing presence was 2D photography and text metadata — you could see a photo of a garment and read its catalog entry, but you couldn't actually examine it: turn it, compare its silhouette to another piece, or get a sense of how it moved or draped. That's a real limit for a fashion archive, where shape and construction are the point. I built this to close that gap: a 3D viewer built from real photogrammetry scans, a recommendation engine that surfaces related garments by actual visual and material attributes instead of shared tags, and a backend metadata schema to support all of it.

What I'm proudest of

What I'm proudest of is that this wasn't a frontend skin on someone else's backend — I designed the CollectiveAccess metadata schema, built the auth and caching layer, and built the public site on top of it, so I own the system end to end. It's also the first time I've worked on software inside a research context rather than a typical CRUD app, which changed how I thought about the problem: the "users" are curators and researchers who need the data model to reflect real museum cataloging practice (the Costume Core standard), not just whatever fields were convenient to build.

What's next

The most concrete next step is feeding the garment-capture pipeline's output back into CollectiveAccess — right now the 3D pipeline and the Archive site are connected by shared demo garments, but not yet by a real data pipeline between them. Beyond that, growing the number of garments in the 3D viewer past the initial pilot set is the other clear milestone.

Four scanned garments displayed on pedestals
The 3D Backstage view: the same scans displayed on pedestals.