A Watchlist, Not Another Feed
YouTube already had a feed; it did not need another one. Grasp tracks only the channels a user deliberately chooses, ignores short-form noise, and puts the summary before the play button. The product decision was simple: help someone decide whether a long video deserves 40 minutes before asking them to spend the first ten finding out.

Split Jobs by Failure Mode
Channel polling and video summarization fail for different reasons, so they run as separate queueable jobs. Polling discovers uploads, filters Shorts, and deduplicates known videos; processing handles transcripts and model calls. A failed summary can retry without rediscovering the channel or creating duplicate feed items, which keeps the background system recoverable instead of merely optimistic.
Structured Summaries or Bust
The model returns a typed summary with a TL;DR, key points, and timestamped highlights rather than an essay that the UI has to negotiate with. Free-form AI prose is useful; it is not a database schema. Keeping the output structured makes rendering predictable and turns timestamps into direct jump points instead of decorative metadata.

What Shipped
The deployed product separates the Next.js web app from a Hono API, stores channels, subscriptions, videos, transcripts, and summaries independently, and uses Clerk to keep each watchlist personal. The result is a small full-stack system with the production concerns left in: authentication, scheduled discovery, retries, deduplication, and a feed built for triage rather than infinite scrolling.
