growth-os — README.md
README.md
eval_framework.py

#Personal Growth OS

AI coaching platform with a RAG engine

##Problem

Generic LLM coaching advice isn't grounded in any real curriculum, and a naive integration between a mobile client, a business-logic backend, and a separate Python inference service tends to break the moment one of those pieces is slow or unavailable. Personal Growth OS grounds every response in a curated knowledge base via retrieval-augmented generation, and wraps the Java-to-Python bridge in circuit breakers, retries, and timeouts so a failure in one service degrades gracefully instead of cascading.

##Architecture / How it works

The Flutter client talks to a Spring Boot modular monolith, which includes an AI gateway layer built on Resilience4j — circuit breaker, retry, and timeout policies protect the Java API from instability in the downstream Python service. That gateway calls a FastAPI RAG engine, which serves DeepSeek LLM responses grounded in a curated knowledge base stored in Qdrant, alongside PostgreSQL and Redis.

Hand-sketched whiteboard diagram of Personal Growth OS service topology: Flutter client, Spring Boot modular monolith with a Resilience4j AI gateway, FastAPI RAG engine, backed by Qdrant, PostgreSQL and Redis

fig. 1 — service topology, sketched on a whiteboard

The knowledge base itself comes from a separate ingestion pipeline: raw transcripts go through spaCy cleaning, semantic chunking, LLM-based extraction, a validation step, and finally vector indexing into Qdrant.

Hand-sketched whiteboard diagram of the transcript-to-knowledge-base ingestion pipeline: spaCy cleaning, semantic chunking, LLM-based extraction, validation, vector indexing into Qdrant

fig. 2 — transcript-to-knowledge-base pipeline

##Tech Stack

yaml
1
2
3
4
5
6
7
8
9
10
stack:
client: flutter
backend: spring-boot
resilience: resilience4j
inference: fastapi
llm: deepseek
vector-db: qdrant
database: postgresql
cache: redis
nlp: spacy

##Key Engineering Decisions

md
1
2
3
- [x] Resilience4j AI gateway: circuit breaker + retry + timeout between Java and Python
- [x] custom retrieval eval framework: precision/recall vs. human-labeled queries
- [x] multi-stage ingestion: spaCy -> chunking -> LLM extraction -> validation -> indexing

The eval framework is the differentiator here — retrieval quality is measured against human-labeled queries and used to drive measurable before/after improvements, rather than tuning the RAG pipeline by feel.

##Links

⎇ main Growth OS · Flutter · Spring Boot · FastAPI UTF-8