Unofficial WodApp alternative for planning CrossFit classes. Uses the same credentials as app.wodapp.nl — no separate account needed.
Privacy: Your password is never stored. Login sends it directly to WodApp, which returns an auth token — only that token is kept in your browser cookie.
Disclaimer: This is a personal experiment, not affiliated with or endorsed by WodApp or Paynplan. It uses a reverse-engineered, undocumented API (
ws.paynplan.nl). The API may change or break at any time. For personal use only — do not run as a public service.
- Friend tracking — see what classes your friends are joining
- Exercises overview — browse all programmed movements across the schedule
- 1RM tracker — log and track your personal records per exercise
- Google Calendar sync — automatically sync class signups to Google Calendar (requires a GCP OAuth client)
Log in with your existing WodApp credentials (email + password). No registration required.
Questions or issues? Open an issue on GitHub.
- Python 3.11+
- A WodApp account
git clone https://github.com/sebastiaankok/wodplanner.git
cd wodplanner
python -m venv .venv
source .venv/bin/activate
pip install -e ".[api]"
uvicorn wodplanner.app.main:app --host 0.0.0.0 --port 8000Open http://localhost:8000 and log in with your WodApp credentials.
All settings are optional. Set via environment variables or a .env file:
| Variable | Default | Description |
|---|---|---|
SECRET_KEY |
random | Cookie signing key — set this in production or sessions reset on restart |
ENVIRONMENT |
development |
Set to production to enable secure cookies |
SESSION_EXPIRE_DAYS |
never | Session lifetime in days |
API_CACHE_TTL_SECONDS |
600 |
Cache TTL for schedule data |
GOOGLE_CLIENT_ID |
— | Google OAuth client ID (enables Calendar sync) |
GOOGLE_CLIENT_SECRET |
— | Google OAuth client secret |
GOOGLE_REDIRECT_URI |
http://localhost:8000/google/callback |
Must match the URI registered in GCP |
GOOGLE_TOKEN_ENC_KEY |
derived | Fernet key for token encryption; set explicitly in production |
Schedules can be imported from a PDF file:
import-schedule schedule.pdf --year 2026 --gym-id 2495Use --dry-run to preview without writing to the database.
backup-db
backup-db --db-path /data/wodplanner.db --backup-dir /data/backups --keep 7This project is not affiliated with or endorsed by WodApp or Paynplan. It uses a reverse-engineered, undocumented API (ws.paynplan.nl) and is intended for personal use only. It is experimental — the upstream API may change without notice. Do not run this as a public service or share access with others.