jrdnhnz.dev
← Back to Blog

July 20, 2026 · 6 min read

Scaling a Streaming Catalog: Aggregating 24,000 Titles from 31 Providers

How Dramacin normalizes 31 fragmented providers into one catalog with TMDB metadata, PWA install, and real-time trending.

architecturestreamingnextjsscale

Dramacin is a streaming platform for Chinese and Korean dramas and films. The hard part isn't the player — it's the catalog. 24,000+ titles, 1M+ episodes, pulled from 31 providers, each with its own naming conventions, episode numbering, subtitle availability, and update cadence. Left raw, it's unusable.

The problem is fragmentation

Provider A calls a show "The Untamed"; Provider B calls it "Chen Qing Ling"; Provider C has it under a romanized variant. Episode counts disagree. Subtitles exist for some providers, not others. A user searching "untamed" should hit all of them, merged, with the best available sources listed underneath.

One normalized schema

Every provider feeds through an adapter into one canonical schema:

  • slug — deterministic, keyword-rich, deduped against title aliases.
  • title, altTitles[] — canonical + all known variants for search.
  • providers[] — which sources carry it, with their per-source episode lists.
  • metadata — TMDB-enriched (poster, backdrop, genres, rating, synopsis).

TMDB is the spine. Once a title resolves to a TMDB ID, all providers that carry it collapse onto one row. The adapter's job is to find that TMDB match (fuzzy title + year), not to invent metadata.

Trending and freshness

"Trending" across 31 providers can't be a cron that re-ranks everything. It's a weighted blend of recent cross-provider velocity, regional demand, and manual featuring — recomputed on a short interval and cached. Users feel "live"; the cost is bounded.

Per-provider and per-genre filters ride on the normalized schema, so they work uniformly regardless of which source originally held the title.

PWA install

A streaming app that isn't installable loses returning users. Dramacin is a PWA — installable, offline-aware shell, cached assets, and a player that survives flaky networks. The install prompt is the cheapest retention lever there is.

What I learned

  • The catalog is the product. A great player over a messy catalog is a bad app; a decent player over a clean catalog is a good one.
  • Normalization at ingest beats cleanup at read time, every time.
  • A single spine (TMDB) to merge onto beats inventing your own canonical IDs.

24,000 titles isn't impressive because of the number — it's impressive because 31 providers agreed on nothing and the user never has to know.