04 · Court booking · 2026

Kort

Booking padel courts, with payment and squad sorting, inside the messenger.

Role Whole cycle, including taking payments
Timeline 3 weeks
Load Four courts; a peak evening lasts minutes
Stack React · TypeScript · FastAPI · Redis

The problem

Courts were booked in a chat: the administrator checked times by hand, collected 900 roubles from each of four players, and worked out who had not turned up. On a peak evening three groups would claim the same slot at once.

The club did not want a separate app: the players already live in a shared chat.


What was built
01

The slot grid

A week, four courts, ninety-minute steps. Taken slots are obvious at a glance and your own are highlighted.

02

Split payment

The organiser books and everyone else pays their quarter by link. If it does not come together within an hour, the slot goes back into the grid.

03

Slot locking

The slot is held in Redis for the duration of the payment — there are no double bookings even when three people tap the button in the same second.

How it started
9:41Telegram · mini app
Courts 4 courts
C1C2C3C4
18:00
19:30
21:00
22:30
18:00
19:30
21:00
22:30
10:00
11:30
13:00
14:30
freetakenmine
90-minute slots · 3,600 ₽ per court
Upcoming bookings
Today, 21:00 Court 2 Paid 4 of 4
Saturday, 10:00 Court 2 Paid 2 of 4
If it does not come together within an hour, the slot goes back.
Saturday, 10:00 · Court 2
3,600 ₽
You (organiser) paid
Kirill M. paid
Anton P. waiting
Dmitry S. waiting
Slot held for another 58 minutes
Send the payment link
The first take: a day of slots, your own bookings and the split payment — picked where the players already talk. Interactive — try the tabs
web.telegram.org/k/#@kort_club_bot
Kort 4–10 May
Mon4Tue5Wed6Thu7Fri8Sat9Sun10
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
freetakenmineheld for payment
The slot is held in Redis while payment runs: 04:58
90-minute slots · 3,600 ₽ per court · 900 ₽ per player
The same grid across a week — the court is a tab. A slot under payment is dashed: while the payment runs, nobody else can take it. Interactive — try the tabs
Result

The administrator stopped being the till and the calendar at the same time.


Similar problem? Tell me in one message.