Selected Work · 01

Kernel

Discover films through the space between them: ML maps thousands of movies into a navigable vector space you pan, zoom, and blend with friends.

ML / Data ScienceData VizProduct Design
Role
Solo: product, design & build
Year
2025–26
Stack
Next.js · Python · Dagster · deck.gl
Status
Live · kernel.film
01

Product Thesis

Every discovery app sorts films by genre and star rating, then keeps showing you the consensus picks.

Kernel treats similarity as spatial: each movie is embedded as a point in a high-dimensional space, where “near” and “between” replace “more like this.” Distance becomes something you can navigate.

landing: the space between films
landing: the space between films
personalized home: recommendations for you
personalized home: recommendations for you
02

The Explorer

The signature view renders the entire catalog as a WebGL point cloud you pan and zoom: thousands of films auto-grouped into labeled regions, re-projectable along different semantic lenses.

Built on deck.gl over a UMAP projection of the embedding space, fluid at sixty frames a second.

the WebGL film map: the signature view
the WebGL film map: the signature view
03

Blend

“What do we all watch tonight?” Blend mixes up to four friends’ tastes into one shared shortlist: weighted taste centroids, real watchlist overlap, and faceted picks so it never collapses to a single genre.

Joined by a QR code or a short link, with every empty and error state designed.

hub
hub
join
join
results
results
04

The design system

Editorial serif display, hairline structure, one lacquer red, and a monospace typeface for every label, all codified into tokens.

Built as a real, documented system and applied edge to edge.

movie detail: keywords, where-to-watch, “movies like this”
movie detail: keywords, where-to-watch, “movies like this”
05

Under the hood

It starts with data: a pipeline ingests thousands of films from the TMDb API, enriching each with metadata, credits, and keywords before any modeling begins. That feeds a thirteen-stage ML pipeline (TMDb ingest → sentence-transformer embeddings → UMAP → HDBSCAN clusters → grid layout) orchestrated in self-hosted Dagster across four Railway services, with recommender quality tracked in MLflow.

The browsable clusters are HDBSCAN run over that same space.

clusters: films grouped by how they feel, not genre
clusters: films grouped by how they feel, not genre