InvestIQ is an investment portfolio management platform that helps investors and advisors track multi-asset portfolios, understand performance and risk. This repository contains the application backend (Kotlin/Spring Boot), the frontend (Angular/TypeScript) and the infrastructure artifacts used to run the system locally or in production. This README is the first place a user or contributor sees - it explains what the product does, what users will see in the UI, and how the pieces fit together so interested people continue to the module READMEs.
- For busy investors and small advisory teams who need clear, data-driven portfolio oversight, InvestIQ aggregates positions and transactions across accounts, computes portfolio-level analytics (returns, allocation, risk), visualizes them with interactive charts.
- Backend: Kotlin, Spring Boot, Spring Data JPA, Spring Scheduler, Flyway, Gradle
- Frontend: TypeScript, Angular, tailwind, ngx-echarts, npm
- Infrastructure: Docker, docker-compose
- API contract: OpenAPI
- Individual investors who want better visibility into their allocations and performance.
- Developers and data engineers who want to extend analytics, add new data sources, or add integrations with broker/exchange APIs.
- Ingests and normalizes market price/time-series and transaction data.
- Tracks portfolios, accounts, holdings and transactions across assets.
- Computes performance, cumulative returns, drawdown, volatility and allocation breakdowns.
- Displays interactive, exportable charts and tables in the frontend (ECharts via ngx-echarts).
- Runs scheduled ingestion and recomputation jobs.
- A modern dashboard with:
- Portfolio summary: total current market value, change for different ranges
- Allocation visualization: donut/pie showing asset-class and currency allocation
- Performance chart: interactive time-series with overlays, zoom and tooltips
- Holdings table: sortable list with market value, unrealized P/L, allocation %
- Per-asset detail panel: price history, transactions, position analytics
- The UI is built using Angular and Tailwind to keep a professional look.
- Frontend (Angular SPA)
- UI, charts, API client generated from OpenAPI
- Backend (Kotlin, Spring Boot)
- app-rest: REST API & OpenAPI spec
- scheduler: periodic ingestion and recalculation jobs
- app-cli: batch / import
- agent: lightweight standalone AI agent/service that performs specialized tasks and can run independently or in container
- common / service: shared domain logic and analytics
- Data
- PostgreSQL for normalized time-series, transactions and derived analytics
- PL/pgSQL routines live in backend/data and top-level data/ for analytics performance
- Infrastructure
- docker-compose
- Start a local Postgres (or use docker-compose).
- Apply schema scripts found in backend/data (see backend README).
- Start backend: ./gradlew :app-rest:bootRun (from
backend/) - backend exposes API + OpenAPI. app-rest will apply migrations automatically on startup. - Generate frontend client: cd frontend && npm run generate:api
- Start frontend: npm start and open http://localhost:4200
- Import a sample transactions CSV (or use seed data), open Dashboard.
- backend/
- agent/ - lightweight AI agent service — standalone Spring Boot module; see
backend/agent/README.md - app-rest/ - HTTP API (controllers, OpenAPI)
- app-cli/ - CLI utilities (import CSV data)
- scheduler/ - scheduled ingestion & recompute jobs
- common/, service/ - domain logic
- data/ - SQL, PL/pgSQL scripts and sample data
- build.gradle.kts, gradlew - Gradle wrapper present under backend/
- agent/ - lightweight AI agent service — standalone Spring Boot module; see
- frontend/
- Angular 21 app
- package.json includes: "generate:api" script that uses openapi-generator-cli and ngx-echarts and Angular Material
- key files: frontend/src/dashboard, frontend/src/custom-theme.scss, frontend/openapi.json (if present)
- infrastructure/
- docker-compose.yml, k8s manifests or CI helpers (inspect directory to see which apply)
- data/ - additional SQL / sample files used across modules
- Backend
cd backend
./gradlew :app-rest:bootRun- Frontend
cd frontend
npm ci
npm start- Backend artifacts (jars): each module produces build artifacts under
backend/<module>/build/libs/and there is an aggregatedbackend/build/libs/for multi-module artifacts. - Test reports and coverage: unit test reports and jacoco coverage are generated at
backend/<module>/build/reports/tests/andbackend/<module>/build/reports/jacoco/respectively. A quick way to generate reports for all backend modules:
cd backend
./gradlew test jacocoTestReport- Frontend production build:
frontend/dist/(used byinfrastructureDocker image / nginx)
- OpenAPI-driven workflow: update backend controllers/DTOs → ensure OpenAPI spec is published by app-rest → run frontend/npm run generate:api to regenerate typed client.
- SQL and PL/pgSQL scripts are tracked under backend/data and top-level data/ - treat these scripts as versioned artifacts and apply them via a migration process in staging/production.
- Gradle wrapper is available in backend/ so use ./gradlew for consistent builds.
- Branch: feature/ or fix/
- PRs: explain the feature, list breaking changes, include screenshots for UI changes
- Tests: run backend unit tests with ./gradlew test and frontend tests with npm test
- Linters: use ktlint / detekt for backend and ESLint / Prettier for frontend (Prettier config in package.json)
- backend README: ./backend/README.md
- frontend README: ./frontend/README.md
- infrastructure README: ./infrastructure/README.md
- Repo: https://github.com/nenadjakic/investiq
This project is licensed under the MIT License. See the LICENSE file for details.