Benedict.

Back to posts

Why I Wanted My Portfolio To Talk Back

8 min read
contents

Sections

I started this whole thing for a very normal reason: my portfolio was stale.

The content had not been updated in a while. The design was also one of those quick portfolio efforts that got the job done at the time, but did not really represent where I was anymore.

So the obvious task was simple: update the portfolio.

But around that period, I was also working quite intensively on agentic workflows. By that I mean systems where an LLM does not just answer, but decides what context, tools, or workflow steps it needs before it responds.

That made me look at my own website differently.

A portfolio can show what I built. It is much worse at answering why I built it, what was hard, and how I think.

That became the basic idea behind BENEDICT.EXE: what if my portfolio had a conversational layer?

Not a generic chatbot slapped onto a website. Not a support bot. Not a “how can I help you today?” wrapper over three pages of content. More like a terminal where people could ask about my work, my writing, my projects, my photos, my thoughts, and eventually get something that felt somewhat representative of me.

Pixel-art engineering notebook illustration showing static portfolio cards becoming personal context and then the BENEDICT.EXE terminal chat.
The original idea in one picture: static portfolio material, shaped into personal context, then exposed through a terminal chat surface.

The goal was not to replace the website. The goal was to add a new surface for the kinds of questions a website does not know how to pre-write.

What a static portfolio cannot say#

Most portfolios answer a few standard questions pretty well:

PageWhat it answersWhat it misses
ResumeWhat did this person do?What was difficult, messy, or meaningful
ProjectsWhat did this person build?Why these tradeoffs, why this direction
BlogWhat has this person written about?How different ideas connect across time
PhotographyWhat does this person like to capture?What those images say about taste and life

That static layer is still useful. I did not want to throw it away.

But I cared more about the layer underneath:

  • how I think through problems
  • what tradeoffs I care about
  • what I struggled with while building things
  • what I enjoy outside formal work
  • what my taste and personality look like across projects, writing, food, photos, robotics, and life

Those things usually do not fit cleanly into a one-page resume.

Natural language changes the interaction. Someone can just ask:

what does Benedict like to do in his free time?
what kind of engineering problems does he enjoy?
what was hard about his robotics work?
how does he think about ambition and balance?

Those questions do not necessarily deserve their own pages. But they deserve answers.

That was the part that felt new to me. A few years ago, a portfolio was mostly a polished static artefact. You put your best work somewhere, made sure the page loaded quickly, and hoped the right person saw the right section.

Now, language models make it possible to synthesise information across many small things I have written down and present it as a coherent answer.

That is quite amazing.

The first version was not deep#

The first version of BENEDICT.EXE did not have some magical memory of my life.

It had simple stuff.

The initial knowledge base was mostly normal portfolio information translated into text: what I studied, what I am studying now, past experiences, projects, interests, and basic facts about myself. The more personal material came much later, when I started adding owner-knowledge interviews, worldview notes, food and travel notes, and blog-derived facts.

The first pipeline was basically this:

Portfolio content
  -> text documents
  -> retrieval context
  -> model response

That was enough to make the first version feel cool, but not enough to make it feel like me.

The replies were correct in the boring sense. If someone asked what I studied, it could answer. If someone asked about a project, it could pull from the project notes. But the conversations were still one-dimensional. It felt like a chatbot with access to my portfolio, not a conversational version of me.

Still, there was something there.

Even if it was shallow, it changed the interaction from browsing to asking.

Visitor reads what I chose to display.

The structure is fixed before the question exists.

That difference matters.

Who I am, not only what I am#

The more I worked on it, the clearer the real goal became.

My old portfolio could show what I was:

  • robotics student
  • software engineer
  • builder
  • project person
  • photography enjoyer
  • blog writer

But I wanted the new portfolio to say more about who I am:

  • how I think
  • what I care about
  • how I make decisions
  • why certain work feels meaningful to me
  • what parts of life I keep coming back to

That is much harder to express in a static portfolio.

Not impossible, of course. You can write essays. You can design better case studies. You can add personal sections. But the moment you choose a fixed structure, you are still deciding ahead of time which questions matter.

A conversational layer lets the visitor bring the question.

That is useful for recruiters, but I did not want to optimise only for recruiters. Friends could use it. Random visitors could use it. People who found my writing could use it. Someone curious about robotics, food, photography, or my work could just ask.

The point was not a hiring funnel.

The point was a more flexible way to understand a person.

The first version was cool, but not enough#

The early version proved the idea, but it also exposed the hard part.

It is easy to make a model answer a question.

It is much harder to make the answer:

  • grounded in actual information about me
  • coherent across follow-up turns
  • fast enough that people do not leave
  • natural enough that it does not feel like a corporate chatbot
  • safe enough that it does not answer things it should not answer
  • personal enough that it feels like my portfolio, not just an AI wrapper

At the start, I thought the main challenge was “can I make my portfolio conversational?”

That turned out to be the easy question.

The harder question was:

How do I make the conversational layer feel good enough that it deserves to exist?

Because if the chat is slow, it does not matter that it is clever.

If the answer is generic, it does not matter that it is technically powered by AI.

If it misses the knowledge I already gave it, it feels worse than a static page.

And if it sounds nothing like me, then it is not really a digital me. It is just a model talking about me.

That last part is still not solved.

The current system can answer with correct and relevant information about me much better than the first version. But I would not say it truly speaks like me. Frontier models still tend to produce very proper, polished answers. Even when you tell them to sound more Singaporean or more casual, it can feel forced.

My longer-term stretch goal is different: fine-tune or run a local model that can actually learn how I speak and reply, not just retrieve facts about me.

That is for later.

The first big problem was more basic:

BENEDICT.EXE was too slow.

And a slow conversational portfolio is not a nice extra feature. It is a liability.

Next in Building BENEDICT.EXEThe First Rule of AI Latency Is Measuring the Wait10 min readMy chat worked, but it felt broken. The fix started with measuring the wait users actually felt.