Jak technicznie czytamy 200 podcastów tygodniowo (i dlaczego klienci to lubią)
Pipeline BizMaven od RSS feed po brief w skrzynce. AssemblyAI, Voyage embeddings, Sonnet 4.6, Postgres + pgvector. Przejrzysty stack dla ciekawych.
Otwartość techniczna jest naszą zasadą. Jeśli wiesz jak działa BizMaven, łatwiej Ci nam zaufać. Ten post opisuje pipeline od momentu publikacji nowego odcinka po brief w Twojej skrzynce.
Etap 1: Detection (co 30 minut)
Każdy z 217 monitorowanych kanałów ma swój RSS feed. Worker w Pythonie (PgQueuer) pollu te
RSS-y co 30 minut. Nowy <item> z pubDate w ostatniej godzinie trafia do tabeli episodes
ze statusem pending.
# pseudo
for channel in active_channels:
feed = parse_rss(channel.rss_url)
for item in feed.entries:
if item.published > channel.last_seen_at:
await db.episodes.insert(...)
channel.last_seen_at = item.published
Etap 2: Download + transcribe (~10 min)
Worker pobiera plik audio (mp3, ogg, m4a) i wysyła do AssemblyAI w trybie nano z
diaryzacją (oddziela mówców) + język wykrywany automatycznie. AssemblyAI zwraca JSON z
words[] (każde słowo + timestamp) + utterances[] (segmenty na mówcę).
Koszt: ~$0.30 za godzinę audio. Średnio 90 min / kanał / odcinek.
Etap 3: Speaker fingerprinting (~30s)
Bierzemy pierwsze 10s każdego mówcy i puszczamy przez resemblyzer (open source, 256-dim embedding). Porównujemy z bazą znanych głosów (Lenny, Patrick, Aleksandra). Jeśli cosine similarity > 0.85, mówca jest oznaczony imieniem. Inaczej zostaje generic „Speaker 1".
To kluczowe — cytat bez imienia ma dla klienta zerową wartość.
Etap 4: Chunking + embedding (~2 min)
Tekst transkryptu dzielimy na chunki ~300 słów (z overlapem 50 słów dla ciągłości). Każdy chunk → Voyage AI voyage-3-large (1024-dim embedding). Zapisujemy do Postgres + pgvector z HNSW index.
Koszt: ~$0.05 za odcinek.
Etap 5: User-specific scoring (codziennie)
Każdy user ma goals_embedding (Voyage embedding ich celów + profilu).
Dla każdego user × nowy chunk: cosine_similarity(user.goals_embedding, chunk.embedding).
Top 50 chunków na usera trafia do shortlistu kandydatów na brief.
Etap 6: Brief generation (wt + pt 06:00)
Sonnet 4.6 (przez konspo-ai-proxy na Tailscale) dostaje:
- Top 50 chunków (każdy z autorem, kanałem, timestampem)
- Profil usera (cele, branża, projekty, ostatnie reply)
- Instrukcje: wybierz 7 cytatów, dodaj „Dlaczego to dla Ciebie" w 1 zdaniu, ułóż w narracji
Sonnet zwraca markdown brief. Walidator sprawdza że każdy cytat ma autora + timestamp. Jeśli cokolwiek halucynuje — fallback do GPT-4 z innego providera.
Koszt: ~$0.20 za brief.
Etap 7: Email send (06:30)
Brief renderowany do HTML (template MJML → Resend). Każdy cytat ma 4 akcje:
- 📌 Zapisz (link z tokenem → API → save)
- 🔗 Skopiuj cytat (link → API → JSON → JS w przeglądarce kopiuje)
- ✕ Nie istotne (link → API → mark dismissed)
I jedna globalna sekcja na końcu: „Odpisz na ten mail z uwagami — koryguje moje przyszłe briefy."
Etap 8: Reply parser (background)
Resend webhook → POST do worker’a z inbound email. Sonnet ekstraktuje uwagi w struktorze:
goal_changes: lista zmian celówchannel_preferences: lubię/nie lubiętopic_preferences: więcej/mniejformat_feedback: za długo / za krótko
Update do user_memory table. Następny brief używa zaktualizowanego embedding.
Dlaczego to działa lepiej niż newsletter Substack
- Personalizacja: każdy użytkownik dostaje inne cytaty. Substack jest one-to-many.
- Source-grounded: cytat ma timestamp + link do oryginału. Newsletter to interpretacja autora.
- Reply-as-control: korekta przez email, nie przez panel admin. Mniej tarcia.
- Skala: 200+ kanałów monitorowanych. Człowiek nie da rady tego śledzić.
Co jest open source
- resemblyzer (speaker fingerprinting)
- PgQueuer (job queue na Postgresie)
- pgvector (embedding storage)
Co jest zamknięte:
- AssemblyAI (transkrypcja)
- Voyage AI (embedding)
- Anthropic Sonnet (brief generation)
Łączny koszt na user: ~$3/miesiąc przy 4 briefach. Marża pozwala na cenę 149 zł / 35 EUR / 49 USD przy comfortable margin.
Pytania techniczne?
Pisz na hello@bizmaven.eu — odpowiadamy chętnie i szczerze.