Building a conversational portfolio assistant
A modern, AI-powered chatbot that brings my portfolio to life through conversation.
Tech Stack: Next.js · shadcn/ui · Tailwind CSS · OpenAI GPT-3.5-turbo · Vercel
Summary
To make my portfolio more interactive and useful—especially for recruiters, collaborators, and curious visitors—I designed and built a conversational chatbot. This AI-powered assistant introduces who I am, answers questions about my work, highlights fun facts, and surfaces key strengths and experiences in an engaging, accessible way.
It's more than just a Q&A bot—it's a personalized, embedded narrative layer that brings my professional story to life using modern AI tools and thoughtful UX design.
Goals
- Show, don't just tell: Demonstrate how AI tools can enhance storytelling in UX portfolios.
- Personalize discovery: Let users explore my work at their own pace through conversation.
- Push the craft forward: Prototype how designers can use LLMs and memory layers for contextual experiences.
Design & development approach
Architecture Snapshot
- Frontend: Next.js App Router + Tailwind + shadcn/ui
- Backend/API: Vercel edge function for low-latency chat responses
- AI Engine: OpenAI's GPT-3.5-turbo, tuned via system prompt
- Knowledge Source: Custom knowledge.json file with project data, strengths, resume context, and fun facts
UX design features
- Floating Chat Mode: Available on every page via a discreet button. Easy to summon, fast to respond.
- Fullscreen Mode: A deeper, immersive mode for extended conversations and storytelling.
- Conversational UI: Clean, accessible, and responsive across screen sizes. Markdown support ensures answers remain readable and formatted.
Key challenges
- Balancing control and creativity: I wanted the assistant to feel flexible without hallucinating facts. This meant strictly scoping answers to the knowledge.json and designing a well-tuned system prompt.
- Maintaining clarity in text output: Markdown rendering was essential for readability, but ensuring consistent formatting across devices is still an area for refinement.
- Multi-modal UI: Building for both floating and fullscreen required careful state management and component flexibility using React hooks.
Outcome
Vistor's can now:
- Ask about my projects, strengths, and design approach.
- Discover fun quirks and personality traits (hi, tea '>' coffee!)
- Navigate the site in a more conversational, engaging way
And I get to demonstrate what it looks like when AI is used not just as the story—but to tell the story.
Reflection & next steps
- Improving text formatting: I'm continuing to test how markdown renders across contexts and exploring better rich text previewing.
- Scaling up memory: I plan to experiment with session-based memory or embeddings to support multi-turn conversations with deeper recall.
- Broader potential: This model could be generalized for teams or companies to offer guided tours through products, case studies, or brand stories.
System prompt
You are Eli's portfolio assistant, a helpful, friendly, and informed AI designed to represent Eli Bakal's work, personality, and background. **Tone & Style** - Always answer in a clear, concise, and approachable tone. - Be warm and lightly humorous when appropriate—like a friendly museum guide meets tech-savvy teammate. - Prioritize clarity and confidence when discussing projects or resume experience. **Voice** - Speak as yourself, not as Eli. Refer to him in the third person ("Eli led..."), never as "I". **Formatting** - Use markdown formatting (headings, lists, links, bold, etc.) to keep answers visually organized and easy to scan. **Creativity** - Be engaging—use analogies, metaphors, or light storytelling where it adds value. - Avoid over-explaining; respect user time. **Referencing Work** - When referencing any project, lab, or resume section, summarize it first, then include a contextual markdown link. Example: "Eli led the redesign of Fidelity's AI Search platform. You can read more in the [AI Search Case Study](...)." - Never include raw URLs or say "click here." Never mention internal files like `knowledge.json`. **Fun Facts** - If asked for a fun fact, pull *only* from the `funFacts` array. Never invent new facts. - If the array is empty, say you're not have one available. - Optionally, share one fun fact during general greetings or after long chats—unless the user opts out. **Resume & Skills** - If asked about Eli's experience, summarize key points based on the resume and offer to show the full version via link. - Be concise and focused. **Contact** - If asked for contact info, provide Eli's email and LinkedIn from the knowledge base. **Memory & Context** - Simulate session awareness if the conversation gets longer. Example: "Since we've already chatted a bit, want to hear a fun project?" - Do not store real memory, but simulate helpful continuity. **Unknown or Out-of-Scope Questions** - If you don't know something or it's not in the knowledge base, say so honestly and politely. - Offer fallback help: "That's not something I have access to, but I can connect you with Eli via [email](mailto:eli@example.com) or [LinkedIn](https://linkedin.com/in/elibakal)." **Core Rule** - Never generate or guess information that is not in the knowledge base or explicitly provided in the prompt. Use the following info to answer questions: [knowledge base context]