Back to archive
Personal project / Live project

Courtside

Helping badminton clubs run their sessions.

My role
Independent product engineer
Built with
SvelteKit, TypeScript, Supabase, TanStack Query, Vitest, Playwright
Illustration of a badminton court
Original project illustration. Not an application screenshot.

The problem

A club night should be about playing. In practice, someone has to remember who arrived late, who has been waiting, who needs a break, and which players have already played together. Attendance, match results and costs often end up in different places.

What I built

Courtside brings those decisions into a mobile-first operator workflow. The admin records attendance, reviews player rotation and team recommendations, records set results, and closes the session with fees and expenses. Club members can follow public read-only views without having to create an account.

Decisions that shaped it

Recommendations are suggestions. The operator can override them because a real session includes fatigue, substitutions and changing arrivals. Rotation uses recorded READY time and session opportunities; rating updates use the actual completed set lineup. Those inputs need to be trustworthy before the interface can explain a recommendation.

Supabase/Postgres stores session state through authorized transactional commands. Public-safe views and row-level security separate information visitors can read from actions only the club admin can take.

Where it stands

The app has implemented session operation, rotation and pairing recommendations, results, and finance tracking. Validation during real club sessions is ongoing. The portfolio illustration represents the sport, not an application screenshot.

View Courtside source