Перейти к содержимому
Обсудить проект
Главная/Кейсы/Разработка SaaS для спортивных клубов: PPFit
Кейсы/НАШ ПРОДУКТ
CASE / 34
SAAS-ПЛАТФОРМАБот в Telegram · Кабинет тренера · Android-приложение · Пилот в FLOW BJJ

SaaS-платформа «PPFit» для спортивных клубов

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

Продукт
PPFit
Отрасль
Спортивные секции
Формат
SaaS-платформа
Год
2026
pp-fit.ru
Первый экран сайта PPFit: запись, оплата и посещения без Excel
// Заказчик и задача

Что нужно было решить

Пилотом стала FLOW Jiu Jitsu Academy из Уфы, для которой мы раньше делали сайт. Три зала, пять тренеров, дети с трёх лет и взрослые с четырнадцати. Списки групп тренеры вели в тетради.

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

Задачу сформулировали так: родителю не ставить ничего нового, тренеру тратить на учёт минуту после тренировки, а напоминания о деньгах отдать машине. И ещё одно условие: продукт должен подойти танцевальной студии и бассейну так же, как залу джиу-джитсу. Поэтому FLOW стал пилотом, а не единственным заказчиком.

// Как устроено

Три роли, у каждой свой экран

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

Родитель

Записывает ребёнка, получает счёт и напоминания, платит по ссылке или прикладывает квитанцию. Видит пояса и посещения, то есть за что платит.

Тренер

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

Владелец

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

// Родитель

Оплата без переписки в личке

Бот пишет четыре раза: за два дня до срока, в сам день оплаты, через три дня и через неделю просрочки. В сообщении сумма, период и реквизиты. Под ним две кнопки: «Я оплатил переводом» и «Отдам наличными тренеру». Квитанцию можно приложить скриншотом, фото чека или PDF из банка, дальше решение за тренером.

Бот клуба напоминает об оплате абонемента
Бот: счёт и напоминание
Главный экран родителя: абонемент, срок и кнопки оплаты
Главная родителя
Подтверждение оплаты с прикреплённой квитанцией
Квитанция тренеру
Запись ребёнка в группу в два шага
Запись ребёнка в группу
// Тренер

Группа отмечена, пока дети переодеваются

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

Экран тренера: сегодняшние тренировки и группы
Тренировки на сегодня
Отметка посещаемости группы галочками
Посещаемость
Оплаты, которые ждут подтверждения, и должники
Оплаты и должники
Карточка ученика: счёт, посещения за 8 недель, история оплат
Карточка ученика
// Биллинг

У каждого ученика свой день оплаты

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

Якорная дата

Счёт выставляется на период от даты первого занятия до той же даты следующего месяца. Напоминания считаются от неё.

Короткий месяц

Если якорь 31-е, в феврале счёт придёт в последний день месяца, а в марте снова 31-го. Дата не уползает.

Болезнь

Родитель пишет, с какого по какое число ребёнок болел, и может приложить справку. Тренер одобряет, и следующий платёж сдвигается на эти дни.

// Удержание

Позвонить раньше, чем ученик ушёл

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

Список учеников, которые давно не были на тренировках
Давно не были
Заявки с сайта клуба со статусами
Заявки с сайта
Статистика тренера: собрано за месяц, должники, посещаемость
Статистика
Прогресс спортсмена: пояса, полоски и посещения
Прогресс спортсмена
// Кабинет в браузере

Та же группа на большом экране

Всё, что тренер делает в телефоне, открывается и на компьютере: сверху четыре счётчика (оплатили, ждут подтверждения, должники, посещаемость), ниже таблица учеников со статусом, суммой, сроком и контактом. Пароля нет: вход подтверждается кнопкой в боте. Оплаты выгружаются в Excel, а самозанятому тренеру система напомнит пробить чек в «Мой налог».

Кабинет в браузере: группа, счётчики оплат и таблица учеников
// Продающий сайт

pp-fit.ru продаёт PPFit другим клубам

Продукт без витрины никто не купит, поэтому рядом с платформой сделали сайт. Владелец клуба двигает три ползунка (ученики, средний абонемент, доля не продливших) и видит, сколько теряет в месяц и в год. Дальше таблица «Excel и личка против PPFit» по пяти пунктам, страницы под четыре ниши и три тарифа с фиксированной ценой.

