04 · Бронирование кортов · 2026

«Корт»

Бронирование падел-кортов с оплатой и разбором составов — внутри мессенджера.

Роль Весь цикл, включая приём платежей
Срок 3 недели
Нагрузка Четыре корта, пиковый вечер — минуты
Стек React · TypeScript · FastAPI · Redis

Задача

Корты бронировали в чате: администратор вручную сверял время, собирал по 900 рублей с четверых и разбирался, кто не пришёл. В пиковый вечер на слот претендовали трое одновременно.

Отдельное приложение клуб ставить не хотел: игроки и так живут в общем чате.


Что сделано
01

Сетка слотов

Неделя, четыре корта, шаг в полтора часа. Занятое видно сразу, своё — выделено.

02

Оплата долями

Организатор бронирует, остальные платят свою четверть по ссылке. Не собралось за час — слот возвращается в сетку.

03

Блокировка слота

Слот держится в Redis на время оплаты — двойных броней нет даже когда трое жмут кнопку в одну секунду.

Как это начиналось
9:41Telegram · мини-апп
Корты 4 корта
К1К2К3К4
18:00
19:30
21:00
22:30
18:00
19:30
21:00
22:30
10:00
11:30
13:00
14:30
свободнозанятомоя бронь
Шаг 1,5 часа · 3 600 ₽ за корт
Ближайшие брони
Сегодня, 21:00 Корт 2 Оплачено 4 из 4
Суббота, 10:00 Корт 2 Оплачено 2 из 4
Не собралось за час — слот возвращается в сетку.
Суббота, 10:00 · Корт 2
3 600 ₽
Вы (организатор) оплачено
Кирилл М. оплачено
Антон П. ждём
Дмитрий С. ждём
Слот держится ещё 58 минут
Отправить ссылку на оплату
Мини-апп: сетка на день, свои брони и сбор долей. Слот виден и выбирается там же, где игроки переписываются. Макет живой — переключайте вкладки
web.telegram.org/k/#@kort_club_bot
Корт 4–10 мая
Пн4Вт5Ср6Чт7Пт8Сб9Вс10
18:00
19:30
21:00
22:30
18:00
19:30
21:00
22:30
18:00
19:30
21:00
22:30
18:00
19:30
21:00
22:30
свободнозанятомоя броньдержится на оплате
Слот держится в Redis, пока идёт оплата: 04:58
Шаг 1,5 часа · 3 600 ₽ за корт · 900 ₽ с игрока
Та же сетка на неделю — корт выбирается вкладкой. Слот на оплате помечен пунктиром: пока идёт платёж, его никто не займёт. Макет живой — переключайте вкладки
Результат

Администратор перестал быть кассой и календарём одновременно.


Похожая задача? Расскажите одним сообщением.