Files
crossfit/README.md
2025-07-20 17:26:46 +02:00

3.7 KiB

Crossfit Application

This is a Python application for managing Crossfit bookings and notifications. The application automates the process of booking Crossfit sessions and sends notifications via email and Telegram when a booking is successful.

Features

  • Automated booking of Crossfit sessions
  • Email and Telegram notifications for successful bookings
  • Configurable preferred sessions
  • Retry logic for booking failures
  • Detailed logging

Prerequisites

  • Docker
  • Docker Compose

Setup

  1. Create a .env file based on .env.example and fill in the required credentials.
  2. Build and run the application using Docker Compose:
docker-compose up --build
  1. The application will run in a Docker container, and the logs will be stored in the ./log directory.

Usage

The application will automatically check for available sessions and book them based on your preferences. It will send notifications via email and Telegram when a booking is successful.

Configuring Preferred Sessions

You can configure your preferred sessions using the preferred_sessions.json file. This file should contain a JSON array of session names, for example:

[
  "Morning Class",
  "Evening Class",
  "Saturday Open Gym"
]

If the file is not found or contains invalid data, the application will use default hardcoded sessions.

Environment Variables

The following environment variables are required:

  • CROSSFIT_USERNAME: Your Crossfit username
  • CROSSFIT_PASSWORD: Your Crossfit password
  • EMAIL_FROM: Your email address
  • EMAIL_TO: Recipient email address
  • EMAIL_PASSWORD: Your email password
  • TELEGRAM_TOKEN: Your Telegram bot token
  • TELEGRAM_CHAT_ID: Your Telegram chat ID

Preferred Sessions

You can configure your preferred sessions in the preferred_sessions.json file. The preferred sessions are defined as a list of objects, where each object contains the day of the week, start time, and session name.

[
    {
        "day_of_week": 4,
        "start_time": "17:00",
        "session_name_contains": "WEIGHTLIFTING"
    },
    {
        "day_of_week": 5,
        "start_time": "12:30",
        "session_name_contains": "HYROX"
    },
    {
        "day_of_week": 2,
        "start_time": "18:30",
        "session_name_contains": "CONDITIONING"
    }
]

The application will automatically load the preferred sessions from this file. If the file is not found or contains invalid data, it will fall back to the default hardcoded sessions.

Fields

  • day_of_week: Integer representing the day of the week (0=Monday, 6=Sunday)
  • start_time: String representing the start time in HH:MM format
  • session_name_contains: String containing the name or part of the name of the session

Files

  • Dockerfile: Docker image definition
  • docker-compose.yml: Docker Compose service definition
  • .env.example: Example environment variables file
  • .dockerignore: Docker ignore file
  • .gitignore: Git ignore file
  • book_crossfit.py: Main application script
  • crossfit_booker.py: Crossfit booking script
  • session_notifier.py: Session notification script
  • preferred_sessions.json: Configuration file for preferred sessions
  • requirements.txt: Python dependencies

Project Structure

.
├── Dockerfile
├── docker-compose.yml
├── .env.example
├── .dockerignore
├── .gitignore
├── book_crossfit.py
├── crossfit_booker.py
├── session_notifier.py
├── requirements.txt
├── preferred_sessions.json
└── log
    └── crossfit_booking.log

Contributing

Contributions are welcome! Please open an issue or submit a pull request.

License

This project is licensed under the MIT License. See the LICENSE file for details.