I've never really liked developer portfolios.
Most of them follow roughly the same structure:
- short introduction
- list of technologies
- project cards
- work experience
- contact button
There's nothing particularly wrong with that.
It just feels a little strange to me that I have to decide upfront which parts of my background a visitor is supposed to care about.
So I rebuilt mine.
Instead of landing on a bunch of cards, you're basically greeted with:
Hi, I'm Aaron. Ask me anything.
You can try it here: https://xlogic.sh/
Why I changed it
Over the years I've built quite a few things, worked with a bunch of technologies, written about projects, lived abroad, changed interests, and accumulated a lot of random history.
Trying to squeeze that into a normal portfolio always felt arbitrary.
Do I put the biggest project first?
The most technically impressive one?
The most recent one?
Do people visiting my site even care about the same things I think they care about?
I figured it would be more interesting if the visitor could decide.
So now you can ask things like:
- What has Aaron built?
- What does he actually do at work?
- Which projects was he most excited about?
- What technologies does he prefer using?
- What did he build before working professionally?
- Why did he stop playing competitive games?
- What kind of work does he enjoy?
The rest of the website still exists, but the conversation became the main interface.
The part I liked most
The interesting thing for me wasn't really adding a chatbot.
It was changing how the site is navigated.
A traditional portfolio works like this:
Visitor -> Navigation -> Projects / About / Experience -> Information I decided to put there.
Mine is now closer to:
Visitor -> Question -> Relevant information
That feels much more natural for a personal site.
Especially when the amount of information becomes larger than what you'd reasonably put on a homepage.
What's behind it
Most of the information about me and my projects lives in Markdown files.
They're split up into general information and project-specific information.
When someone asks a question, the backend figures out what information is actually relevant, retrieves it, and uses that to answer.
The important part was avoiding the obvious bad solution:
send everything I've ever written about myself with every request
That would be slow, expensive, and probably make the answers worse.
So the flow is roughly:
Question -> Figure out what context is needed (personal information/memories/projects) -> retrieve that relevant information -> generate response -> stream it back to the site.
The frontend itself is built with SvelteKit.
A lot of the backend orchestration currently runs through n8n.
Then I launched it
Yesterdat I posted the first version on Reddit.
And people immediately broke it.
Which, in retrospect, was actually pretty useful.
The site itself was hosted on Netlify, including the endpoint handling the conversation.
That worked perfectly during development.
Then real people started asking much more complicated questions than I had.
Some requests took long enough that the Netlify function hit its execution timeout.
So people would open the site, ask something interesting, wait for an answer...
...and the request would just die.
Not exactly the launch experience I had in mind.
So I moved the backend
The frontend is still hosted normally, but the actual chat endpoint is now running on infrastructure I control.
That means I'm no longer depending on a short-lived serverless function for requests that can occasionally take longer.
The architecture is now roughly:
SvelteKit frontend -> Self-hosted API -> n8n workflow -> Streaming response
It's also been a good reminder that testing something yourself and having ten strangers click it are very different things.
Reddit basically became my load test.
There's still plenty to improve
The biggest thing I'm working on now is making the answers more consistent.
Since the site is representing an actual person, it's important that it knows the difference between:
- something that's definitely true
- something that can reasonably be in ferred
- something it simply doesn't know
I'd much rather have it say "I don't know", than confidently make something up about me.
I'm also still tweaking retrieval, latency, and how much context each question actually needs.
Is this excessive for a portfolio?
Definitely.
A static site would be easier, faster, cheaper, and much harder to break.
But I also think personal websites are one of the few places where overengineering something is completely justified.
There doesn't need to be a business case. I just wanted to build a portfolio that felt more like me.
If you want to try it: https://xlogic.sh/
And if you manage to make it say something ridiculous, break something, or just have feedback on the idea/design, I'd genuinely like to hear it.

Top comments (0)