The stack
Python and an async stack: one service runs the Telegram bot and scheduled background jobs. A relational database with versioned migrations — 60 schema steps with no manual edits on the server. Managed file search as the foundation of the knowledge base. Structured logs, container builds, one-command deploys. The management UI is server-side templates plus three script tags instead of a separate frontend build.