I added an "Ask my CV" form to my website. The idea was small: a recruiter can ask how long I have worked with Rust, what I built at G2A or which kinds of systems I have worked on and get a direct answer.

No, it did not need RAG

That did not require a general chatbot, an agent or a vector database wearing a very serious architecture diagram.

One source and nowhere else

The assistant receives the same structured CV content that powers the website. It may answer from that source and nowhere else. When the information is missing, it says so and points to the contact form. This refusal is more useful than a beautifully written guess about an employer, date or technology that only looks plausible.

One endpoint was enough

One serverless endpoint and one lightweight model were enough. The prompt asks for short answers, third-person wording and a clear refusal outside the supplied material. There is no conversation memory because the feature does not need one.

Small endpoint, real guardrails

The public endpoint still needed some guardrails: same-site checks, rate limiting, a honeypot, input validation, blocked URLs and prompt-injection patterns, plus a bounded response. None of this makes a tiny portfolio widget invincible. It keeps the cost and attack surface appropriate to what it is.

The architecture diagram stayed small

I considered retrieval-augmented generation for roughly the time it took to say the full name out loud. The complete knowledge source fits comfortably in one request and changes rarely. Embeddings, chunking and a vector store would add more failure modes without finding better facts.

The final version stayed small

So the final version stayed deliberately small: one source of truth, one bounded model call and one honest way to say "this is not in the CV".

Sometimes the best AI architecture is the one that refuses to become an AI platform.