architektura

Jak to funguje

Pipeline běží každý den ve 20:00 UTC. Projde všechny aktivní kanály, stáhne nová videa a pro každé rozhodne, jestli stojí za přečtení. Žádná ruční práce.

tok dat

01

Spuštění

Každý den ve 20:00 UTC Vercel Cron zavolá interní endpoint. Ten načte všechny aktivní zdroje z databáze a pro každý spustí zpracování jako samostatný job.

Vercel Cron — schedule 0 20 * * *

02

Zjištění nových videí

Pro každý kanál se stáhne seznam posledních 10 videí. Videa, která jsou už v tabulce zpracovana_videa, se přeskočí. Ke každému kanálu je uloženo channel_id — odvozuje se jednou z YouTube handles a pak se cachuje v databázi.

YouTube Data API v3 — playlistItems.list

Zdarma — free tier pokryje desítky kanálů denně

03

Stažení transkriptu

Supadata API stáhne přepis videa. Preferuje angličtinu; pokud anglické titulky nejsou, zkusí cokoliv dostupné. Pokud video nemá titulky vůbec (status 404 nebo 422), pipeline video označí jako chyba_transkriptu a přejde na další. Segmenty přicházejí s offsetem v milisekundách — ten se převede na sekundy pro interní formát.

Supadata API — /v1/youtube/transcript

Zdarma do 100 transkriptů za měsíc

04

Předfiltr

Levný a rychlý test: stojí video za plné shrnutí? Claudovi Haiku přijde titulek, prvních 1 000 znaků popisu a prvních 500 slov transkriptu. Vrátí JSON s jedním polem zpracovat: true/false a krátkým důvodem. Systémový prompt je cachovaný — při opakovaných voláních se znovu neposílá. Pokud Claude vrátí false, video se zaloguje jako odfiltrovano a zpracování končí.

Claude Haiku 4.5 — max 256 výstupních tokenů, prompt caching

< 0,05 Kč za video

05

Plné shrnutí

Celý transkript se předá Sonnetovi spolu s URL videa, délkou a jazykem. Transkript má formát [MM:SS] text — časové značky slouží Claudovi jako interní kontrola přesnosti; do výstupu se nikdy nedostanou. Claude vrátí validní JSON s česky přeloženým titulkem, hlavní myšlenkou, 3–6 praktickými body, sekcí pro tebe konkrétně, citátem a tagy. Systémový prompt (přes 2 000 tokenů) je cachovaný — šetří přibližně 90 % ceny vstupu na opakovaných voláních. Přesný počet vstupních a výstupních tokenů se měří přímo z API odpovědi a ukládá ke každému shrnutí.

Claude Sonnet 4.6 — max 2 048 výstupních tokenů, prompt caching

Závisí na délce videa — přesná hodnota uložena u každého shrnutí

06

Uložení

Shrnutí se vloží do tabulky shrnuti. Slug se tvoří z českého titulku (odstraní diakritika, mezery na pomlčky, max 60 znaků) plus prvních 6 znaků video ID — zaručuje unikátnost. Zároveň vznikne záznam v zpracovana_videa s výsledkem shrnuto, takže příští běh cron jobu toto video přeskočí.

Supabase PostgreSQL — tabulky shrnuti a zpracovana_videa

07

Zobrazení

Čítárna zobrazuje shrnutí z posledního týdne, která jsi ještě nečetl (sloupec precteno_at je NULL). Po kliknutí na Přečteno se nastaví časová značka a shrnutí zmizí z čítárny. Archiv zobrazuje vše bez filtru.

Next.js — server komponenta, dotaz při každém načtení (force-dynamic)

proč takto

YouTube od roku 2024 blokuje přímé stahování transkriptů a RSS feedů z cloudových IP. Proto pipeline používá dvě externí API: Supadata pro přepisy a YouTube Data API v3 pro seznam videí.

Předfiltr s Haiku existuje proto, aby každé video nestálo plný Sonnet call. Většina videí projde — Haiku je nastaven na benevolentní práh a v pochybnostech zpracovává. Sonnet dostane jen videa, která mají smysl.