GOGYM2022–2025

GOGYM — контент-сервисы

Senior JavaScript Fullstack Developer

Схема архитектуры контент-сервисов GOGYM
3 слоя
CMS, сервисы и mobile-клиент
10 минут
на настройку сегмента
+30%
вовлечённость пользователей
0
сторонних InApp-решений
Стек
Node.jsExpress.jsMongoDBRedisElasticsearchMinIODockerKubernetes
Период
Апрель 2022 — январь 2025
Роль
Senior JavaScript Fullstack Developer
Клиент
GOGYM

О проекте

В роли Senior JavaScript Fullstack Developer я с нуля реализовал backend-платформу для CMS и мобильного приложения GOGYM. Сервисный слой связывал создание контента в админ-панели с его динамической доставкой пользователю: обрабатывал InApp-сообщения, stories и баннеры, правила сегментации и A/B-эксперименты. Основной стек — Node.js, Express.js, MongoDB, MinIO, Elasticsearch и Redis; окружение собиралось в Docker и разворачивалось в Kubernetes.

Единый сервисный слой для динамического контента

Backend CMS был разработан с нуля вместе с моделями данных и API. Его задача — не просто хранить записи из админ-панели, а безопасно провести контент через весь жизненный цикл: принять настройки, дать возможность изменить и проверить их, а затем вернуть мобильному приложению актуальную коммуникацию для конкретного пользователя.

На этой основе работали InApp-сообщения, stories, баннеры на разных экранах, пользовательские сегменты и A/B-эксперименты. Все механики использовали общую инфраструктуру, но сохраняли собственные правила и сценарии управления.

  • API для получения и изменения контента
  • Общие контракты CMS и мобильного приложения
  • Динамическая доставка без релиза клиента
  • Единая основа для нескольких продуктовых механик

InApp-система на трёх связанных уровнях

InApp-механика охватывала три уровня. Мобильное приложение отвечало за корректное отображение, CMS — за создание, изменение и полный preview, а backend-сервисы — за хранение конфигурации, применение правил и выдачу сообщения.

Я участвовал в реализации всей цепочки как Senior JavaScript Fullstack Developer. Благодаря общим контрактам маркетолог видел в CMS тот же результат, который затем получал пользователь приложения, а изменение кампании не требовало новой сборки мобильного клиента.

  • Уровень 1 — отображение в mobile-приложении
  • Уровень 2 — управление и preview в CMS
  • Уровень 3 — хранение, правила и доставка
  • Синхронизация конфигурации между уровнями
Трёхуровневая архитектура контент-платформы GOGYM
Схема взаимодействия CMS, content API, сегментации и мобильного приложения

Node.js, Express и MongoDB как основа доменной логики

Сервисный слой был построен на Node.js и Express.js. MongoDB использовалась для моделей динамического контента, правил сегментации и конфигураций экспериментов, где структура должна была развиваться вместе с продуктом.

API поддерживал операции получения, создания и изменения настроек, необходимые CMS и мобильному клиенту. Медиаматериалы для stories, баннеров и InApp хранились через MinIO, что отделяло работу с файлами от основной логики контентных сущностей.

  • Node.js и Express.js
  • MongoDB для контента и правил
  • MinIO для медиаматериалов
  • API-контракты для CMS и mobile

Быстрый доступ, поиск и работа с растущим объёмом правил

Redis и Elasticsearch дополняли основной контентный контур. Redis использовался там, где сервисам требовался быстрый доступ к часто запрашиваемым данным и рабочему состоянию, а Elasticsearch — для поисковых задач и работы с данными, которые неудобно решать простыми запросами к основному хранилищу.

Такое разделение не перегружало MongoDB несвойственными ей задачами и позволяло развивать сегментацию и контентные сценарии независимо от интерфейса CMS.

  • Redis для быстрого доступа к данным
  • Elasticsearch для поиска и выборок
  • Разделение ответственности хранилищ
  • Основа для динамических правил

Отдельная система динамических пользовательских сегментов

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

Сервисная часть поддерживала создание, изменение, проверку и использование сегментов, а UI давал маркетологам и аналитикам контроль над этим процессом. Настройка, которая раньше могла занимать неделю и требовала разработчиков, стала выполняться примерно за 10 минут.

  • Динамические правила аудитории
  • Создание и изменение сегментов
  • Проверка настройки до использования
  • Управление без привлечения разработчиков

Сервисный механизм экспериментов для целевых групп

Отдельная система A/B-тестирования связывала варианты коммуникации с пользовательскими сегментами. Backend хранил конфигурацию эксперимента, применял её при выдаче динамического контента и предоставлял данные для просмотра результатов в CMS.

Маркетинг мог повторно использовать механизм для разных кампаний вместо разработки одноразовой логики под каждую гипотезу. A/B-тестирование стало частью контентной платформы рядом с InApp, stories и баннерами.

  • Конфигурация вариантов
  • Применение к выбранным сегментам
  • Выдача динамического контента
  • Данные для просмотра результатов

Контейнеризация и развёртывание в Kubernetes

Компоненты backend-платформы упаковывались в Docker-контейнеры и разворачивались в Kubernetes. Это давало воспроизводимое окружение для сервисов и их инфраструктурных зависимостей — MongoDB, Redis, Elasticsearch и MinIO.

Контентные механики развивались независимо от релизов мобильного приложения: изменения сервисов и CMS можно было доставлять своим циклом, сохраняя стабильные контракты для клиента.

  • Docker-образы сервисов
  • Развёртывание в Kubernetes
  • Изолированные инфраструктурные зависимости
  • Независимый цикл поставки backend

Собственная контентная экосистема вместо платных решений

GOGYM получил единую backend-основу для динамических коммуникаций и экспериментов. Собственная InApp-система исключила необходимость стороннего решения, а сегментация существенно сократила расходы на платные инструменты.

Адаптация контента для разных групп пользователей дала рост вовлечённости на 30%. Главное изменение процесса — маркетологи и аналитики получили возможность управлять коммуникациями и аудиториями самостоятельно, а разработчики сосредоточились на развитии платформы вместо ручной настройки каждой кампании.