package

github.com/watchcat/buzz-bot

main / published Jun 9, 2026 / repository

Telegram podcast Mini App — Crystal/Kemal/Tourmaline + Neon PostgreSQL

Buzz-Bot

Podcast player for the AI epoch.

Listen to any podcast, then tap one button and hear it in your language — same voices, different words.

Buzz-Bot runs inside Telegram as a Mini App and uses a cloud GPU pipeline (RunPod Serverless) to transcribe, translate, and re-synthesize every speaker's voice.

To view AI pipeline for podcast dubbing workflow check this repository



Features

FeatureDescription
RSS subscriptionsAdd any podcast by RSS URL; bulk-import via OPML
Podcast searchSearch Apple Podcasts directory and subscribe in one tap
Episode inboxUnified feed of unheard episodes across all subscriptions, with "hide listened" and compact grouping filters
Episode playerNative audio playback inside Telegram with resume-from-position, variable speed (1x/1.5x/2x), skip, and a persistent mini-player
AutoplayAutomatically advance to the next episode when one finishes
Progress trackingListening position saved every 5 seconds; offline saves queued and replayed on reconnect
Offline cachingEpisode audio downloaded in background; seamless switch to local copy on network loss
BookmarksBookmark episodes with a single tap; search saved episodes
Semantic searchSearch your inbox by meaning — episodes re-ranked by vector similarity to your query — details
Topic cloudBrowse episodes by auto-extracted topics, clustered nightly across languages (EN/RU/NL) so synonyms collapse into one tag; tap a tag to filter your library — details
Smart recommendationsHybrid semantic + collaborative filtering with explainable topic matching — details
Share & sendShare any episode via Telegram's share sheet, or send the audio file directly to your own chat
AI dubbingHear any podcast in your language with the original speaker's voice cloned — details
Karaoke subtitlesLive subtitle panel with karaoke-style highlighting; fullscreen transcript; tap any line to seek

Tech Stack

LayerTechnology
LanguageCrystal >= 1.9
Web serverKemal
Telegram botTourmaline
DatabasePostgreSQL (Neon) via crystal-pg, pgvector for embeddings
FrontendClojureScript, re-frame, Reagent
Frontend buildshadow-cljs
Service WorkerOffline audio cache (Range-aware) + offline write queue
Job dispatchRunPod Serverless API v2
AI pipelineDemucs, WhisperX, pyannote, Gemini Flash, VoxCPM2 — details
EmbeddingsBGE-M3 (1024-dim, multilingual) + KeyBERT topic extraction — details
Audio storageCloudflare R2
DeploymentDocker, k3s on Hetzner — details
Ingress / TLSTraefik v3, cert-manager + Let's Encrypt

Quick Start

Prerequisites

  • Crystal >= 1.9 + shards
  • Node.js >= 18 + npm
  • Docker
  • PostgreSQL (Neon free tier works)
  • Telegram bot token from @BotFather
  • Public HTTPS URL for webhooks

1. Clone and install dependencies

git clone https://github.com/yourname/buzz-bot.git
cd buzz-bot
shards install
npm install

2. Configure environment

cp k8s/secret.example.yaml k8s/secret.yaml
# Fill in all values — see docs/DEPLOYMENT.md for variable reference

3. Run migrations

for f in migrations/*.sql; do psql "$DATABASE_URL" -f "$f"; done

4. Build frontend

# Development (live reload)
npx shadow-cljs watch app

# Production
npx shadow-cljs release app

5. Run locally

crystal run src/buzz_bot.cr

Use Cloudflare Tunnel to expose localhost over HTTPS for Telegram webhooks:

# Terminal 1 — ClojureScript watch build
npx shadow-cljs watch app

# Terminal 2 — tunnel + Crystal server
./devrun.sh           # auto-detects named tunnel or quick tunnel
./devrun.sh --quick   # temporary URL, no account needed

Documentation

  • AI Dubbing Pipeline — how dubbing works, supported languages, progress tracking
  • Recommendations — hybrid vector + collaborative filtering, topic extraction & clustering, explainability
  • Deployment Guide — k3s setup, environment variables, monitoring
  • API Reference — routes, database schema, feature flags

License

MIT

API