Панель Zoe Admin на ноутбуке рядом с колонкой Zoe в каюте круизного судна.

Zoe Admin

Единая админка для управления колонками Zoe, доступом пользователей и распределённой сервисной инфраструктурой в 2 000+ каютах.

Роль
Разработка админ-приложения · Работа в команде
Стек
Javascript · AngularJS · Express · gRPC · Protocol Buffers · CSS · Docker · Docker Swarm · Portainer · Git
Период
2020-2021
Результат
Единое управление колонками

Колонки Zoe, под единым управлением.

Zoe Admin — административное приложение для управления колонками с голосовым ассистентом Zoe, установленными более чем в 2 000 каютах круизного судна. Оно объединяет управление колонками, контроль доступа и мониторинг речевых сервисов для команд, отвечающих за работу продукта.

Задача

Эксплуатация колонок с голосовым ассистентом в масштабе круизного судна требует управления не только отдельными устройствами. Командам нужно следить за колонками Zoe в тысячах кают и одновременно понимать состояние серверов, поддерживающих голосовой опыт.

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

Роль и сотрудничество

Я работал над административным приложением как часть продуктовой команды. Мой вклад был сосредоточен на разработке интерфейса и сценариев управления колонками Zoe; сама платформа была результатом общей командной работы, а не индивидуальным проектом.

Приложение объединяло frontend на AngularJS и сервисы Express, работающие на Node.js. Backend админки также взаимодействовал с микросервисами на Python, которые разрабатывала другая команда. Команды использовали типизированные RPC-контракты на базе gRPC и Protocol Buffers: границы между сервисами оставались явными, а каждая команда могла работать со своим технологическим стеком.

Архитектура платформы

Административный интерфейс соединял два операционных уровня. Первый — парк колонок Zoe в более чем 2 000 каютах. Второй — серверная инфраструктура распознавания и генерации речи.

AngularJS задавал структуру насыщенных данными административных представлений, а Express обеспечивал серверный слой приложения. Из него вызовы gRPC и схемы Protocol Buffers связывали админку с Python-микросервисами другой команды разработки. RBAC был центральной частью продуктовой модели: доступ к разделам и действиям определялся назначенными ролями.

Вся инфраструктура была контейнеризирована с помощью Docker и оркестрировалась в кластере Docker Swarm. Portainer служил UI для просмотра и управления стеками, сервисами, контейнерами и узлами, поэтому типовые операционные действия не требовали постоянной работы через командную строку.

Операционная прозрачность

Zoe Admin показывал серверные метрики рядом с управлением каютами и колонками. Команда получала единое представление среды Docker Swarm, включая Python-сервисы с обученными моделями синтеза и распознавания речи. Portainer дополнял продуктовый интерфейс инфраструктурной информацией и инструментами управления.

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

Результат

Платформа поддерживает ежедневное управление колонками Zoe более чем в 2 000 каютах круизного судна. Она объединяет операции с колонками, RBAC, интеграцию микросервисов через gRPC и видимость инфраструктуры Docker Swarm в одном административном интерфейсе, созданном несколькими взаимодействующими командами.

Проект подтвердил важный принцип сложных внутренних продуктов: интерфейс должен показывать связи между пользователями, устройствами и инфраструктурой, не заставляя операторов восстанавливать их самостоятельно.

2,000+
Кают под управлением
RBAC
Ролевое управление доступом
gRPC
Типизированная интеграция сервисов
Swarm
Оркестрация контейнеров

Давайте создадим что-то вместе.

Есть проект или просто хотите познакомиться? Я всегда открыт хорошему разговору.

Обсудить проект