I Built an AI That Knows Me (and Lives on This Site)
If you're reading this on my portfolio, there's a little chat button in the corner. Click it and you can ask it about me — my projects, my experience, why I left aerospace for AI — and it'll answer like someone who actually read the whole site. Because, in a sense, it did.
I didn't add it as a gimmick. I added it because a portfolio is a one-way broadcast, and I wanted a visitor — a recruiter, a fellow engineer, a curious stranger — to be able to ask. But the moment you put an LLM on your own site with your own name on it, you inherit a very specific fear: what if it makes something up about me?
This is the story of building something small, useful, and — most importantly — honest.
The one rule: never invent me
Most chatbot failures are funny. A chatbot on your professional portfolio inventing a job you never had, or a degree you don't hold, is not funny — it's a credibility landmine. A recruiter who catches the assistant fabricating one fact will distrust the entire site.
So the whole design started from a single non-negotiable rule: the assistant may only say things that are true about me, and if it doesn't know, it says so. Everything else — the personality, the speed, the nice little navigation buttons — is downstream of that.
Grounding it in a single source of truth
The trick to a no-hallucination assistant isn't a cleverer model. It's giving the model the facts and forbidding it from going beyond them.
My entire site already runs off one structured content file — projects, experience, education, research, certifications, all of it. Rather than maintain a separate knowledge base for the chatbot (and inevitably let the two drift apart), I had the assistant read from the same data the pages render from. When I update a project, the page changes, the chatbot's knowledge changes, and they can never contradict each other. One source of truth, two consumers.
That data gets serialized into a single document and handed to the model as its system prompt, with strict instructions: answer only from this; if it's not in here, say you don't know and point them to my email. No web access. No improvisation. The model isn't being asked to know things — it's being asked to read and speak well.
Personality is a feature, not decoration
A grounded bot can still be a boring bot. The instructions that prevent hallucination can, if you're not careful, also strangle every ounce of warmth out of it.
So I spent real effort on voice. It speaks about me in the third person, warmly, like a colleague who's genuinely enthusiastic about the work — short by default, never a wall of text, an occasional well-placed emoji. The greeting doesn't say "How can I help you today?" It points at the interesting stuff on purpose: ask about the jet-engine code, the Springer paper, or the project I'm proudest of. The goal is for the first message to make you curious instead of making you do the work of figuring out what to ask.
Tone, it turns out, is just more instructions — written as carefully as the safety rules.
The detail I'm quietly proud of: it can walk you there
Answering a question is fine. Answering it and offering to take you to the right page is better.
I taught the assistant to end relevant replies with little navigation markers — a tiny private vocabulary only it and my front-end share. The front-end strips them out of the visible text and renders them as clickable buttons. Ask "what has he built?" and you get a friendly summary plus a button straight to the projects page. Ask how to get in touch and it surfaces a jump to the contact section.
It's a small thing. But it turns the chatbot from a dead-end Q&A box into something that actually moves you through the site — an assistant, not just an answer machine.
What it taught me
Building this was a miniature version of every production LLM lesson I care about, compressed into a weekend project:
- Grounding beats cleverness. A modest model with the right facts and tight constraints outperforms a brilliant model left to improvise.
- One source of truth or none. The instant your knowledge base forks from your real content, it starts lying — slowly, then all at once.
- Constraints and character aren't enemies. You can be strictly factual and genuinely pleasant. Both are just prompt design.
- "I don't know" is a feature. The willingness to decline is what makes the answers you do get trustworthy.
The assistant in the corner of this site is small. But it's honest, it's helpful, and it never says anything about me I wouldn't say myself. For something representing me to the world, that was the entire point.
Go on — ask it something.
Tags: LLMs, RAG, Chatbots, Next.js