Как я звезду смерти построил? Enterprise SaaS за три месяца
Один разработчик, Kubernetes-кластер на 8 нод и AI-copilot. Результат: платформа из 30+ микросервисов, на которой новый бизнес-модуль поднимается за 5-10 дней. Рассказываю, как это устроено и почему это не магия.
Зачем вообще строить своё
Есть два подхода к автоматизации бизнеса. Первый - купить 15 SaaS-сервисов и склеить их через Zapier. CRM тут, таск-трекер там, мессенджер отдельно, ATS отдельно, вики отдельно. Платишь за каждый, данные размазаны, интеграции ломаются.
Второй подход - построить платформу, на которой все модули живут рядом, делят пользователей, права, данные и UI. Добавить новый модуль - не "ещё один SaaS", а буквально новая папка в проекте.
Я выбрал второй. И через три месяца получил работающую ERP-систему с рекрутингом, CRM, управлением задачами, корпоративным мессенджером, вики, интерактивными досками и AI-пайплайнами. Всё крутится на собственном Kubernetes-кластере, деплоится автоматически и мониторится 24/7.Но самое ценное не то, что уже есть. А то, что новый модуль теперь добавляется за 5-10 дней. Расскажу почему.
Архитектура: один раз сложно, потом просто
Принцип "один модуль - один сервис"
Каждый бизнес-модуль - это бэкенд (NestJS-микросервис со своей базой данных, TypeScript, GraphQL, gRPC) и фронтенд (папка в общем Next.js-приложении с конфигом в 10 строк).
Модули между собой не знают друг о друге. Общаются через шину событий и gRPC. Падение одного модуля не роняет остальные. Можно деплоить по отдельности, масштабировать по отдельности, разрабатывать по отдельности.
Звучит как учебник по микросервисам? Разница в том, что весь обвязочный код вынесен в общие пакеты. Новому сервису не нужно с нуля настраивать авторизацию, логирование, подключение к БД, конфигурацию, мультитенантность. Всё это подключается одним импортом.Что делает платформу быстрой для разработки
Ядро платформы - core, монорепозиторий из 13 npm-пакетов: types (общие интерфейсы - один раз описал пользователя, все сервисы используют), auth (JWT-стратегия, guards, RBAC), db (подключение к PostgreSQL, базовые сущности, миграции), config (переменные окружения с валидацией), tenant (мультитенантность - фильтрация по account_id из коробки), logger (структурированные логи, которые умеет парсить мониторинг) и ещё 7 пакетов.
Когда создаёшь новый сервис, не пишешь инфраструктурный код. Просто импортируешь нужные пакеты и сразу пишешь бизнес-логику.
Фронтенд: свой фреймворк поверх Next.js
Тут главная идея - Shell-архитектура. Есть оболочка (Shell), которая рисует шапку, боковую панель, хлебные крошки, уведомления, темы. И есть модули, которые живут внутри этой оболочки.
Добавить новый модуль на фронтенде - это буквально: создать папку, написать конфиг (название, иконка, цвет, пункты меню), положить страницы и компоненты. Shell автоматически подхватит модуль, добавит в навигацию, применит тему. Не нужно трогать общий layout, роутинг или сайдбар.
Почему это быстро работает? Весь рендеринг на сервере (SSR). Браузер получает готовый HTML, данные уже загружены. Сервер стоит рядом с базой данных в том же кластере - задержка меньше миллисекунды. Первый контент появляется за полсекунды, а не через 3-5 секунд как у классических SPA.
Плюс real-time через Socket.io: уведомления, обновления данных приходят мгновенно без перезагрузки страницы.
API: один эндпоинт вместо зоопарка
Все бэкенд-сервисы объединены в единый GraphQL API через Apollo Federation. Клиент отправляет один запрос - роутер сам разбивает его на подзапросы к нужным сервисам, собирает ответы и возвращает.
Для фронтенд-разработчика разницы нет, из какого сервиса приходят данные. Один эндпоинт, одна схема, автодокументация.А между сервисами - gRPC: бинарный протокол, который в 5-10 раз быстрее REST. Один сервис вызывает другой как обычную функцию, с полной типизацией из proto-файлов.
Инфраструктура: всё Kubernetes-native
Кластер из 8 нод с тремя окружениями: dev, test, prod - каждое в своём namespace. Рабочие ноды air-gapped (без интернета), образы тянутся из внутреннего registry.
Перед этим стоит Envoy Proxy - проверяет JWT-токены, режет SQL-инъекции и XSS, управляет CORS и rate-limiting. Ни один запрос не доходит до бизнес-логики без валидного токена.
Аутентификация через Keycloak: OAuth2, SSO, RBAC-роли, группы. Пользователи одной компании изолированы от другой на уровне данных и прав.Dev-стенд: Tilt с hot-reload
Локальная разработка крутится на Tilt - оркестраторе для Kubernetes. Он следит за изменениями в коде и автоматически пересобирает только то, что изменилось. Правишь файл - через 2-3 секунды новая версия уже работает в кластере. Не нужно пересобирать Docker-образ, не нужно ждать деплой. Это превращает Kubernetes-разработку из "ждать 5 минут после каждого изменения" в "сохранил - увидел результат".Tilt поднимает все 30+ сервисов, базы, Redis, Keycloak - полную копию продакшена. Можно дебажить взаимодействие между сервисами локально, а не гадать, почему на тесте сломалось.
CI/CD за 6 шагов
Каждый сервис проходит автоматический пайплайн: качество кода (ESLint, TypeScript strict mode, аудит зависимостей), сборка (Docker-образ в приватный registry), деплой на тест (Helm upgrade в test-namespace), уведомление (бот в рабочий чат), сборка для прода (пересобрать с production-тегом), деплой на прод (ручное подтверждение).
Push в develop - через 5 минут сервис работает на тест-стенде. Merge в master + подтверждение - на проде.Собственный почтовый сервер
На кластере развёрнут Stalwart - полноценный mail-сервер с поддержкой SMTP, IMAP и JMAP. Домен rekrut.ing, DKIM-подписи, TLS. Платформа отправляет транзакционные письма (приглашения, уведомления, сброс пароля) через собственную инфраструктуру, без зависимости от внешних сервисов вроде SendGrid или Mailgun.
Мониторинг: Prometheus + Loki + GrafanaПолный observability-стек: метрики со всех 8 нод каждые 15 секунд, централизованные логи со всех pod'ов, распределённая трассировка запросов между сервисами. 18 правил алертинга с уведомлениями: pod упал, нода перегружена, БД недоступна - узнаю за минуту.
AI внутри: LLM как инфраструктура
Отдельный сервис абстрагирует работу с языковыми моделями. Поддерживает локальный Ollama (DeepSeek R1 на CPU-ноде с 64GB RAM) и облачные провайдеры (OpenRouter, DeepSeek API, OpenAI, Anthropic).
Прямо сейчас AI используется для скоринга резюме под вакансии, обогащения спаршенных вакансий (извлечение структуры из сырого текста), классификации Telegram-постов (вакансия/не вакансия), генерации эмбеддингов для семантического поиска.
Всё оркестрируется через Temporal: парсер собрал данные - LLM обогатил - эмбеддинг сгенерирован. Если шаг упал - автоматический retry. Если нода перегружена - очередь ждёт.
Сейчас в разработке следующий уровень - Paperclip, оркестратор AI-агентов. Это не просто "вызвать LLM по API", а полноценная координация команды агентов: оргструктура, бюджеты на каждого агента, тикетная система задач с аудитом, защита от двойного выполнения и неконтролируемых расходов. По сути, если LLM-сервис - это один сотрудник, то Paperclip - это компания из AI-сотрудников с менеджментом.
Что уже работает
За три месяца на платформе реализовано:ATS (БРИЗ) - рекрутинг: вакансии, кандидаты, Kanban-воронки, AI-скоринг. Уже в промышленной эксплуатации - живые клиенты работают ежедневно.
Жара - управление задачами: проекты, спринты, доски (аналог Jira). В стадии mvp.
Маяк(CRM) - контакты, сделки, воронки продаж.В стадии mvp.
Echo - корпоративные коммуникации: мессенджер, видеозвонки. По сути - собственный Zoom + Slack в одном модуле. Сейчас на этапе активного тестирования.
Атлас- корпоративная Wiki. В стадии mvp.
Море - интерактивные доски.В стадии mvp.
Notifications - центр уведомлений: email, SMS, push. Асинхронная доставка, real-time стриминг через SSE.
ЛЛМ оркестратор агентов: координация нескольких AI-моделей, бюджеты, тикетная система задач, аудит. Управляет командой агентов как компанией.
Плюс: полноценное управление пользователями и ролями, система плагинов (OAuth/API/Webhook), генерация PDF/DOCX, полнотекстовый поиск, собственный почтовый сервер (Stalwart).
Почему новый модуль - 5-10 дней
Вот что нужно сделать, чтобы добавить новый бизнес-модуль:
День 1-2, бэкенд: создать новый NestJS-сервис, подключить общие пакеты, описать сущности, написать миграцию, создать GraphQL-резольвер и сервис. Авторизация, мультитенантность, логирование - уже есть из общих пакетов.
День 3-4, фронтенд: создать папку модуля с конфигом, сверстать страницы используя готовые шаблоны (таблица, Kanban, дашборд), подключить GraphQL-запросы через Apollo Client. Shell подхватит модуль автоматически.
День 5, интеграция: добавить подграф в Apollo Router (одна строка в конфиге), Helm chart (скопировать шаблон, поменять имя и порт), CI/CD пайплайн (скопировать buildspec), деплой на тест.
День 6-10, полировка: gRPC-интеграции с другими сервисами (если нужно), E2E-тесты, деплой на прод.
Это не магия. Это результат того, что вся инфраструктурная работа уже сделана один раз. JWT-авторизация работает. Мультитенантность работает. CI/CD работает.
Мониторинг работает. Shell подхватывает модули. GraphQL Federation маршрутизирует запросы.Ты пишешь только бизнес-логику.
Разработка с AI: не copilot, а команда
Вся платформа разрабатывается одним человеком, но не в одиночку. Обычно у меня параллельно работают 3 AI-агентов:
2 Opus - первичное проектирование и разработка новых сервисов. Архитектура, сложная бизнес-логика, интеграции с нуля.
2 Sonnet - доработка уже написанных сервисов. Фичи, рефакторинг, баг-фиксы.
2 Composer (Cursor) - документация, тесты, допиливание фронтенда.
Это не автодополнение в IDE. Каждый агент читает кодовую базу, понимает архитектуру, пишет сервисы целиком, конфигурирует Kubernetes, дебажит проблемы на кластере.
Лимиты API обычно заканчиваются за две недели, поэтому чередую Claude Code и Cursor - в Cursor модели Opus и Sonnet отрабатывают быстрее.Telegram-бриджи: работа с телефонаОтдельная история - мосты между AI-агентами и Telegram.
Я могу поставить задачу агенту прямо из мессенджера, получить результат, одобрить деплой - всё с телефона. Не нужен ноутбук, не нужен терминал. Утром в метро проверил статус, написал "добавь фильтр по городу в парсер" - к обеду готово.Типичный рабочий процесс
Я описываю, что нужно: "Добавить парсер вакансий с Ozon через API". Агент исследует существующий код, находит паттерны. Пишет реализацию, следуя архитектуре платформы. Я ревьюю, правлю, деплою.
Скорость: то, что senior-разработчик пишет за неделю, агент генерирует за час. Я трачу время на архитектурные решения и ревью, а не на бойлерплейт.Без AI эта платформа заняла бы год. С AI - три месяца. И главное: чем больше в платформе стандартизированного кода (общие пакеты, Shell, шаблоны), тем эффективнее AI его переиспользует.
Масштабирование: от стартапа до энтерпрайза
Платформа Kubernetes-native с рождения. Что это значит на практике:
Горизонтальное масштабирование: нужно больше мощности - добавляешь ноды в кластер, поднимаешь реплики сервисов. Каждый модуль масштабируется независимо: ATS нагружен - даёшь ему 5 реплик, остальные работают в одном экземпляре.
Мультитенантность: каждая компания-клиент изолирована по account_id. Один кластер обслуживает тысячи компаний, данные не пересекаются, права не утекают.
Три окружения: dev (разработка с hot-reload), test (автоматический деплой), prod (ручное подтверждение). Один и тот же Helm-чарт, разные values-файлы.
Текущий кластер из 8 нод спокойно тянет все 30+ сервисов, мониторинг, Keycloak, почтовый сервер и LLM-ноду. Для тысячи пользователей хватит. Для десяти тысяч - добавить пару нод.
Итого
Три месяца. Один разработчик. AI-copilot.
Результат:30+ микросервисов на NestJS + TypeScript. 9 бизнес-модулей (ATS, CRM, таск-трекер, мессенджер, wiki, доски, парсеры, AI, оркестратор агентов).
Kubernetes-кластер на 8 нодах с полным CI/CD и мониторингом. GraphQL Federation - единый API из 13 подграфов. Собственный Shell-фреймворк - SSR, real-time, модульный UI. AI-пайплайны - парсинг, обогащение, скоринг, классификация.
И главное: платформа, на которой следующий модуль - это 5-10 дней работы, а не 5-10 месяцев. Потому что инфраструктура, авторизация, мониторинг, CI/CD, UI-фреймворк и общие пакеты уже построены.
Уровень технологической готовности: TRL 7-8
Оцениваю текущее состояние платформы как TRL 7-8 (Technology Readiness Level) - демонстрация и эксплуатация в реальных условиях.
Вот почему:TRL 7 (пройден) - демонстрация прототипа системы в рабочей среде. Полный стек развёрнут на production-кластере (не локальной машине, не стейджинге). ATS-модуль (БРИЗ) работает с живыми клиентами ежедневно - реальные вакансии, реальные кандидаты, реальные воронки. CI/CD пайплайн доставляет код от коммита до прода за 10 минут. Мониторинг 24/7 с алертингом - система обнаруживает и сигнализирует о проблемах автоматически.
Собственный почтовый сервер обрабатывает транзакционные письма в продакшене.TRL 8 (в процессе) - завершённая и квалифицированная система. Мультитенантная изоляция проверена на реальных клиентах. Горизонтальное масштабирование подтверждено (8 нод, 30+ сервисов). Echo (мессенджер + видеозвонки) проходит пользовательское тестирование. Paperclip (оркестратор AI-агентов) в активной разработке. Остаётся: нагрузочное тестирование на большом количестве пользователей, прохождение security-аудита, расширение клиентской базы.
До TRL 9 (полноценная коммерческая эксплуатация) осталось: масштабирование клиентской базы, SLA-гарантии и прохождение enterprise security review. Но фундамент - архитектура, инфраструктура, CI/CD, мониторинг - уже production-grade.
Что платформа выдала за последний месяц
Главный тест любой платформы - скорость, с которой на ней создаются новые продукты. Вот что было сделано за один месяц поверх Equator:
Прототип необанка - флотилия AI-агентов, имитирующая работу операторов: обработка заявок, скоринг, коммуникация с клиентами.
Система экспертной оценки недвижимости - прототип с автоматизацией оценочных отчётов.
CRM для кризисного менеджмента авиакомпаний - расселение, трансферы и питание пассажиров отменённых рейсов и экипажей.
Крупнейшая в мире NFT-коллекция - запущена и работает.
Несколько лендингов - быстрая сборка на платформенных компонентах.
Telegram-бриджи для Cursor и Claude Code - набор мостов для управления агентами из мессенджера.Интеграции с Telegram - парсинг каналов, классификация сообщений через LLM.
MVP контент-завода - автоматическая генерация контента через пайплайны.
Карусель LLM-провайдеров - ротация между провайдерами для обхода лимитов токенов, что позволяет парсить и классифицировать данные в промышленных объёмах.
Локальная LLM-инфраструктура - поднял и оптимизировал Ollama под CPU с несколькими моделями (DeepSeek, Qwen).
Десять продуктов за месяц. Не потому что я не сплю, а потому что платформа даёт фору: авторизация, мультитенантность, CI/CD, мониторинг, UI-фреймворк - всё уже есть. Пишешь только бизнес-логику.
Что дальше
Планирую выпускать новый модуль или проект каждые 2-4 недели. Буду рассказывать об этом здесь на VC и в своём Telegram-канале.Звезда смерти собрана. Осталось навести на нужную планету.
Telegram: @rekrutai_ru - подписывайтесь, там подробности по каждому модулю, техническая кухня и анонсы новых продуктов.Если интересны подробности по конкретным частям архитектуры - пишите в комментариях, раскрою детально.