GymFlow runs entirely inside Docker. A singleDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/Lokhy87/gymApp/llms.txt
Use this file to discover all available pages before exploring further.
docker compose up command starts the PHP/Symfony API on port 8050 and a MariaDB 10.11 database on port 3350, so you do not need PHP, Composer, or a local database installed on your machine.
Clone the repository
Clone the GymFlow repository to your local machine.
The repository root contains the
Dockerfile, docker-compose.yml, and both the backend/ and frontend/ directories.Start the Docker stack
Build the PHP image and start both services in the background.Docker Compose starts two containers:
Once the containers are running, verify the API is online:Expected response:
| Container | Service | Exposed port |
|---|---|---|
gymflow_php_server | Symfony API (Apache + PHP 8.3) | 8050 → container 8000 |
gymflow_db_server | MariaDB 10.11 | 3350 → container 3306 |
Run database migrations
With the containers running, open a shell inside the PHP container and apply the Doctrine migrations to create the schema.
Create an account
Register a new user account by posting to A successful registration returns HTTP 201:Alternatively, open the Angular dev server (
POST /api/register. The location field is optional and defaults to Valencia if omitted.npm start inside frontend/) and use the Register page at http://localhost:4200/register.Log in and get your JWT
Exchange your credentials for a JWT by calling A successful response returns a Save this token — you must pass it as a
POST /api/login_check. The API uses your email as the login identifier.token:Bearer token in the Authorization header for all protected endpoints.The Angular frontend stores the token in
localStorage under the key token and attaches it automatically to every outgoing request via the authInterceptor.Log your first workout
Find an exercise ID you want to log. Fetch the full exercise list from the library:Then create a workout entry with A successful response returns HTTP 201 with the new workout’s ID:
POST /api/workouts. The required fields are exercise_id, sets, and reps. weight and comments are optional.Next steps
Architecture
Learn how the Angular SPA, Symfony API, and MariaDB fit together.
Authentication
Full reference for the register and login endpoints, token format, and expiry.
Workouts API
Create, update, and delete workout entries via the REST API.
Docker deployment
Configure and deploy GymFlow with Docker Compose in a production environment.