Member administration for sports clubs, built as a React-powered WordPress theme.
Rondo Club replaces spreadsheets and scattered admin tools with a modern single-page application for managing your sports club. It runs as a WordPress theme — install it, activate ACF Pro, and your club board has a real web app for member management.
- People management — contacts, photos, work history, and custom fields
- Teams & committees — organize members into teams with logos, staff, and contact info
- Dashboard — birthday reminders, upcoming events, activity timeline
- Volunteer tracking — VOG (background check) compliance and volunteer status
- Membership fees — per-season fee categories with Mollie payment integration and installment plans
- Discipline cases — incident tracking with invoicing
- Calendar — Google Calendar and CalDAV sync (iCloud, Fastmail, Nextcloud)
- Feedback system — collect and process user feedback with agent workflow
- Todos — task management linked to people
- Search — global search across all people, teams, and committees
- iCal feeds — subscribe to club calendars from any calendar app
- Multi-user — shared access model with WordPress authentication and role-based access
- Dark mode — automatic theme switching
- PWA — installable as a mobile app with offline support
- WordPress 6.0+
- PHP 8.0+
- Advanced Custom Fields Pro
- Node.js 18+ (for development only)
# Clone the repository
git clone https://github.com/RondoHQ/rondo-club.git
cd rondo-club
# Install dependencies
npm install
composer install
# Start development server (requires WP_DEBUG = true in wp-config.php)
npm run devThe theme auto-detects the Vite dev server at http://localhost:5173 when WP_DEBUG is enabled.
For production, npm run build generates optimized assets in dist/.
| Layer | Technology |
|---|---|
| Frontend | React 18, React Router 6, TanStack Query, Tailwind CSS v4 |
| Backend | WordPress, PHP 8.0+, ACF Pro |
| Build | Vite 5.0 |
| Payments | Mollie (Payment Links API) |
| Sync | Rondo Sync (Sportlink integration) |
Rondo Club uses PHP constants in wp-config.php. The only required constant is the encryption key:
# Generate and set encryption key via WP-CLI
wp config set RONDO_ENCRYPTION_KEY "$(php -r 'echo bin2hex(random_bytes(16));')" --type=constantAll configuration constants
| Constant | Purpose | Required |
|---|---|---|
RONDO_ENCRYPTION_KEY |
Encryption for OAuth tokens | Yes |
GOOGLE_OAUTH_CLIENT_ID |
Google OAuth client ID (Calendar + Contacts) | No |
GOOGLE_OAUTH_CLIENT_SECRET |
Google OAuth client secret | No |
- Enable Google Calendar API and Google People API in Google Cloud Console
- Create OAuth 2.0 credentials with redirect URIs:
https://your-domain.com/wp-json/rondo/v1/calendar/auth/google/callbackhttps://your-domain.com/wp-json/rondo/v1/contacts/auth/google/callback
- Add to
wp-config.php:
define('GOOGLE_OAUTH_CLIENT_ID', 'your-client-id.apps.googleusercontent.com');
define('GOOGLE_OAUTH_CLIENT_SECRET', 'your-client-secret');No server-side configuration needed. Users add calendar connections via Settings > Calendars in the app. Supports iCloud, Fastmail, Nextcloud, and any CalDAV-compatible server.
npm run dev # Start Vite dev server (port 5173, HMR)
npm run build # Production build to dist/
npm run lint # ESLint (zero warnings policy)
npm run preview # Preview production buildEvery commit that reaches main is deployed automatically after the JavaScript
and PHP checks pass. GitHub Actions builds dist/, installs production Composer
dependencies, creates a retained release artifact, deploys it over SSH, clears
WordPress and SiteGround caches, and verifies the live theme version and URL.
The Roll back production workflow can rebuild and deploy any full commit SHA
that is already contained in main.
bin/deploy.sh remains available for emergencies. It accepts exported
deployment variables directly and falls back to the local .env file when
required values are missing.
rondo-club/
├── functions.php # Theme init, class loading, asset enqueuing
├── includes/ # ~50 PHP classes (REST controllers, post types, etc.)
├── acf-json/ # ACF field group definitions (version controlled)
├── src/
│ ├── main.jsx # React entry point
│ ├── router.jsx # Routes with lazy loading
│ ├── api/client.js # Axios client with WP nonce injection
│ ├── hooks/ # Custom React hooks (useAuth, usePeople, etc.)
│ ├── pages/ # Route components
│ └── components/ # Shared UI components
├── bin/deploy.sh # Production deployment script
└── dist/ # Built assets (generated)
The theme exposes two REST API namespaces:
/wp/v2/— Standard WordPress REST for people, teams, committees (with ACF fields)/rondo/v1/— Custom endpoints for dashboard, search, timeline, reminders, payments
Full API reference: developer.rondo.club/api
See CONTRIBUTING.md for development setup, coding standards, and the PR process.
To report a vulnerability, see SECURITY.md.