Conversational AI · 2026

Claude-Powered Portfolio Assistant

A production portfolio chatbot that evolved from rule-based conversational AI into a Claude-powered assistant, with secure API routing, grounded responses, and a deliberately constrained system prompt.

A portfolio can show projects and experience, but it still asks the visitor to navigate everything themselves.

I wanted to explore whether conversational AI could make that experience more useful by letting a recruiter ask direct questions about my background, projects, and technical skills without turning the site into a generic chatbot demo.

The challenge became: how do you build an assistant that is useful, accurate, secure, and grounded in a limited set of facts about one person?

I built and iterated the assistant across three architectures, then implemented the current Claude-powered version with a bounded system prompt, session context and a Cloudflare Worker protecting the API credential.

The primary user is a recruiter, hiring manager, or portfolio visitor who wants a quick answer without reading every page.

That user needs concise, trustworthy information about experience, projects, skills, and links. They do not need the assistant to speculate, invent achievements, or behave like a general-purpose chatbot.

That constraint shaped both the system prompt and the architecture.

Conversational UX is only useful if the information is trustworthy. A smooth answer is not enough if the model can invent details.

The API integration is part of the product. Where the key lives, how requests are routed, and how errors are handled matter just as much as the model response.

Different AI approaches create different maintenance costs. Intent-based systems require predefined flows, while an LLM reduces intent maintenance but increases the importance of prompt boundaries and grounding.

01

Move from intent trees to grounded conversation

The project began with Watson and Dialogflow CX, then moved to Claude when predefined intent routing became too fragile for open-ended recruiter questions.

IBM WatsonIntents and entities
Dialogflow CXMulti-turn routing
Claude APIGrounded natural language
The architecture changed when the interaction model no longer matched the user need.
02

Answer recruiter questions from portfolio facts

A bounded system prompt gives the assistant Madiha’s experience, skills and project context. Visitors can ask naturally without the response drifting beyond the documented portfolio.

Madiha’s Portfolio Assistant · Example
What support systems has Madiha built?
Madiha has built the Engineering Escalation Engine, Feedback Loop and Support Ticket Analyser. Together they cover evidence-led escalation, product feedback synthesis and reusable knowledge capture.
Illustrative conversation using facts already documented in the portfolio.
03

Keep the Anthropic key out of the browser

The front end sends each question to a Cloudflare Worker. The Worker applies the server-side credential and CORS restrictions before forwarding the request to Anthropic.

Portfolio browserQuestion and session context
Cloudflare WorkerSecret and origin controls
Anthropic APIGrounded response
The browser never receives the API credential.
04

Say when the answer is not available

The prompt instructs the assistant to avoid inventing personal or professional details and to direct visitors to Madiha when the requested information is outside its knowledge.

Madiha’s Portfolio Assistant · Example
What salary is Madiha looking for?
That information is not included in the portfolio. Please contact Madiha directly if you would like to discuss the role.
Illustrative fallback showing the assistant’s deliberately limited scope.

Why move away from intent-based conversational AI?
The portfolio use case has a wide variety of natural-language questions but a relatively small factual domain. Maintaining many explicit intents added complexity without improving the visitor experience.

Why put the portfolio facts in the system prompt?
The goal was not open-ended knowledge. The assistant needed a defined source of truth and clear boundaries around what it should and should not answer.

Why use a Cloudflare Worker?
The API key could not safely live in the browser. A serverless proxy created a clean boundary between the public client and the private credential.

Why tell the model to admit when it does not know?
For a portfolio assistant, an invented answer is worse than no answer. The fallback behaviour is part of the product design, not an error state to hide.

The project evolved through three distinct approaches: IBM Watson, Dialogflow CX, and finally a Claude-powered assistant secured by Cloudflare Workers.

The production version can answer portfolio questions in natural language, preserve conversation context during a session, stay grounded in a bounded set of facts, and keep the Anthropic credential off the client.

The most important outcome was the architecture shift. What began as a chatbot experiment became a practical lesson in how AI features depend on security, prompt design, scope control, and fallback behaviour.

If I were measuring it as a real product, I would track:

Questions answered successfullyFallback rateContact-page click-throughConversation lengthIncorrect-answer reports

I initially treated the chatbot as a learning project about conversational AI. The biggest lessons ended up being less about the model itself and more about the system around it.

Moving from Dialogflow to Claude reduced one kind of complexity, but introduced a different set of responsibilities around grounding, security, and prompt boundaries.

If I continued the project, I would separate portfolio data from the system prompt and load it from a maintained structured source so updates to experience and projects do not require editing the assistant logic itself. I would also add lightweight evaluation cases for factual accuracy and fallback behaviour.

Security is part of AI product design

A useful model integration is still a bad product if secrets are exposed or request boundaries are unclear.

Grounding matters more than fluency

The assistant should prefer a bounded, accurate answer over an impressive but invented one.

Architecture changes the maintenance model

Intent-based and LLM-based assistants solve different problems and create different operational costs.

Fallback behaviour is a product decision

Knowing when not to answer is part of building a trustworthy assistant.

Anthropic Claude

Natural-language responses and conversation handling

Cloudflare Workers

Serverless proxy and secret isolation

HTML, CSS, JavaScript

Custom chat interface and session logic

GitHub Pages

Portfolio hosting and deployment

Dialogflow CX

Earlier intent-based prototype

IBM Watson

Initial conversational AI learning environment

Try it yourself

Try the live assistant using the chat button in the bottom-right corner. Ask about my enterprise support experience, technical skills or any project in this portfolio.

Powered by Claude · Secured by Cloudflare · Built as part of this portfolio

From user problem to working AI product

This project demonstrates how I approach AI product development: start with a real user problem, build the complete workflow and strengthen it through accessibility, security and trust.

PA

Madiha's Portfolio Assistant

Ask about my experience, skills, and projects