How lokeshsiddi/smart-fit-ai works
Purpose and Entry Points
Smart Fit AI is a distributed fitness platform: users register, submit activities, and receive AI-generated recommendations. Backend services are independent Spring Boot applications, each launched from its *Application.java; a Vite/React client is also present. Public traffic enters through the gateway, while service-to-service discovery and centralized configuration support the deployment.
• Fitness-Microservices/gateway/src/main/java/com/fitness/gateway/GatewayApplication.java
• Fitness-Microservices/fitness-app-frontend/src/main.jsx
• Fitness-Microservices/docker-compose.yml
Edge Gateway and Identity Boundary
The API gateway is the client-facing routing and security boundary. Its security configuration and Keycloak synchronization filter indicate authentication/user identity handling occurs before downstream service access. Gateway-side user classes use a WebClient to coordinate user operations.
• Fitness-Microservices/gateway/src/main/java/com/fitness/gateway/config/SecurityConfig.java
• Fitness-Microservices/gateway/src/main/java/com/fitness/gateway/filter/KeycloakUserSyncFilter.java
• Fitness-Microservices/gateway/src/main/java/com/fitness/gateway/user/UserService.java
User Domain
User Service owns registration, profile retrieval/validation, roles, and relational persistence. Activity Service validates a referenced user through its dedicated validation client/service rather than owning user data.
• Fitness-Microservices/userservice/src/main/java/com/fitness/userservice/controller/UserController.java
• Fitness-Microservices/userservice/src/main/java/com/fitness/userservice/service/UserService.java
• Fitness-Microservices/activityservice/src/main/java/com/fitness/activityservice/service/UserValidationService.java
Activity Ingestion and Event Production
Activity Service accepts activity requests, maps them to activity documents, persists them to MongoDB, and publishes activity events to RabbitMQ. This is the synchronous-to-asynchronous boundary: successful activity submission need not wait for AI generation.
• Fitness-Microservices/activityservice/src/main/java/com/fitness/activityservice/controller/ActivityController.java
• Fitness-Microservices/activityservice/src/main/java/com/fitness/activityservice/service/ActivityService.java
• Fitness-Microservices/activityservice/src/main/java/com/fitness/activityservice/config/RabbitMqConfig.java
AI Recommendation Pipeline
AI Service consumes activity messages, transforms activity context into a Gemini request, persists generated recommendation documents, and exposes recommendation retrieval. It owns recommendation storage separately from activity history, preserving database-per-service isolation.
• Fitness-Microservices/aiservice/src/main/java/com/fitness/aiservice/service/ActivityMessageListener.java
• Fitness-Microservices/aiservice/src/main/java/com/fitness/aiservice/service/GeminiService.java
• Fitness-Microservices/aiservice/src/main/java/com/fitness/aiservice/controller/RecommendationController.java
Platform Control Plane
Config Server centrally serves service-specific configuration; Eureka provides registration/discovery for gateway and service routing. Each backend service has its own Spring configuration and Docker image definition.
• Fitness-Microservices/configserver/src/main/java/com/fitness/configserver/ConfigserverApplication.java
• Fitness-Microservices/configserver/src/main/resources/config/api-gateway.yml
• Fitness-Microservices/eureka/src/main/java/com/server/eureka/EurekaApplication.java
Runtime and External Dependencies
The primary runtime is Java 21 with Spring Boot 3/Spring Cloud; frontend runtime is React/Vite. Infrastructure includes PostgreSQL for users, MongoDB for activity and recommendation documents, RabbitMQ for events, Eureka, Config Server, and Google Gemini API. Keycloak is materially implied by the gateway filter. Deployment artifacts are Dockerfiles per service and a compose definition.
• Fitness-Microservices/userservice/src/main/resources/application.yml
• Fitness-Microservices/aiservice/src/main/resources/application.yml
• Fitness-Microservices/activityservice/Dockerfile
Main entry points: GatewayApplication.java API Gateway · ActivityService.java Activity Service · UserService.java User Service · ConfigserverApplication.java Config Server
Components 20
Client
- React/Vite Client
Fitness-Microservices/fitness-app-frontend/src/main.jsx
Edge & Identity
- API Gateway · Public routing and security boundary.
Fitness-Microservices/gateway/src/main/java/com/fitness/gateway/GatewayApplication.java - Security & User Sync · Authenticates requests and synchronizes Keycloak identities.
Fitness-Microservices/gateway/src/main/java/com/fitness/gateway/filter/KeycloakUserSyncFilter.java - Keycloak
Domain Services
- User Service · Owns registration, profiles, validation, and roles.
Fitness-Microservices/userservice/src/main/java/com/fitness/userservice/service/UserService.java - User API
Fitness-Microservices/userservice/src/main/java/com/fitness/userservice/controller/UserController.java - User PostgreSQL
- Activity API
Fitness-Microservices/activityservice/src/main/java/com/fitness/activityservice/controller/ActivityController.java - Activity Service · Persists activities and emits activity events.
Fitness-Microservices/activityservice/src/main/java/com/fitness/activityservice/service/ActivityService.java - User Validation · Validates referenced users with User Service.
Fitness-Microservices/activityservice/src/main/java/com/fitness/activityservice/service/UserValidationService.java - Activity MongoDB
- RabbitMQ · Asynchronous activity-event boundary.
Fitness-Microservices/activityservice/src/main/java/com/fitness/activityservice/config/RabbitMqConfig.java - Activity Event Consumer
Fitness-Microservices/aiservice/src/main/java/com/fitness/aiservice/service/ActivityMessageListener.java - Gemini Generator · Builds Gemini requests from activity context.
Fitness-Microservices/aiservice/src/main/java/com/fitness/aiservice/service/GeminiService.java - Google Gemini API
- Recommendation API
Fitness-Microservices/aiservice/src/main/java/com/fitness/aiservice/controller/RecommendationController.java - Recommendation MongoDB
Platform Services
- Config Server · Serves service-specific centralized configuration.
Fitness-Microservices/configserver/src/main/java/com/fitness/configserver/ConfigserverApplication.java - Eureka
Fitness-Microservices/eureka/src/main/java/com/server/eureka/EurekaApplication.java - Docker Compose · Coordinates local distributed runtime.
Fitness-Microservices/docker-compose.yml
Connections 29
- React/Vite Client → API Gateway: public API
- API Gateway → Security & User Sync: secures requests
- Security & User Sync → Keycloak: identity sync
- API Gateway → User API: routes user requests
- API Gateway → Activity API: routes activity requests
- API Gateway → Recommendation API: routes recommendation requests
- User API → User Service: handles
- User Service → User PostgreSQL: owns
- Activity API → Activity Service: handles
- Activity Service → User Validation: validates user
- User Validation → User Service: user lookup
- Activity Service → Activity MongoDB: owns
- Activity Service → RabbitMQ: publishes activity event
- RabbitMQ → Activity Event Consumer: delivers event
- Activity Event Consumer → Gemini Generator: activity context
- Gemini Generator → Google Gemini API: generates recommendation
- Gemini Generator → Recommendation MongoDB: persists recommendation
- Recommendation API → Recommendation MongoDB: retrieves
- API Gateway → Eureka: registers/discovers
- User Service → Eureka: registers
- Activity Service → Eureka: registers
- Activity Event Consumer → Eureka: registers
- API Gateway → Config Server: loads config
- User Service → Config Server: loads config
- Activity Service → Config Server: loads config
- Activity Event Consumer → Config Server: loads config
- Docker Compose → API Gateway: deploys
- Docker Compose → Config Server: deploys
- Docker Compose → Eureka: deploys