Turning a watch later graveyard into a catalogue

(

(

3

3

)

)

A web app and Chrome extension that sorts your YouTube Watch Later into shelves you will actually open.

TIMELINE

July 2026

ROLE

Product Design

Brand Identity

Product Direction

TOOLS

React

Chrome Extension APIs

Supabase

Vercel

Claude API

TEAM
TEAM

Just me!

/

Overview

I had 2,796 videos saved for later, and later never came.

Every one of those videos was something I meant to watch. A conference talk, a tutorial, a set someone sent me. Saving to Watch Later feels productive in the moment, which is exactly the trap, because the list has no cost to add to and no way to get through.

At some point I stopped opening it at all. That is the real failure. Not a messy list, an abandoned one.

Laterlist is what I built instead: one sync pulls the whole list in, every video lands on a labelled shelf with a stated reason, and a summary pulled from the captions tells you whether an hour-long video is worth the hour. It is live, and the extension is published on the Chrome Web Store.Problem

We led the end-to-end design of a cohesive hardware-integrated ecosystem from scratch, focusing on democratizing home automation for mass-market users.

/

Overview

I had 2,796 videos saved for later, and later never came.

Every one of those videos was something I meant to watch. A conference talk, a tutorial, a set someone sent me. Saving to Watch Later feels productive in the moment, which is exactly the trap, because the list has no cost to add to and no way to get through.

At some point I stopped opening it at all. That is the real failure. Not a messy list, an abandoned one.

Laterlist is what I built instead: one sync pulls the whole list in, every video lands on a labelled shelf with a stated reason, and a summary pulled from the captions tells you whether an hour-long video is worth the hour. It is live, and the extension is published on the Chrome Web Store.Problem

/

Problem

The list is not too long. It is undecidable.

I studied cognitive science, so the thing I kept coming back to was that this is a choice problem, not a storage problem. Watch Later gives you no way to search it, no way to sort it, and no signal on any row. A three minute music video and a forty minute lecture look identical: a thumbnail, a title, a channel.

So every time you open the list you are asked to pick one item out of hundreds using almost no information, with no way to narrow the field. Closing the tab is the rational response. The list punishes you for having used it.

That reframing decided the whole product. If the problem were volume, the answer would be bulk delete. Because the problem is decidability, the answer is giving every video enough context to be judged in about a second, which is why every card carries a shelf, a duration, and a reason.

We led the end-to-end design of a cohesive hardware-integrated ecosystem from scratch, focusing on democratizing home automation for mass-market users.

/

Process

Two days after launch, YouTube cut off the data the product ran on.

I shipped the first version as a web app that read your Watch Later from the server. On July 12, that stopped working. The tooling started returning empty playlists for a list my own browser could still show me in full. Server side access to Watch Later was closed.

That is the entire premise of the product, so I had to decide fast whether it was dead. What I worked out is that the only code that could still read the list was code running inside the user's own browser, in their own signed-in session. So I promoted the Chrome extension from a post-launch nice-to-have to the core architecture, and rebuilt the product extension-first in a day.

The thing I did not expect was that the constraint was correct. YouTube's official API has never exposed Watch Later, Google removed it in 2016. Every tool in this category works through the browser because the browser is the only honest path. What felt like the product breaking was really the product finding its actual shape, and the version that came out of it is better positioned: it reads your own data, from your own session, only when you ask, and nothing is re-hosted anywhere.

/

Process

It imported 500 videos and reported success. That was the bug.

The first real test on my own library stopped at about 500 videos out of 2,800 and called it done. YouTube throttles rapid pagination and quietly stops serving more, so the import had no idea it was missing two thirds of the list.

I could have shipped that. A user with 300 videos would never hit it. The reason I would not is that a tool whose whole job is organizing your things makes exactly one promise, which is that everything is here. Someone whose library silently lost a hundred videos would not get an error, they would just slowly stop trusting the product every time they could not find something they knew they saved. Silent data loss is a trust failure that looks like nothing.

