КейсАгрегатор бронирования спортивных площадок2026

Агрегатор бронирования спортивных площадок

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

Каталог площадок allChoice: фильтры по видам спорта и метро, карточки площадок с ценой и рейтингом
Каталог: подбор площадки по виду спорта, метро, цене, дате, числу человек и удобствам

a.

Задача

Площадки продают время, а продажа идёт в переписке

Игрок пишет в мессенджер, администратор смотрит в тетрадь и отвечает, свободен ли вечер четверга. Заявка живёт ровно до того момента, пока её кто-то не прочитал.

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

b.

Сложность

Один слот нельзя продать дважды

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

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

На витрине опечатка стоит опечатки. Здесь неверно показанный свободный слот означает, что двое приехали на один корт.

c.

Решение

Бронирование, которое не ошибается

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

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

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

d.

Решение

Подбор, сайт и приложение — из одного кода

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

Приложение собрано из того же кода, что и сайт, и работает с возможностями телефона: пуши, геолокация, автоподстановка кода из SMS. Оно опубликовано в Google Play, App Store и RuStore, а правка делается один раз для всех.

Проектирование, дизайн, фронтенд, бэкенд, приложение и выкладка в магазины — один человек.

Фронтенд
Next.js, React, TanStack Query
Бэкенд
NestJS, PostgreSQL, очереди фоновых задач
Реальное время
WebSocket — состояние брони обновляется на всех открытых экранах сразу
Мобильное
Capacitor с нативными плагинами; Google Play, App Store и RuStore
Карты
2ГИС: подбор по метро, карта площадок, построение маршрута
Защита
Ограничение частоты запросов, капча на публичных формах, сессии с ротацией

e.

Числа

Что уже построено

22
вида спорта в одном каталоге
9
фильтров подбора площадки

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

Похожая задача?

Семь вопросов брифа — и я вернусь с оценкой срока и стоимости, а не с уточняющими вопросами.