Brian Oktavec
← ProjectsAtlas
Case studyAI / LLMPERSONAL

Atlas

A privacy-focused RAG platform that turns private documents and notes into a searchable AI assistant.

Problem

Answering a question buried somewhere in my own notes or documents meant manually searching through files — there was no way to ask in natural language and get a grounded answer back, and no interest in sending private documents to a third-party API to get one.

Architecture

n8n orchestrates both paths against a shared Qdrant vector store. An ingestion workflow extracts and normalizes document metadata, chunks content, generates embeddings, and writes them to Qdrant. A query workflow embeds the incoming question, runs semantic search against Qdrant, and passes the retrieved context to a locally hosted LLM to generate a grounded answer — with routing logic that falls back to external sources when the private knowledge base doesn't have enough context to answer well.

What I Built

An n8n-orchestrated ingestion workflow: metadata extraction, normalization, chunking, and embedding generation.
A Qdrant-backed vector store as the retrieval layer.
Semantic search matching queries to relevant chunks.
A locally hosted LLM generating answers grounded in retrieved context.
Routing logic between private retrieval and external sources when more context is needed.

Engineering Decisions

Qdrant, self-hosted, over a managed vector DB
Keeps document data fully private and avoids a recurring managed-service bill. Cost: operating and scaling it is on me.
Local LLM over a hosted API
Sensitive documents and their content never leave the host. Cost: more limited generation quality than a frontier hosted model.
Routing over a single retrieval path
Not every question is answerable from private documents. Always trying local-only either overreaches on thin context or refuses questions it could otherwise help with.

Challenges

Tuning chunking strategy — boundaries that preserve enough context per chunk without diluting relevance in semantic search.
Balancing retrieval precision against recall so the LLM gets the right context without noise.
Keeping local inference latency acceptable without a hosted model's compute budget.

Outcome

Actively used as a personal knowledge assistant; still under active development.

What I Learned

The retrieval and routing logic ended up mattering more to answer quality than the model itself — a mediocre model with the right context beats a better model with the wrong context.

Personal · Active