SkyLuma is a weather forecast app built with Spring Boot and Angular.
The project is based on an older weather app, but it is not a direct migration. The goal is to build a cleaner and more modern version with a simple backend, a REST API, and a separate Angular frontend.
SkyLuma/
backend/ Spring Boot REST API
frontend/ Angular app
- Java 21
- Spring Boot
- Maven
- Lombok
- GitHub Actions CI
- Angular
- TypeScript
- SCSS
- Angular dev proxy
- GitHub Actions CI
- Current weather by latitude and longitude
- Daily forecast
- Weather provider selection
- Default weather provider from backend config
- Provider override from the frontend
- Current browser location
- Coordinate validation
- Weather alert message based on the selected provider
SkyLuma currently supports:
- Open Meteo
- OpenWeather
Open Meteo is the default provider because it works without an API key for basic forecast data.
OpenWeather is optional and requires an API key.
Weather alert support depends on the selected provider.
The current Open Meteo implementation gives forecast data, but it does not give official weather alerts.
OpenWeather can return weather alerts when the API returns active alerts for the selected location.
The frontend shows a clear message when weather alerts are not available from the selected provider. This avoids saying that there are no alerts when the provider simply does not support them.
Run the backend and frontend in separate terminals.
From the project root:
cd backend
./mvnw spring-boot:runThe backend starts on:
http://localhost:8080
Health check:
curl http://localhost:8080/api/healthWeather endpoint with the default provider:
curl "http://localhost:8080/api/weather?latitude=50.8798&longitude=4.7005"Weather endpoint with a selected provider:
curl "http://localhost:8080/api/weather?latitude=50.8798&longitude=4.7005&provider=openmeteo"curl "http://localhost:8080/api/weather?latitude=50.8798&longitude=4.7005&provider=openweather"From the project root:
cd frontend
npm install
npm startThe frontend starts on:
http://localhost:4200
During local development, Angular sends /api requests to the backend.
Open Meteo is the default provider.
Example backend config:
skyluma:
weather:
provider: openmeteoSupported provider values:
openmeteo
openweather
OpenWeather requires an API key.
Set this environment variable before running the backend if you want to use OpenWeather:
export OPENWEATHER_API_KEY=your_openweather_api_keyThe backend reads OpenWeather settings from application.yaml:
openweather:
base-url: https://api.openweathermap.org/data/3.0
api-key: ${OPENWEATHER_API_KEY:}
units: metric
language: enDo not commit API keys or secrets.
GET /api/healthExample response:
{
"status": "UP"
}GET /api/weather?latitude=50.8798&longitude=4.7005With provider:
GET /api/weather?latitude=50.8798&longitude=4.7005&provider=openmeteoGET /api/weather?latitude=50.8798&longitude=4.7005&provider=openweatherThe weather response includes:
- selected provider
- location
- current weather
- daily forecast
- weather alerts when the selected provider gives them
From the project root:
cd backend
./mvnw testFrom the project root:
cd frontend
npm run build- Keep pull requests small and focused.
- Keep backend provider values stable.
- Do not make the frontend depend on backend error message text.
- Add stable error codes later if the frontend needs to react to specific backend errors.
- Keep frontend UI text in the frontend.
- Add frontend translations later if we need more languages.
- Do not commit API keys, secrets, tokens, or local environment files.