So the completeness check became structural instead of statistical. The version I rejected used a percentage threshold, which would have let a hundred missing videos pass as normal. The one that shipped tracks YouTube's own continuation markers, and an import that ends with work still outstanding fails loudly and tells you to run it again. It is slower and it fails more often, on purpose.

What I learned is that the failure mode you cannot see is the one worth designing for first. That check has caught real truncation on every large library since.

We led the end-to-end design of a cohesive hardware-integrated ecosystem from scratch, focusing on democratizing home automation for mass-market users.

/

Process

I looked at the first design pass and said it was not design.

I had 2,796 videos saved for later, and later never came.

The first visual pass came back as contrast corrections, focus handling, and text wrapping fixes. All real problems, all worth fixing. I looked at the result and said I could not see a single design change, because I could not. Accessibility repair is maintenance. It is invisible by construction, and I had asked for an identity.

So I threw out the look entirely. The old one was cold blue-slate with a pink and blue gradient, which is what nearly every AI product has looked like since 2023 and which said nothing about this one. The differentiator here is not that a model sorts your videos. It is the librarian: shelves, a catalogue, a stated reason on every card. So the identity had to say that.

The rebuild is warm archival near-black instead of cold slate, one brass accent instead of a gradient, and it stays dark because thumbnails need a dark surround to read. Type got three jobs and three faces: a serif for voice and headings, a sans for dense interface text, a mono for counts and timestamps. The landing hero stopped being grey placeholder rectangles and became an actual catalogue with shelf tabs, italic descriptions, and real counts, so the idea of the product is visible before you sign up.

The lesson I took is that I had been asking for design and accepting QA, and the fix was just to say so out loud. It also cost me a round I would not have spent if I had written down what "design pass" meant before asking for one.

/

Final Design

Five shelves, and a reason on every card.

I had 2,796 videos saved for later, and later never came.

You install the extension, press sync once, and the whole library comes across. Every video lands on one of five shelves: worth learning from, worth watching, music, just for fun, and outdated. Each card says why it was filed there, so a wrong call is visible and correctable instead of mysterious, and correcting it teaches the sorting. After the first sync it keeps itself current on its own.

Open any video and you get a summary pulled from its captions, which is the part I use most. It answers the question that actually stops you, which is whether a fifty minute video is worth fifty minutes.

The detail I am most pleased with is the smallest one. The extension icon at 16 pixels could not just be the large mark scaled down, because the outlined shelf spines turned to mush, and what survived read as two solid bars, which is the universal pause glyph. A pause icon on a video tool tells you the opposite of what the product does. The small icon is drawn differently on purpose, with a knocked out shelf rule that breaks the pause reading. I only caught it by looking at the rendered file at actual size instead of trusting the export.

/

Reflection

The most useful decision I made was refusing to delete anything.

The obvious feature is removing videos from your real YouTube playlist. Everyone asks for it, it is the natural end of the workflow, and I built a working prototype of it. Then I blocked it from shipping.

The reason is that YouTube's official API does not support removing items from Watch Later, so any version of it is a workaround operating on someone's real account, at scale, with no undo. Getting it wrong once means deleting videos a person saved and cannot get back. Marking something watched in Laterlist clears it from your board, and the interface says out loud that your actual YouTube playlist is untouched, so nobody has to guess what a button did to their account. For the same reason I renamed the other action from "dismiss" to "not interested", because the label should describe what the person meant, not what the database did.

Along the way I found the landing page promising one-click bulk removal that did not exist and was never going to on that timeline, and I cut it. The version of me that shipped that copy was writing a roadmap, not a product page. When you kill a claim, you have to search the whole app for it, not just the screen you happen to be looking at, which I learned by finding the same false promise a second time on a different screen a week later.

Two honest limits. The only person whose real library I have designed against is me, and beta testers are still on the to-do list, so what I have is one very deep user and no breadth. And the build itself was AI-assisted: I planned the product, made every product and design call, reviewed the work, and tested it on real hardware, but I directed agents to write the code rather than writing it myself. That is how I got a product with a published extension out in three weeks as one person, and it is also why my next move on this is putting it in front of people who are not me.

OTHER

PROJECTS

Get in touch