Emmanuel Okeke

[0%] 6/7

← cd /blogAI

Adding an AI Chatbot to My Portfolio

$ cat --info "ai-chatbot-portfolio.mdx"

> published: 2026-05-15 | read_time: 2 min read | category: ai


The Idea

Most portfolio sites are passive — visitors read static content and leave. I wanted mine to be conversational. The goal: a chatbot that knows my resume, projects, and experience, and can answer recruiter questions naturally.

Architecture

The chatbot uses a retrieval-augmented generation (RAG) approach:

  1. Document ingestion — My resume, project descriptions, and about page are chunked and embedded using OpenAI's text-embedding-ada-002
  2. Vector storage — Embeddings stored in a Pinecone index for fast similarity search
  3. Query pipeline — When a visitor asks a question, LangChain retrieves the 3 most relevant chunks and feeds them as context to GPT-4
  4. Response generation — GPT-4 synthesizes an answer grounded in my actual experience

The Prompt Engineering Challenge

The hardest part wasn't the infrastructure — it was making the bot sound like me without hallucinating. I use a system prompt that establishes personality and strict boundaries:

  • Answer only from provided context
  • If unsure, say so rather than inventing
  • Keep responses concise (2-3 sentences for simple questions)
  • Match my casual-but-technical communication style

Results

The chatbot handles questions like "What's your experience with React?" or "Tell me about your most complex project" with accurate, contextual answers. It reduces the friction between a recruiter landing on my site and understanding my fit for a role.

What I'd Do Differently

I'd add conversation memory earlier. The current implementation treats each message independently — it can't handle follow-ups like "Tell me more about that." Adding a conversation buffer with LangChain's ConversationBufferMemory is the next improvement.

See related project →

← Previous

Why I Built TinyOps

6 of 7

Next →

I Shipped a Rule Engine. Then I Found Its Identical Twin.