Skip to content
akash.gr

Project case study · Akash GR

Building a Streaming AI Assistant for My Portfolio

A conversational way to explore my work, with the same attention to reliability as the rest of the site.

The problem

A portfolio asks visitors to piece together a person’s experience from several sections. Someone considering a collaboration may have a more specific question: what do I build, how do I approach product decisions, or how can they reach me?

The assistant on this site gives visitors another way to explore those questions. The written portfolio and articles remain available independently, so the conversation is an additional route into the work.

How the request moves through the system

  1. The visitor sends a message from the chat interface.
  2. A Next.js server route validates the input and checks request limits.
  3. The server builds a model request using curated profile context and conversation history.
  4. The response streams back as server-sent events and appears incrementally in the interface.
  5. If the request cannot finish, the visitor gets a clear message and direct contact options.

Keeping the assistant focused

The assistant is given written context about my experience and how I work. Instructions keep the conversation focused on that context. This is not a guarantee against mistakes: model responses still need judgment, and a direct conversation is the right place to confirm important details.

The model credentials stay on the server. The browser calls the application’s chat endpoint, which handles the provider request and turns its response into a format the interface can render.

Designing for interruptions

Streaming makes a response readable before it is complete, but it also creates a partial-response case. If a stream stops after some text has arrived, the interface preserves that text and adds a contact message instead of silently discarding the answer.

Request controls protect the public endpoint from excessive use. Technical errors stay in operational logs; visitor-facing messages stay understandable and link to LinkedIn and email.

What I checked

The implementation was checked for successful streaming, request-limit responses, unavailable-provider responses, and interrupted replies. The deployed chat was also exercised through the public website. These checks establish the expected behavior of those paths; they do not measure answer accuracy across every possible question.

The engineering lesson

The model call is only part of the feature. Input handling, context, streaming, partial failures, and a useful next step all shape the visitor’s experience. That is the part of AI product engineering I care about: carrying the interaction through to something a person can actually use.