A full-stack Java (Spring Boot) + gRPC + Python + React.ts application to log and visualize workout sessions, track progress over time, and get progress insights.
- User registration and login with JWT authentication
- Exercise database preloaded with 1000+ entries with various muscle groups
- Secure API endpoints for:
- Fetching filtered/unfiltered exercises
- Logging workouts tied to authenticated users
- Retrieving workout history per user
- Caffeine caching for improved performance (65% throughput gain on GET
/api/exercises) - Clean RESTful architecture with DTO projection to limit unnecessary data transfer
- Web microservice for day-wise and muscle-wise volume distribution calculation.
- Communicates via a gRPC connection with the Spring application.
- Authentication system with login/register pages
- JWT token storage in
localStorageand context-based auth state - Dashboard:
- Integrated k6 scripts for load testing API endpoints
- Compared performance before and after caching
- Some kind of progress curve on the user's workout data
- Benchmarking REST vs gRPC
- Dockerizing the entire stack for easy deployment
| Layer | Tech |
|---|---|
| Backend | Spring Boot, JPA (Hibernate), PostgreSQL, Caffeine, FastAPI, gRPC |
| Frontend | React, Vite, TypeScript, Axios |
| Auth | JWT (HMAC-SHA256), Spring Security |
| Testing | Postman, k6 |
| Deployment (Planned) | Docker Compose (Spring + PostgreSQL + optional Python service) |
- Java 17+
- Node.js 18+
- Docker + Docker Compose
- PostgreSQL (or let Docker run it)
- Clone the repo:
git clone https://github.com/reckadon/workout-tracker.git cd workout-tracker/backend - Run PostgreSQL in Docker (if not installed locally):
You can find the
docker-compose up -d
docker-compose.ymlin the root directory to set up PostgreSQL. - Configure
application.propertieswith your DB credentialsspring.datasource.url=jdbc:postgresql://localhost:5432/workoutdb spring.datasource.username=postgres spring.datasource.password=yourpassword
- Build and run the Spring Boot app:
or by using Intellij/Eclipse run configurations. (make sure to set VM options if needed, and generate gRPC classes using
./mvnw spring-boot:run
./mvnw clean compile)
To build a jar:
./mvnw clean packageRun the jar:
java -Duser.timezone=Asia/Kolkata -jar target/WorkoutTracker-0.0.1-SNAPSHOT.war- To fix:
Caused by: org.postgresql.util.PSQLException: FATAL: invalid value for parameter "TimeZone": "Asia/Calcutta"
Add-Duser.timezone=Asia/Kolkatato your VM options in your IDE or run command.
Open to feature ideas, performance tweaks, and frontend improvements!