Frontend experience
A modern React-based UI provides a conversational interface, portfolio views, and explainable AI responses tailored for investment workflows.
This portfolio project showcases an AI-powered portfolio management application designed to enhance investment decision-making through
The platform is deployed on AWS with clear separation across edge routing, API access, application services, data persistence, observability, and management tooling.
A modern React-based UI provides a conversational interface, portfolio views, and explainable AI responses tailored for investment workflows.
Python services and Spring Security based authorization separate business capabilities cleanly while enforcing secure access boundaries.
LangGraph drives retrieval, scoring, reasoning, and generation so the system can select the most fitting information before answering.
Infrastructure is defined as code using Terraform, allowing reproducible environments, controlled changes, and clear separation between application evolution and cloud provisioning.
Terraform provisions edge routing, API components, service infrastructure, database resources, and monitoring primitives in a repeatable way.
CloudTrail, CloudWatch, and Trusted Advisor support compliance visibility, cost awareness, and production health review.
AWS-native deployment patterns allow the project to evolve from portfolio showcase to production-grade application architecture.
The ingestion service uses the CryptoNews API to fetch the latest market news every 15 minutes. Incoming articles are chunked, enriched with metadata, and written into Pinecone for retrieval by the LangGraph workflow.
The platform uses a retrieval-and-reasoning graph to normalize user requests, gather candidate documents, score relevance, and decide whether generation should continue or fall back to web search.
Graph stages shown here: normalize input, retrieve, grade documents, generate, end, and web search fallback.
User stories are connected to secure authorization, validation, rate limiting, consistent error contracts, and observability requirements. The goal is not only correctness, but also operability in production.
{
"type": "security",
"title": "Unauthorized access to a resource",
"status": 401,
"detail": "The user: cf5c709c-c68e-405b-852b-19b6f7fc1bc3 has no access to the resource: 1f95abbb-127f-4f0e-85df-681665f9849b",
"instance": "/api/portfolios/v1/detail/1f95abbb-127f-4f0e-85df-681665f9849b",
"service": "portfolio service",
"trace_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"priority": "HIGH",
"errorCode": "ERR-PORT-021",
"context": {
"userId": "cf5c709c-c68e-405b-852b-19b6f7fc1bc3",
"resource_type": "portfolio",
"resource_id": "1f95abbb-127f-4f0e-85df-681665f9849b"
}
}
MCP-based services extend the platform beyond retrieval by adding specialized capabilities for indicators, price prediction, and future analytical agents. This makes the assistant layer composable and domain-aware.