Как мы сделали полностью автоматизированный спортзал для пинг-понга

Небольшая история о том, как мы – VVERH DIGITAL, сделали спортзал для пинг-понга без единого администратора.

Зал  Пинспот
Зал  Пинспот

Идея

К нам обратились два предпринимателя – Дмитрий и Лев из студии Калинин/Маврин. Они хотели сделать мобильное приложение для бронирование теннисных столов в своем спортзале.

Причём они хотели максимальную автоматизацию с минимумом человеческой вовлечённости. Чтобы никаких администраторов, менеджеров, а только камеры, умный свет и автоматические двери.

Ещё летом 2023 года Дмитрий со Львом обращались к нам для реализации их другой идеи — проекта «Александр Ярославович». Это веб-комикс про исторические похождения Александра Невского. К слову, на основе их же книжной версии комикса.

Тем жарким летом мы меньше чем за месяц сделали, протестировали и даже доработали, на основе обратной связи, веб-версию комикса.

Вставить видео-тур по Невскому.

Им понравилась наша работа, а нам понравилось работать с ними. Поэтому, спустя 3 года, Дмитрий и Лев вспомнили о нас и пришли с уже новой идеей к нам на консультацию…

Концепт или по модному – MVP-продукта

Изначально у заказчика было много идей: двери с временными кодовыми замками, умный свет, камеры с захватом движений и распознавание, с помощью ИИ, «крутых» игровых моментов. Ну чтобы потом делать из этого мини-клипы и отправлять игрокам на почту.

Но никто не знал, выстрелит идея или нет, поэтому ограничились базовыми минимумом для сохранения бюджета — видеонаблюдением и дверьми с персональными кодами доступа (далее СКУД).

Так как мы сами не занимаемся видеонаблюдением и СКУД, мы лишь помогли клиенту в выборе системы. Нам нужно было что-то такое, где есть удобное API, которое можно связать с нашей системой.

Решение нашли довольно быстро — Trassir. Коробочное решение с видеонаблюдением и готовым СКУД. Как раз то, что нужно.

Подводные камни MVP

Во время первичной консультации было выявлено много спорных моментов и «слепых зон», связанных с финансами.

  • Что делать, если игрок вовремя не освободил стол?
  • Будут какие‑то штрафы или иные санкции за нарушения правил?
  • Как реализовать механику автопродления?
  • Вообще нужна ли механика автопродления?
  • Рекуррентные платежи в спорных ситуациях — это этическая норма или нечестно по отношению к игроку?

Никто не знал ответов на эти вопросы, поэтому мы решили «обкатать» несколько разных вариантов в разные промежутки времени. И в этом нам помог Telegram.

Разработка Telegram-бота

Для начала мы продумали основной базовый сценарий бронирования, оплаты и посещения помещения.

Пока команда мобильной разработки готовила макеты и дизайн будущего мобильного приложения, команда бэкенда решила сделать Telegram-бота и API к нему, чтобы обкатать некоторые процессы работы пользователя с приложением.

В боте мы сделали простое бронирование в три шага, подключили эквайринг и обкатывали несколько недель разные версии бота на одних и тех же людях. Мы протестировали API, систему штрафов с рекуррентными платежами, разные виды автопродления и работу СКУД.

Разработка API и панели управления

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

Для заказчика нашими разработчиками была создана внушительная панель управления, в которой можно:

  • Видеть все брони;
  • Убирать в стоп-лист столы;
  • Создавать персональные и общие промокоды;
  • Обрабатывать негативную обратную связь;
  • Точечно блокировать пользователей;
  • Создавать и удалять коды доступов к дверям;
  • Блокировать временные отрезки для бронирования;
  • Отменять брони и возвращать платежи;

А также еще десяток мелких полезных точечных настроек.

Админ панель Пинспот
Админ панель Пинспот

Панель управления работает от API, которое поддерживает не только её саму, но и Telegram‑бота, а также будущее мобильное приложение. Всё проходит через одну точку с единой бизнес‑логикой, позволяя одним патчем изменений менять работу сразу двух клиентских узлов (бота и приложения).

Само API написано на Bun — сверхбыстром серверном JavaScript, — чтобы обеспечить высокую скорость работы с тремя важными внешними сервисами: эквайрингом банка, API Telegram и API СКУД Trassir.

Фреймворк  Пинспот
Фреймворк  Пинспот

Все процессы зафиксированы на бумаге, каждый маршрут API задокументирован, дабы другие разработчики в любой момент могли создать новый клиентский узел, например — сайт или иной веб‑кабинет с бронированием столов. Это было в будущих планах клиента, если концепция «выстрелит». Наша задача — лишь заложить прочный фундамент, и мы с ней справились.

Бот – это отличное MVP

Во время разработки Telegram‑бота и API мы нашли слабые места в процессах, а также набрали большое количество обратной связи, как положительной, так и негативной.

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

Плюс посетители часто теряли свои персональные коды доступа в зал, поэтому совместно с заказчиком придумали систему уведомлений, с помощью которой отправляли код доступа клиенту прямо в чат в назначенную дату бронирования.

А ещё немало крови выпил СКУД от Trassir, который первое время любил отключаться по своему желанию в определённое время, блокируя генерацию кода для посетителя зала. И пока инженеры‑интеграторы настраивали и регулировали Trassir, чтобы минимизировать сбои, мы разработали клиенту модуль в панели управления, откуда можно создавать временные коды доступа.

Что получилось

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

Ux\ui система  Пинспот
Ux\ui система  Пинспот

Само приложение было решено делать на нативе: для iOS мы использовали Swift, а для Android — Kotlin. Теоретически мы могли бы использовать кроссплатформу, например какой‑нибудь React или Flutter, но:

Во‑первых, мы хотели сохранить нативное ощущение от использования мобильного приложения у пользователей iOS, ведь кроссплатформа с этой задачей не справляется. А пользователей «яблочной» операционной системы у нас оказалось большинство среди всех клиентов заказчика, судя по аналитике, которую мы собирали в Telegram‑боте.

Во‑вторых, клиент хотел в будущем добавить интеграцию с просмотром записей с камер в спортзале… А наша команда на этом в своё время «собаку съела», и мы точно знали, что при работе с видеопотоками трансляций кроссплатформа сделает нам больно — в отличие от чистой разработки на Swift и Kotlin.

Система бронирования  Пинспот
Система бронирования  Пинспот

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

А за это время, пока мы делали свою кодерскую работу, заказчик доводил до ума пространство спортзала, ведь за тестовый запуск через Telegram набралось достаточно обратной связи: то мячи улетали далеко, то ракетки терялись, то воды питьевой не хватало.

ПингСпот-Vverh digital
ПингСпот-Vverh digital

Клиент это учел и повесил на стены сетки, для ракеток создал специальные стенды, ну а с водой все проще – её стало больше. Также, клиент оборудовал помещение сидячими местами для зрителей.

Улучшения происходили со всех сторон — не только в онлайне, но и офлайн работал. Поэтому наша совместная работа с заказчиком создала вот такой интересный проект, о котором не стыдно рассказать. Если будете в Екатеринбурге, то заходите в ПИНГСПОТ на Свердлова 56.

Это была краткая история. Если хотите заглянуть под капот глубже — технологии, этапы, решения — весь кейс целиком ждёт вас здесь: ПИНГСПОТ.

А если вам нужна такая же крутая разработка с продуктовым подходом — переходите на сайт Vverh.digital и оставляйте заявку!

2