← ALL WORK
Sports & operations

Racket Sports

The club, the court and the player—connected.

Court booking, club management and video-analysis workflows across a full-stack sports platform.

React NativeTypeScriptNestJSPostgreSQLPythonStripe
MY ROLE

Product & Full-Stack Engineering

BUILT FOR

Racket-sports clubs, operators and players

01 / THE CONTEXT

The club, the court and the player—connected.

A court booking is both a scheduling decision and a commercial transaction. Concurrent requests, payment authorization and club operations need to agree on what has actually been reserved.

What I built

I built an Expo / React Native experience backed by NestJS and PostgreSQL, with Python supporting video analysis. Booking concurrency and event delivery are handled at the persistence and workflow layers.

02 / PRODUCT CAPABILITIES
01

Court booking

PostgreSQL advisory locks coordinate competing booking attempts around shared court availability.

02

Club & payment workflows

Club operations connect to Stripe authorization flows, with outbox-based delivery for subsequent work.

03

Video analysis

Python services support sports-video analysis independently of the booking application.

Under the surface.

Follow a real product workflow through its application boundaries. Select any step to explore the implementation.

ENGINEERING IN MOTION

One court. One slot. A coordinated reservation.

A booking flow that treats concurrent availability, price and payment authorization as a connected operation.

STEP 01 / PLAYER REQUEST

Choose court & time

The booking request identifies the court and time range that the player wants to reserve.

WHY IT MATTERS

Concurrency control belongs near the booking data. The payment provider is still an external boundary; a database transaction alone cannot make a remote payment call atomic.

Conceptual flow based on the implementation. Animated connections illustrate data movement, not live traffic.

04 / ENGINEERING JUDGMENT

Built around the constraints.

Enforce booking coordination in the database. Use durable event delivery for follow-up work and separate analytical compute from transactional operations.

Discuss the engineering ↗

Keep exploring.

Next project ↗