A hobby project to track stock, ETF, forex and crypto investments.
- Backend: Java 25 / Spring Boot, built with Maven (multi-module:
backend+frontend). - Frontend: Angular 22 UI (
frontend/src/main/ng), built and bundled into the Spring Boot app's static resources. - Database: PostgreSQL.
- Cache: Redis.
- Deployment: Docker Compose (app, db, nginx, redis) on a Hetzner Cloud instance.
The application requires the following API subscriptions/keys, configured in the database so the app knows where to look:
- EODHD APIs — live stock and ETF prices (requires an active subscription).
- CoinGecko — crypto prices.
- Finnhub — fundamental data.
backend/ Spring Boot application (REST API, persistence, business logic)
frontend/ Spring Boot module that serves the Angular UI
src/main/ng/ Angular source (PrimeNG + ApexCharts)
docker/ Dockerfile, docker-compose.yml, nginx config and deployment notes
mvn clean install
This builds the Angular app and packages it together with the backend into backend/target/EOTM.jar.
cd frontend/src/main/ng
npm install
npm start # ng serve, for UI development
mvn -pl backend spring-boot:run
The app ships as a Docker image (thanicz/eotm) and is run via docker/docker-compose.yml, which wires up the app container together with PostgreSQL, Redis and an nginx reverse proxy (TLS via Let's Encrypt). See docker/Hetzner.txt for the current deployment notes.