ClubHub
A better way to book your next game.

The challenge
Players need to find a gaming club and reserve a specific seat, while staff manage the same floor plan, prices, and arrivals. Concurrent requests must never assign the same seat to overlapping bookings.
How I approached it
Built a Next.js player app and admin console backed by a modular NestJS API. PostgreSQL exclusion constraints protect seat-time intervals; Redis manages temporary holds and Socket.io delivers availability updates. The floor-plan editor shares geometry between flat and 2.5D views, with undo history and version checks when saving.
What came out of it
A web platform available at clubhub.uz, bringing club discovery, seat selection, bookings, QR check-in, and club administration together. Russian, Uzbek, and English interfaces serve players and staff, with Telegram Mini App access for players.
How the pieces connect
Map-based club discovery and live seat availability
Floor-plan editing with shared 2D / 2.5D geometry
Booking conflicts prevented at the database level
QR check-in and role-based club administration
Next destination