Gym & Leisure Centre Platform
Members, bookings, payments, payroll and turnstiles for a live club in Cyprus
My role: Full-stack developer: database schema, edge-function APIs, admin web app, access-control integration, VPS deployment.

In production for a leisure centre in Cyprus. The client's name and screenshots are shown only with their agreement; interface captures use demo data.
Overview
A management platform for a gym and leisure centre: an admin web app for the front desk and management, plus the APIs behind a member app and a staff app. Members book classes and renew packages; staff manage schedules, clients and earnings; the building's NFC turnstiles open only for members whose packages are valid.
The problem
The club ran on spreadsheets and a legacy desk system. Membership status, class capacity, payments and door access lived in different places, so expired members walked in and staff spent hours reconciling.
The solution
One PostgreSQL schema is the single source of truth. A React admin app covers members, bookings, payments, reports, inventory, marketing campaigns and staff. Thirty-nine serverless edge functions expose the member and staff app APIs (OTP login, class booking with waitlists, package renewal and pricing, payment history, smartpasses). Access control talks to the same data through the Gantner cloud integration.
Principal features
Membership and packages
Individual and family packages with durations, pricing rules and renewals; expiry drives everything downstream.
Class booking with waitlists
Occupancy, upcoming sessions, cancellations and automatic waitlist promotion.
Payments and payroll
Payment history, confirmations, daily payroll detail and average-revenue reports.
Door access
Gantner NFC turnstile integration plus entry/exit tracking, so access follows membership status in real time.
Wallet passes
Apple and Google Wallet smartpasses issued per member.
Staff tools
Schedules, clients, exercises, leave, earnings and a real-time staff chat over WebSockets.
Technical decisions
- Self-hosted Supabase on the client's VPS instead of a managed tier: the club keeps its data in-country and the monthly cost stays flat.
- Sixty-four versioned SQL migrations with row-level security policies keep the schema auditable.
- Long-running realtime pieces (turnstile events, staff chat) run as small Node services under systemd behind Caddy rather than inside edge functions.
- Transactional email goes through Resend; SMS campaigns and class-cancellation notices are sent by dedicated edge functions.
More Web Applications
CYMaps
Billboard inventory, availability and campaign booking on a map, for Cyprus
View projectAd Spend Intelligence Platform
Media-expenditure analytics across TV, radio, web, outdoor, press and magazines
View projectFine Service Management
An ERP for a services company: accounting, projects, inventory, people
View project

