A scalable, containerized workout tracker application where users can register, log in, search for exercises, and track their workouts and progress over time.
This project is a work-in-progress and actively being built. The backend is being architected first. The authentication and profile services are functional and form the foundation for secure user access and identity management. Future phases will include workout tracking, exercise search, and a React frontend.
This app uses a microservices architecture to support modular growth and easy maintenance. Each service runs independently and communicates over internal Docker networking.
- Auth Service
- Profile Service
- Exercise Service
- Workout Logging Service
- Exercise Search Service Additional Filtering
- React + TypeScript Frontend
- Analytics / Progress Dashboard
The authentication service loosely mimics the Auth0 flow, issuing a JWT on login or token request. Tokens are used as Bearer tokens for authorization across services.
| Endpoint | Method | Description |
|---|---|---|
/register |
POST | Registers a new user and creates a linked profile |
/login |
POST | Authenticates user credentials and returns a JWT |
/token |
POST | Issues a token using client_id/client_secret |
- Registration triggers a POST request to the
profile-serviceto create the user profile. - JWTs are signed and verified using utility functions.
- All services will validate tokens before processing protected requests.
The profile service maintains user identity data (first name, last name, email).
| Endpoint | Method | Description |
|---|---|---|
/create |
POST | Creates a new profile |
Profiles are created automatically during registration via an internal POST request from the auth service. Other routes to be built in a future phase.
| Endpoint | Method | Description |
|---|---|---|
/create |
POST | Creates a new exercise |
/{id} |
GET | Retrieves exercise by ID |
/name/{name} |
GET | Retrieves exercise by name |
/ |
GET | Retrieves all exercises |
/{id} |
PUT | Updates an exercise |
/{id} |
DELETE | Deletes an exercise |
- Backend: Python + Flask, using SQLAlchemy for ORM and PostgreSQL as the database
- Microservices: Auth + Profile + Exercise services, each with its own PostgreSQL instance
- Authentication: Custom JWT-based bearer token flow
- Containerization: Docker + Docker Compose
- Frontend (planned): TypeScript + React
- Docker & Docker Compose
- Python 3.10+ (for local development)
-
Clone the repository:
git clone https://github.com/curleyr/workout-tracker-app cd workout-tracker-app -
Copy environment configs for each service within the individual microservices directories.
cp .env.example .env
-
Build and start services:
docker-compose up --build
A Postman collection is included at the root of the project to simplify local API testing for the Auth, Profile, and Exercise services.
- File: workout-tracker-app.local.postman_collection.json
Ensure your local services are running via Docker Compose before using the requests.