Two clients — Telegram bot (primary) and Web frontend (secondary) — route through nginx to a single Backend.
The backend connects to two abstraction interfaces in a Dependencies layer:
- Database interaction interface → swappable between Mock database (for dev/testing) and PostgreSQL (production)
- LLM interface → swappable between a real LLM and a Mock LLM
The dashed lines indicate the swappable/pluggable implementations behind each interface.