Архитектура CRM без костылей: опыт разработки на NestJS и FSD
Разбор стека масштабируемой CRM: использование Feature-Sliced Design, модульного NestJS и HashiCorp Vault для создания стабильной IT-инфраструктуры агентства.
👁 1 067 просмотров в Telegram

Архитектура без костылей: CRM, которую не стыдно показать Яндексу 🏗
Большинство агентских CRM — это таблица в Notion и 50 открытых вкладок в браузере. Мы пошли по другому пути. Если вы строите IT-продукт, у вас должна быть архитектура, а не история болезни.
Как устроена наша платформа под капотом:
1) фронтенд по Feature-Sliced Design: мы выбрали этот паттерн не ради моды, а потому что он работает. Когда менеджер просит изменить логику фильтрации лидов, разработчик меняет ровно один слайс. Sidebar, страница и API-клиент не знают друг о друге больше, чем нужно. CRM, лендинг и UI-kit живут рядом в pnpm-монорепе;
2) бэкенд на NestJS с жестким Single Responsibility: в нашем модуле CRM нет классов на 3000 строк, которые делают всё. Каждая операция — это отдельный сервис (leads-create, leads-update, sla-monitor). Хочешь изменить логику обогащения лида — открываешь один файл и не боишься сломать создание;
3) хирургическое разделение инфраструктуры: API-сервер и Telegram-бот используют один и тот же код, но запускаются дважды с разными переменными. Тяжелый bot polling физически не может повесить HTTP-запросы. Под капотом работают Redis Pub/Sub, Python-воркер Telethon и RustFS (S3-совместимый сервер на Rust без накладных расходов MinIO);
4) банковское шифрование с HashiCorp Vault: мы не храним ключи шифрования в переменных окружения. Они лежат в KMS на отдельном сервере, который слушает только один IP. В связке с AES-256-GCM это гарантирует, что персональные данные клиентов хранятся в полной безопасности;
5) абсолютная изоляция кода: мы подняли собственный git-сервер Gitea. Наш код не уходит в GitHub, а внутренний трекер задач полностью закрыт от внешнего мира.
Всё это реализовано не в enterprise-корпорации с отделом разработки из 50 человек. Это внутренний инструмент digital-агентства, который мы сразу написали так, чтобы не пришлось всё переписывать через год.
Работаем! 🚀