pp-fit.ru
Калькулятор потерь клуба на забытых оплатах
pp-fit.ru
Сравнение месяца клуба в таблицах и в PPFit
pp-fit.ru
Ниши PPFit: единоборства, танцы, плавание и футбол
pp-fit.ru/#price
Тарифы PPFit: Секция, Клуб и Сеть
// Каналы

Один код, три входа

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

Telegram

Бот присылает счета и напоминания, из него же открывается приложение внутри Telegram. Вход по подписи Telegram, без логина и пароля.

Браузер

Тот же кабинет по адресу pp-fit.ru/app/. Вход подтверждается кнопкой в боте, уведомления приходят и в браузер.

Android

Приложение с иконкой на экране и уведомлениями от своего имени. Это обёртка над веб-версией, отдельно его дорабатывать не нужно.

// Стек

На чём собрано

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

Схема PPFit: Telegram, браузер и Android обращаются к серверу с FastAPI, ботом на aiogram, планировщиком и Web Push; данные в PostgreSQL с ежедневными бэкапамиВходы · один интерфейс на ReactРодитель · тренерTelegramБот: счета, напоминания, кнопкиПриложение внутри TelegramВход по подписи initDataТренер · владелецБраузерКабинет pp-fit.ru/app/React 18, TypeScript, ViteВход подтверждается в ботеРодитель · тренерAndroidОбёртка над веб-версией (TWA)Уведомления от имениприложенияСервер в России · Docker Compose · Python 3.12APIFastAPIAPI приложения и кабинета, 107 эндпоинтовРоли и доступы: каждый видит только своёБотaiogram 3Telegram-бот:счета и ответыродителейФонAPSchedulerСчета по якорнойдате, напоминанияи утренняя сводкаПушиWeb Pushpywebpush, VAPID:копия сообщенийбота на устройствоФайлыДокументыСправки в PDF,выгрузка в Excel,квитанции родителей182 автотеста на pytestHTTPSботпушДанныеPostgreSQL 16SQLAlchemy 2 (async), Alembic24 таблицыЖурнал: оплату нельзя удалитьРезервБэкапыpg_dump раз в сутки,хранятся 14 днейSQLкаждые сутки
Бэкенд
Python 3.12 и FastAPI
Больше сотни эндпоинтов API
Настройки через pydantic-settings
Бот и фоновые задачи
Telegram-бот на aiogram 3
APScheduler: счета и напоминания по расписанию
Web Push в браузер и на Android
Данные
PostgreSQL 16, SQLAlchemy 2 и Alembic
Справки в PDF и выгрузка оплат в Excel
Журнал действий: оплату нельзя удалить
Интерфейс
React 18 и TypeScript на Vite
Приложение внутри Telegram и кабинет в браузере
Вход по подписи Telegram, без пароля
Android
Обёртка над веб-версией (TWA)
Уведомления от имени приложения
Обновляется вместе с сайтом, без публикации
Инфраструктура
Docker Compose на сервере в России
Ежедневные бэкапы базы
182 автотеста: счета, роли, доступы
// Функционал

Что ещё есть в системе

Часть функций пришла из ТЗ пилотного клуба, остальное мы добавили, чтобы PPFit подошёл и танцам, и плаванию, и футболу.

Оплаты
Личный платёжный день каждого ученика
Разовые счета: аттестация, турнир, сборы
Скидка на второго ребёнка
Напоминания
За 2 дня, в срок, через 3 и 7 дней
Утренняя сводка тренеру по делу
Уведомления в браузер и на Android
Группы
Лимит мест и очередь заявок
Перенос срока оплаты при болезни
Отмены, переносы и выходные дни
Прогресс
Пояса, полоски и аттестации
Посещения сеткой за 8 и 12 недель
Справка об оплате в PDF
Соревнования
Событие для своих групп
Ответ родителя за каждого ребёнка
Взнос отдельным счётом
Рост клуба
«Приведи друга»: скидка обоим после первой оплаты
Заявки с сайта клуба в кабинет
Календарь тренировок для телефона
// Цвет и типографика

