buzz-bot

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

Feature Description
RSS subscriptions Add any podcast by RSS URL; bulk-import via OPML
Podcast search Search Apple Podcasts directory and subscribe in one tap
Episode inbox Unified feed of unheard episodes across all subscriptions, with "hide listened" and compact grouping filters
Episode player Native audio playback inside Telegram with resume-from-position, variable speed (1x/1.5x/2x), skip, and a persistent mini-player
Autoplay Automatically advance to the next episode when one finishes
Progress tracking Listening position saved every 5 seconds; offline saves queued and replayed on reconnect
Offline caching Episode audio downloaded in background; seamless switch to local copy on network loss
Bookmarks Bookmark episodes with a single tap; search saved episodes
Semantic search Search your inbox by meaning — episodes re-ranked by vector similarity to your query
Topic cloud Browse 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 recommendations Hybrid semantic + collaborative filtering with explainable topic matching — details
Share & send Share any episode via Telegram's share sheet, or send the audio file directly to your own chat
AI dubbing Hear any podcast in your language with the original speaker's voice cloned — details
Karaoke subtitles Live subtitle panel with karaoke-style highlighting; fullscreen transcript; tap any line to seek

Tech Stack

Layer Technology
Language Crystal >= 1.9
Web server Kemal
Telegram bot Tourmaline
Database PostgreSQL (Neon) via crystal-pg, pgvector for embeddings
Frontend ClojureScript, re-frame, Reagent
Frontend build shadow-cljs
Service Worker Offline audio cache (Range-aware) + offline write queue
Job dispatch RunPod Serverless API v2
AI pipeline Demucs, WhisperX, pyannote, Gemini Flash, VoxCPM2 — details
Embeddings BGE-M3 (1024-dim, multilingual) + KeyBERT topic extraction — details
Audio storage Cloudflare R2
Deployment Docker, k3s on Hetzner — details
Ingress / TLS Traefik 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


License

MIT

Repository

buzz-bot

Owner
Statistic
  • 0
  • 0
  • 0
  • 0
  • 5
  • 11 minutes ago
  • March 5, 2026
License

Links
Synced at

Wed, 20 May 2026 21:08:07 GMT

Languages