Pilat'1: the association's website and app
A Pilates association's public website, its back office and the coaches' mobile app.
- Role
- Solo design and development
- Period
- Oct 2026 – ongoing · Association Pilat'1
- Stack
- PHP
- Symfony 8
- EasyAdmin 5
- Tailwind CSS
- PostgreSQL
- HelloAsso API
- PWA
- Web Push
- ClamAV
- FrankenPHP
- PHPUnit
Context
A Pilates association managed its registrations, cheques and attendance lists on paper and in spreadsheets. It needed a website to present itself and receive trial requests, and a simple tool for the board and the coaches.
What I built
For the public
- A website with the class slots, computed remaining places (then "Full, waiting list"), trial-class requests and registration.
- Online payment through HelloAsso, in one or three instalments, linked straight to the membership. Or cheque, transfer, cash.
For the board
- Season dashboard: members and places, fees received and outstanding, cheques to cash, documents to collect, trial requests to handle.
- From trial request to registration in one click, balance reminders by e-mail, PDF certificates for works councils or health insurers, CSV export.
- A season calendar that removes public and school holidays (official open data).
For coaches: an installable app (PWA)
- Class attendance from the phone, adding a walk-in.
- Messages to students, opt-in push notifications, coach invoices.
- A coach only sees their slots and their students.
Technical points
- Three nested roles (coach, board, admin) and fine-grained per-action rights.
- Security: CSRF tokens on every action, antivirus-scanned uploads, signature stored outside the public site, bank details never published.
- Data minimisation: no health data collected, only "certificate received" or not.
- Measured performance: I wrote an audit command that crawls every back-office page with each role and reports the number of SQL queries, the most repeated query (to spot an N+1 whatever the data volume), page weight and estimated load time on 4G and 5G.
- Automated deployment: database and secrets created on first deploy, migrations on every release.