Тёмный зал и лайм на кнопке

Интерфейс открывают вечером в раздевалке и в машине, поэтому фон почти чёрный. Лайм достаётся только тому, на что надо нажать или что надо заметить: кнопке оплаты, сегодняшней тренировке, собранной сумме. Заголовки набраны курсивным Exo 2 в 900 начертании, у них спортивный наклон. Текст идёт спокойным Manrope, а суммы и даты моноширинным JetBrains Mono.

Типографика
Exo 2 + Manrope
Заголовки / интерфейс и текст

Exo 2 Italic 900 держит заголовки и крупные суммы, Manrope отвечает за кнопки и подписи, JetBrains Mono за мелкие метки вроде «ждут подтверждения · 2».

#0B0C0A
Фон
#C8F03C
Действие
#15171A
Карточки
#F06A4C
Просрочка
// Результат

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

PPFit работает на pp-fit.ru, первый клуб на нём FLOW. Цифр по продлениям пока нет, и выдумывать их мы не будем: честно посчитать их можно только после нескольких полных платёжных циклов. Допишем сюда, когда соберём. Зато уже видно другое: всё, что раньше держалось на памяти тренера (кому напомнить, кто заплатил, кто пропал), теперь считает система.

3
роли: родитель, тренер и владелец, каждый видит только своё
4
напоминания об оплате: за 2 дня, в срок, через 3 и 7 дней
3
входа: Telegram, браузер и приложение для Android
182
автотеста проверяют счета, роли и доступы
Услуга: IT-платформы Обсудить внедрение → Ещё кейс →
// Вопросы по кейсу

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

Сколько стоит программа для спортивного клуба?

PPFit работает по подписке с фиксированной ценой за клуб: 5 000 ₽ в месяц для секции до 80 учеников с одним залом, 7 500 ₽ для клуба с несколькими залами и до пяти тренеров, 10 000 ₽ для сети с филиалами. Процента с оплат нет. Первый месяц бесплатный, учеников, группы и абонементы из вашей таблицы переносим сами.

Как вести оплаты, если деньги получает тренер, а не клуб?

В PPFit это отдельный режим, и с него начинался пилот: в FLOW каждый тренер получает оплату за свою группу сам. Счёт уходит родителю с реквизитами тренера-получателя, родитель переводит и прикладывает квитанцию, тренер подтверждает. Со-тренер видит расписание группы, но не её деньги. Если клуб принимает оплату на один счёт, включается второй режим, и тогда администратор видит все оплаты.

Нужно ли родителям ставить отдельное приложение?

Нет. Родитель открывает бота клуба в Telegram по ссылке или QR-коду из зала, дальше счета, напоминания и кнопка «Я оплатил» приходят туда же. Для тех, кто хочет иконку на экране, есть приложение для Android, а личный кабинет открывается и просто в браузере, вход подтверждается в боте без пароля.

Как тренеру отмечать посещаемость?

С телефона. На главном экране тренера стоят сегодняшние тренировки с кнопкой «Отметить», дальше список группы с галочками и кнопкой «Отметить всех». Посещения собираются в карточку ученика сеткой за восемь недель. Кто не был две недели, попадает в список «Давно не были» с кнопками позвонить и написать.

Где хранятся данные детей и кто их видит?

На сервере в России, по требованиям 152-ФЗ. Доступ разведён по ролям: тренер видит только свои группы, родитель только своих детей, администратор управляет залами и расписанием, но не видит чужих денег. Оплату нельзя удалить, только сменить статус с комментарием, и каждое такое действие остаётся в журнале с датой и автором.

// Похожие кейсы

Ещё кейсы в категории «Разработка»

РАЗРАБОТКА САЙТА
Разработка лендинга для агентства РАЗГОН
РАЗРАБОТКА САЙТА
Сайт мотоклуба «Delight Motors Club»
РАЗРАБОТКА САЙТА
Разработка сайта туров в Китай Say Hello Travel
// Обсудить проект

Хотите такой же результат?

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

Перезвоним в течение 15 минут в рабочее время.

×
// Заявка

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

Оставьте контакты. Перезвоним в течение 15 минут, обсудим задачу и предложим решение. Без обязательств.

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