Web · 2024
ProGym
A full-stack gym management platform — QR/barcode check-in, tiered subscriptions with freeze, a shop with inventory, and payroll/financials. Django + Celery + React.
Problem
Mid-to-large gyms run on a tangle of spreadsheets and paper: who's paid, who's frozen their membership, what sold at the counter, what each trainer is owed. ProGym replaces that with one system covering the whole operation — front desk to financials.
What it does
- Check-in — members are issued QR/barcodes (encrypted with Fernet) and scanned in via the browser camera; attendance is validated against an active subscription.
- Subscriptions — main, add-on, and locker plans, with freeze/unfreeze and guest-invitation codes; expiry by time or class count.
- Shop & inventory — products, categories, stock, sales, and percentage offers.
- Financials & payroll — salaries with bonuses/deductions, trainer commissions (a cut of private-session revenue), referrer commissions, and advance payments.
- Reports & roles — analytics plus role-based access (superuser, manager, moderator).
Stack & architecture
Django 5 + DRF with SimpleJWT auth, Celery + Redis for scheduled jobs (a
daily beat task validates subscription freezes), and qrcode/python-barcode
for code generation. The frontend is React + Vite with Flowbite/Tailwind,
react-hook-form, and html5-qrcode + react-webcam for in-browser scanning.
Deployed with Docker — Nginx + Gunicorn (3 workers) and Certbot SSL.
Outcome
A production system (deployed for a real gym) spanning eight Django apps and ~30 models, built over roughly 18 months — one of the deepest domain models I've shipped, with the subscription and commission logic being the hard part.