Three channels, one orchestrator
Board Game Librarian runs on 20 background services. All three user-facing channels — Telegram bot, web chat, and partner widget — route through a single orchestrator service. That is where the Q&A logic lives.
The orchestrator is the critical path. If it goes down, all three channels stop answering questions. Everything else can be degraded without a total outage.
The 20 services
Critical (must run)
| Service | Role |
|---|
| Rules orchestrator | Q&A pipeline, AI synthesis |
| Telegram bot | Telegram webhook handler |
| Web frontend | Next.js: chat, admin, marketing |
| Game library API | Game catalog, user management |
| Embedding service | Vector generation |
Supporting (degraded without)
| Service | Role |
|---|
| PDF service | PDF extraction (Apache Tika) |
| Community scraper | Community forum scraping |
| Game data cache | Game data cache |
| Game data sync | Nightly metadata sync |
| Corpus analyzer | Query expansion, intent detection |
Publisher sync (scheduled)
| Service | Schedule |
|---|
| Esoteric Order of Gamers sync | Daily 03:30 |
| GMT Games sync | Daily 03:31 |
| Stonemaier Games sync | Daily 03:32 |
| Tabletopia sync | Daily + weekly |
| Ludus Magnus Studio sync | Weekly Sun 01:00 |
Technology stack
| Layer | Technology |
|---|
| Database | PostgreSQL con ricerca vettoriale |
| AI synthesis | OpenRouter → GPT-4o / Claude |
| Embeddings | jina-v2-small-en (Python) |
| Web framework | Next.js (App Router) |
| Backend APIs | Express (Node.js) |
| Cache | Redis |
| Observability | Jaeger + Phoenix + OpenTelemetry |