Skip to content

InvestIQ is a portfolio analytics platform for investors and small advisory teams, aggregating accounts to compute performance, allocation, and risk metrics with interactive charts. An integrated AI agent delivers portfolio insights and automated reports for faster, data-driven decisions.

License

Notifications You must be signed in to change notification settings

nenadjakic/investiq

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

133 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

kotlin angular springboot docker postgresql

InvestIQ

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.

About

  • 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.

Tech stack

  • 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

Who this is for

  • 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.

What InvestIQ does (concise feature list)

  • 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.

First impression - what users will see in the UI (so it hooks them)

  • 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.

How the pieces fit together (simple architecture)

  • 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

Quick demo flow (what you can do in 10 minutes)

  1. Start a local Postgres (or use docker-compose).
  2. Apply schema scripts found in backend/data (see backend README).
  3. Start backend: ./gradlew :app-rest:bootRun (from backend/) - backend exposes API + OpenAPI. app-rest will apply migrations automatically on startup.
  4. Generate frontend client: cd frontend && npm run generate:api
  5. Start frontend: npm start and open http://localhost:4200
  6. Import a sample transactions CSV (or use seed data), open Dashboard.

Repository layout (helpful pointers)

  • 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/
  • 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

Getting started (developer quick commands)

  • Backend
cd backend
./gradlew :app-rest:bootRun
  • Frontend
cd frontend
npm ci
npm start

Outputs & reports

  • Backend artifacts (jars): each module produces build artifacts under backend/<module>/build/libs/ and there is an aggregated backend/build/libs/ for multi-module artifacts.
  • Test reports and coverage: unit test reports and jacoco coverage are generated at backend/<module>/build/reports/tests/ and backend/<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 by infrastructure Docker image / nginx)

Important repo-specific notes

  • 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.

Contributing & code quality

  • 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)

Links (quick)

License

This project is licensed under the MIT License. See the LICENSE file for details.

About

InvestIQ is a portfolio analytics platform for investors and small advisory teams, aggregating accounts to compute performance, allocation, and risk metrics with interactive charts. An integrated AI agent delivers portfolio insights and automated reports for faster, data-driven decisions.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published