Freedom Gym: клубная система с абонементами и расписанием — publi.ru

Freedom Gym: клубная система с абонементами и расписанием

8 мин чтения · разбор · тем, кто заказывает · обновлено 2026-09-02

Freedom Gym пришли с журналом на ресепшене и таблицей абонементов. Задача звучала как «сделайте нам расписание», а закончилось клубной системой, где абонемент, расписание и права сотрудников связаны между собой. Ниже — что было, что сделали и на чём мы ошиблись.

Как было устроено до

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

Каждое из трёх мест по отдельности работало. Проблема начиналась на стыках. Чтобы ответить на вопрос «сколько занятий у меня осталось», администратор открывал таблицу, потом листал журнал и считал. При очереди на входе это занимало минуту, которая ощущалась как пять.

Второе больное место — заморозка. Клиент уезжал, просил приостановить абонемент, администратор писал в таблице комментарий. Через месяц комментарий читал другой администратор и понимал его по-своему.

С чего начали

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

Дальше выяснилось главное. Абонемент — это не строка с датой окончания, а счётчик с историей. У него есть остаток занятий, есть период действия, есть события: покупка, посещение, заморозка, продление, возврат. Из этих событий остаток вычисляется, а не хранится отдельным числом.

Это решение потом закрыло половину будущих споров с клиентами. На любой вопрос «почему у меня списалось» есть ответ строкой в истории с датой и автором.

Расписание

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

Запись клиента на занятие проверяет три вещи подряд: есть ли действующий абонемент, покрывает ли он этот тип занятия, остались ли места. Если проверка не прошла, клиент видит причину словами, а не общее «ошибка».

Отмена возвращает место в свободные немедленно. Это мелочь, но именно она наполняет группы: в вечерних слотах места освобождались за пару часов до начала и раньше просто пропадали.

Права: кто что видит

Тренер видит своё расписание и списки записавшихся. Он не видит суммы, не видит абонементы других тренеров и не может править прайс.

Администратор видит клиентов, продаёт абонементы, отмечает визиты и делает заморозку с обязательной причиной из списка. Настройки типов абонемента ему недоступны.

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

Что пошло не так

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

Вторая ошибка — интерфейс отметки визита. Первую версию мы сделали красивой: поиск клиента, карточка, кнопка. На стойке в час пик это оказалось на два клика больше, чем нужно. Переделали в один список сегодняшних записей с кнопкой напротив каждой фамилии.

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

Что изменилось на стойке

Вопрос об остатке занятий закрывается на экране, а не пересчётом по журналу. Заморозка стала документом с датами, причиной и автором, а не комментарием.

Тренер перед занятием видит список записавшихся с телефона и знает, придут шестеро или двое. Расписание меняется в одном месте и сразу отражается везде, где его смотрят.

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

Кому такая система не нужна

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

Не нужна она и студии, где занятия только персональные и по договорённости. Там нет групп, нет вместимости, нет конкуренции за слот — то есть нет задачи, которую расписание решает.

Порог, за которым система начинает окупаться, у нас выглядел так: два и больше залов или направлений, групповые занятия с ограниченным числом мест, больше одного человека на стойке. Ниже этого порога честнее оставить таблицу. Ориентиры по срокам и стоимости платформы — на странице цен.

Как считался остаток занятий

Отдельно стоит объяснить решение, которое кажется техническим, а на деле оказалось главным.

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

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

Что делали с телефонными записями

Часть клиентов записывалась и продолжает записываться звонком. Отдельного учёта для них не появилось — администратор заносит такую запись в то же расписание.

Это принципиальный момент. Как только появляется второй список «для тех, кто звонит», возвращается ручная сверка, ради ухода от которой всё и делалось. Система при этом не различает, кто записал клиента, — она хранит автора записи, но занятие одно и место одно.

Коротко

Ключевое решение проекта не в расписании, а в том, что абонемент описан как история событий, а не строка с датой. Из этого выросли и честный остаток занятий, и заморозка с причиной, и споры, которые закрываются ссылкой на запись. Расписание же ценно ровно тем, что связано с абонементом и проверяет право на занятие само. Разбор данных перед переездом занял втрое больше, чем планировали, — на это стоит закладываться заранее.

Расскажите, что нужно — посмотрим и скажем честно

Первый разговор — разбор задачи: нужна ли вам система или хватит одной страницы. Без обязательств и без счёта.

или оставьте номер — перезвоним

Перезваниваем в рабочее время. Ничего не рассылаем.

Оператор персональных данных — ИП Постнов Артём Сергеевич, ИНН 772610459593.

Частые вопросы

Сколько времени заняла разработка такой системы?

Проект этого класса — платформа, у нас это от 150 000 ₽ и от 14 дней на первую рабочую версию. Дальше система росла кусками по мере того, как всплывали реальные сценарии: заморозка, переносы, гостевые визиты.

Можно ли сделать только расписание, без абонементов?

Можно, но пользы будет меньше, чем кажется. Расписание без абонементов не знает, имеет ли человек право на занятие, поэтому проверка всё равно остаётся на администраторе. Связка нужна именно между этими двумя сущностями.

Что делать с клиентами, которые не пользуются приложениями и сайтами?

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

Помогла статья?

Те, что не помогают, мы переписываем — по этой кнопке и решаем, какие именно.

Ещё по теме