AI Chatbot
A retrieval-augmented AI assistant for a B2B SaaS analytics platform, built from an empty repo to production.

01 / Overview
Role: Architect / primary owner - built the standalone AI microservice from scratch, plus extensive backend ingestion and frontend UX work
Designed and built the retrieval-augmented AI assistant embedded in a B2B SaaS analytics platform, including a standalone Python microservice (FastAPI) built from scratch to handle the query/agent layer, alongside extensive work on the Kotlin ingestion pipeline and the Vue frontend. Documents, portfolio holdings, and contact data are ingested and chunked by the backend into tenant-scoped data stores; queries are handled by a Gemini-powered agent (via Google's Agent Development Kit) that calls a retrieval tool backed by Vertex AI Discovery Engine, applying access-control filtering and recency boosting before grounding its answer with cited sources. The architecture evolved significantly over its life - from an initial chunk-storage RAG approach to the current agent/tool-calling model - while adding session persistence, a feedback loop (response ratings, admin review tooling), a dedicated evaluation framework with baseline test questions to catch regressions, and substantial reliability and performance work (caching, retry handling, polling for long-running queries). Also owned the chat UX itself - source citations, markdown rendering, minimisable widget, loading states.
Built the RAG/agent microservice from an empty repo to production, solo
Architected the pivot from simple chunk-based retrieval to an agent/tool-calling model (Switch to Agent)
Multi-service architecture: Kotlin ingestion pipeline → tenant-scoped vector/search data stores → Python agent service → Vue chat UI
Built a dedicated evaluation framework with baseline test questions to catch quality regressions
Feedback loop: response ratings + admin review tooling for continuous quality improvement
Reliability/performance work: caching, retry handling, polling for long-running queries
02 / Problem
Users of a B2B analytics platform needed to ask questions across their documents, portfolio holdings and contacts and get grounded, cited answers, without seeing data from other tenants.
03 / Decisions
04 / Outcome
I took the Python agent service from an empty repo to production, alongside the Kotlin ingestion pipeline into tenant-scoped data stores and the Vue chat UI with source citations. Users rate responses, and admins review them through dedicated tooling to improve answer quality.
05 / Stack
- GeminiAI
- NuxtFrontend
- KotlinBackend
- PythonBackend
- VueFrontend
- GCPDevOps
- FastAPIBackend
- Vertex AIAI