Обсудить задачу
Собственный продукт · B2B SaaS

Groop

Собственный B2B SaaS: управление проектами и командой внутри Telegram. Рабочие чаты становятся рабочими пространствами, а интерфейс открывается как Mini App — без установки отдельного приложения. Продукт опубликован в Telegram App Center, в нём работали 1500 команд.

1500команд в продукте
Результат
Измеримые величины по проекту.
1500команд
работали в продукте
7сервисов
самостоятельных сервисов на четырёх технологических стеках
Что было и что стало
Было

Договорённости команды теряются в ленте сообщений: у решения нет исполнителя, срока и истории. Классический путь — завести отдельный таск-трекер — упирается в то, что команду нужно туда перевести и приучить, а переписка всё равно остаётся в мессенджере.

Стало

Продукт опубликован в Telegram App Center, через него прошли 1500 команд. Бот подключается в групповой чат и превращает переписку в управляемые сущности: из сообщений создаются задачи, комментарий добавляется ответом на сообщение, постановка доступна прямо из строки ввода Telegram. Продукт закрывает полный контур — задачи, проекты, календарь, учёт времени, файлы, совместные заметки и аналитику, — а результат возвращается обратно в мессенджер брифами и уведомлениями.

Тех. стек
.NET 8Angular 20Yjs / CRDTRabbitMQKubernetes
скриншот дашборда (blur)
Проектные вызовы
Ограничения контура, легаси и сопротивление на местах — то, что определило срок.
  • Вход без пароля в среде мессенджера: доверять заголовкам «как есть» нельзя — подмена идентификатора означала бы доступ к чужим задачам. Каждый запрос подписывается HMAC-SHA256 на ключе, производном от токена бота, а выпуск токенов построен на ротации: повторное предъявление уже использованного refresh-токена трактуется как компрометация и гасит всю цепочку сессии.
  • Совместное редактирование заметок с мобильной сети, где соединение рвётся. Схема «загрузили — сохранили» здесь теряет правки, поэтому редактирование построено на CRDT: изменения расходятся как инкрементальные обновления и сходятся к одному состоянию независимо от порядка доставки. Написан собственный WebSocket-провайдер с переподключением и локальным хранением состояния, а содержимое заметок и сообщений шифруется AES.
  • Блочный редактор существует только как React-библиотека, а приложение написано на Angular. Наивное встраивание ломает жизненный цикл и внедрение зависимостей, поэтому редактор обёрнут в Angular-компонент, который создаёт React-корень и пробрасывает внутрь Angular-инжектор.
  • Мгновенный интерфейс на нестабильной сети: приложение перезапускается при каждом открытии из мессенджера, поэтому кэш в памяти не помогает. Написан свой слой HTTP-кэширования поверх IndexedDB с несколькими стратегиями, условными запросами по ETag, прогревом при старте и предзагрузкой данных для ссылок, попавших в область видимости.
  • Семь сервисов на четырёх технологических стеках выпускаются по одной процедуре: логика CI вынесена в переиспользуемые workflow, а всё, что различается между средами, читается приложением в рантайме из подменяемого файла конфигурации. Собирается один образ на все среды — в продакшн уезжает ровно тот артефакт, который проверялся на стенде.
Другие кейсы
Проектно-изыскательский бизнес7 недель

Тендеры и AI-анализ закупок

Тендерный отдел вручную искал закупки, отсеивал их и разбирал десятки файлов документации. Система находит закупки по сохранённым фильтрам, считает многокритериальную оценку, собирает документы и готовит аналитический отчёт для решения об участии.

.NET 8React 19PostgreSQLLLM в контуреBitrix24
−50% затрат на персонал
Проектно-изыскательский бизнес8 недель

Журналы геотехнического мониторинга

Отчётные журналы собирались вручную из четырёх разнородных источников, а тип марки заполнялся просмотром сотен фотографий. Настольное приложение сводит цикл наблюдений в готовый к сдаче комплект за один проход.

PythonPySide6YOLOOOXMLPyInstaller
−80% времени камеральной работы

Расскажите, какой процесс болит

Разберём его на разговоре в 40 минут и скажем, что можно сделать за 4–6 недель. Если смысла нет — скажем и это.