01 / Overview
What it is and the problem it solves
A static resume forces every interviewer into the same level of detail and does not demonstrate how I build a generative AI product.
Public product for exploring my professional profile. Sessions live in one instance’s memory; horizontal scaling would require shared storage.
02 / How it works
How the system works
- 01
A structured catalogue and controlled Markdown documents; the model must select sources before drafting an answer.
- 02
FastAPI maintains ephemeral server-side sessions, limits history and streams NDJSON events for status, text, metrics and errors.
- 03
A FIFO queue with two concurrent generations, per-IP limits and a monthly budget to protect availability and cost.
- 04
Incremental output sanitisation, HttpOnly cookies and aggregate analytics only after consent.
03 / My contribution
What I did
I designed and developed the backend, document retrieval, model tools, streaming, sessions, interface, security, tests and deployment.
Main decisions
- Keep conversation history on the server and limit context sent to the model.
- Require source selection before answering and sanitize streamed output.
- Control concurrency, queueing and request rate to protect cost and availability.
04 / Validation and outcome
How I checked the result
The suite verifies chat contracts, document selection, sessions, reset, cancellation, continuation after incomplete responses, concurrency, queueing, rate limits, budget controls and personal-data sanitisation. It also tests the CMS adapter and its last-known-good copy.
Project outcome
- Contextual conversations with three detail levels and cancellation.
- Recoverable partial answers and error references without leaking internals.
- Docker service deployed with optional consent-based analytics.
05 / Lessons learned
What I learned during development
Publishing a chatbot means designing the system around the model: what it may read, how much context it receives, how cost is controlled, what happens when it fails and what information must never appear in an answer.