A Spring Boot web application that helps runners find suitable training times based on weather conditions, recovery status, and personal training preferences.
The application combines hourly weather forecasts with individual training goals and fatigue factors to generate personalized running recommendations such as:
“Today at 18:00 — 18 °C, light wind and sunny conditions — good time for a run.”
- Personalized training time recommendations
- Hourly weather forecast visualization
- Weather-based scoring system
- Fatigue and recovery tracking
- Weekly training goals
- Run documentation and history
- Calendar view for completed activities
- Location autocomplete via Geocoding API
- AJAX-based dynamic frontend updates
- Java
- Spring Boot
- Spring MVC
- Spring Data JPA
- Hibernate
- PostgreSQL
- Thymeleaf
- HTML / CSS
- JavaScript
- AJAX
- Open-Meteo Weather API
- Open-Meteo Geocoding API
Detailed documentation of development: https://drive.google.com/file/d/1J2NgvBwgCBODDJbwIhwRwKSGX88X-s75/view?usp=drive_link
The project follows a layered architecture consisting of:
- Controller layer
- Service layer
- Repository layer
- Domain model layer
Additionally, several software design principles and patterns were applied:
- Adapter Pattern
- Builder Pattern
- Facade Pattern
- Strategy Pattern (extended scoring strategies)
- Aggregator Pattern
- DTOs (Data Transfer Objects)
- Value Objects (DDD-inspired)
- Single Responsibility Principle
- Domain Model Pattern
The recommendation system is modular and extensible: different scoring strategies independently evaluate weather, fatigue, and training preferences before their scores are aggregated into a final recommendation score.
The recommendation engine works in multiple stages:
- Generate possible training hour candidates
- Evaluate each candidate using multiple scoring strategies
- Aggregate all scores into a final score
- Filter low-quality recommendations
- Return the best recommendations per day
Factors considered include:
- Temperature
- Rain probability
- Wind speed
- Cloud coverage
- Daylight
- Recovery/fatigue level
- Preferred training time
The application uses PostgreSQL together with Spring Data JPA and Hibernate.
Sensitive database credentials are not included in this repository.
Configure your own database connection in:
application.propertiesExample:
spring.datasource.url=jdbc:postgresql://localhost:5432/runningweather
spring.datasource.username=YOUR_USERNAME
spring.datasource.password=YOUR_PASSWORD- Java 21
- Maven
- PostgreSQL
mvn spring-boot:runThe application will then be available at:
http://localhost:8080
This project was developed as part of a university software engineering project and served as practical experience in:
- Java Spring Boot development
- REST API integration
- Full-stack web development
- Software architecture and design patterns
- Domain-driven design concepts
- Database integration with JPA/Hibernate
- Asynchronous frontend communication using AJAX
Developed by Hannah Fitz
University project – winter semester 2025/26