Главные кейсы за последние полтора года, от самых заметных для бизнеса. Цифры — мои замеры и данные команды. Код компаний не публикую.
+50%Конверсия+50%
Маркетинговый сайт: +50% переходов на регистрацию
BotHelp · 2026
- Задача
- Нужно было превратить трафик блога в регистрации в продукте и не терять атрибуцию при переходе с сайта в приложение.
- Решение
- Сделал на WordPress CTA-блоки и сайдбар в статьях с передачей ref и UTM, мегаменю и лендинг CRM-интеграции. Перевёл Яндекс Метрику на новый тег, чтобы просмотр гарантированно отправлялся до редиректа, настроил кросс-доменную синхронизацию cookie партнёрской сети и убрал дубли событий Amplitude.
- Итог
- Переходов с сайта на регистрацию стало на 50% больше, а источники трафика считаются корректно.
WordPressUTMЯндекс МетрикаAmplitude
≈30%Деньги≈30%
Биллинг: расширения тарифа подключают ≈30% платящих
BotHelp · май 2025 — июль 2026
- Задача
- Продукту понадобились платные и бесплатные расширения поверх тарифа. Они должны корректно вести себя в пробном периоде, при истечении, отмене и даунгрейде.
- Решение
- Сделал фронтенд биллинга: расширения, докупку хранилища и токенов, лимиты, проверку даунгрейда, граничные состояния подписки, мобильную версию. Подключил FastSpring, Робокассу, ЮMoney и ещё одного провайдера.
- Итог
- Расширения подключают около 30% платящих клиентов. Граничные случаи подписки прошли больше шести итераций с QA.
FastSpringРобокассаЮMoney
1–2 дняСкорость разработки1–2 дня
Новый инструмент за 1–2 дня вместо недели
BotHelp · август 2026
- Задача
- Около десяти инструментов привлечения подписчиков (виджеты, лендинги, ссылки, автоответы на комментарии) были копиями друг друга. Новый добавлялся неделю.
- Решение
- Свёл их к реестру определений с общим CRUD-контрактом, фабриками NGXS-состояний и форм-адаптеров и базовыми компонентами. Роуты генерируются из реестра, NgModules удалены, компоненты стали standalone.
- Итог
- Новый инструмент теперь описывается определением в реестре. По ходу удалил 7.6k строк legacy и заменил snapshot-тесты спеками.
NGXSStandaloneJest
20+ модулейАрхитектура20+ модулей
Архитектура фронтенда: план рефакторинга стал стандартом команды
BotHelp · сентябрь 2025 — август 2026
- Задача
- Большое Angular-приложение в Nx-монорепо росло без чётких границ: фичи тянули друг друга через общие слои, бандл плохо делился на чанки, новые задачи давались всё дороже.
- Решение
- Провёл аудит и написал поэтапный план рефакторинга, команда приняла его как стандарт. По плану перестроил слои (shared → core → features), перенёс код 20+ модулей к владельцам и закрепил границы правилами ESLint в CI. Все формы перевёл на Typed Forms, панели и меню — на Signals.
- Итог
- Пять фронтендеров работают по одному стандарту. Нарушений границ модулей стало 15 вместо 99, бандл делится на чанки лучше, сторонняя библиотека форм удалена.
NxESLintTyped FormsSignals
smoke-E2EИнструменты для командыsmoke-E2E
Автотесты на стабильных data-testid
BotHelp · июнь — август 2026
- Задача
- E2E-тесты держались на хрупких селекторах, а расставлять data-testid вручную в сотнях шаблонов было нереально.
- Решение
- Написал на Node.js сканер шаблонов, генератор имён по правилам и реестр. Добавил проверку в CI и pre-commit и своё правило ESLint.
- Итог
- testId генерируются автоматически и проверяются в CI. На этой базе команда запустила smoke-автотесты.
Node.jsESLintCIE2E
−85%Скорость−85%
Конструктор ботов: время открытия −85%
BotHelp · апрель 2026
- Задача
- Визуальный конструктор сценариев на GoJS — главный экран продукта. Большой сценарий открывался около 13 секунд, компонент страницы разросся до монолита.
- Решение
- Вынес конвертацию модели диаграммы в Web Worker, разбил страницу на сервисы, переписал рендер и загрузку модели, закрыл гонки синхронизации канваса после переподключения WebSocket.
- Итог
- Большой сценарий открывается за 2 секунды вместо 13. Оптимизацию главного экрана выпускал поэтапно и с быстрым путём отката.
GoJSWeb WorkersWebSocket
3 мессенджераСтабильность3 мессенджера
Стабильное форматирование в Telegram, VK и MAX
BotHelp · январь — июнь 2026
- Задача
- Один текст уходит в три мессенджера, и у каждого своя разметка и свои лимиты. Конвертация ломала ссылки, макросы и переносы строк, клиенты жаловались в поддержку.
- Решение
- Написал конвертацию HTML ↔ Markdown на уровне AST с экранированием ссылок и макросов, счётчики длины, превью и конвертер старых сообщений Telegram. Крайние случаи покрываю тестами до мержа.
- Итог
- Форматирование одинаково работает в трёх мессенджерах, обращений в поддержку по форматированию стало меньше.
mdastMarkdownRich text
5 агентовAI в разработке5 агентов
Отряд агентов: архитектор, аналитик, инженер, ревьюер, отладчик
BotHelp · 2026
- Задача
- AI-инструменты в команде использовались по-разному, и результат зависел от того, кто сидит за клавиатурой.
- Решение
- Собрал на Claude Code и Cursor отряд из пяти агентов с разными ролями: архитектор строит карту влияния, аналитик делит задачу на группы с критериями приёмки, инженер пишет код и тесты, ревьюер выносит вердикт по diff, отладчик ищет корневую причину. Написал правила проекта, память агентов и хуки-гейты, которые проверяют реальные прогоны линтера и тестов. Провёл митапы.
- Итог
- Отряд переезжает со мной на любой проект: агенты, правила и хуки разворачиваются за 30 минут. Решения по-прежнему принимаю я.
Claude CodeCursorХуки
Svelte 5Встраиваемый кодSvelte 5
Чат-виджет AI-агента на Svelte 5
BotHelp · май — сентябрь 2026
- Задача
- Нужен был виджет AI-агента для сайтов клиентов, который не конфликтует с чужой вёрсткой и не создаёт лишней нагрузки.
- Решение
- Изоляция через Shadow DOM, UTM, брендирование, подключение к WebSocket только после открытия виджета. Собрал монорепо публичных фронтендов на pnpm + Turborepo и перевёл деплой на Shipit.
- Итог
- У операторов пропали пустые диалоги с каждым посетителем сайта, а у статики появились stage, prod и откат.
Svelte 5Shadow DOMTurborepo