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
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 * * *
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ě
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
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
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í
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
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.