<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Aaron</title>
    <description>The latest articles on DEV Community by Aaron (@hattorius).</description>
    <link>https://dev.to/hattorius</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4112832%2F120a088a-1764-43b9-9b3c-b8887a64504b.jpg</url>
      <title>DEV Community: Aaron</title>
      <link>https://dev.to/hattorius</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hattorius"/>
    <language>en</language>
    <item>
      <title>I replaced my developer portfolio with an AI version of myself</title>
      <dc:creator>Aaron</dc:creator>
      <pubDate>Mon, 07 Sep 2026 11:00:00 +0000</pubDate>
      <link>https://dev.to/hattorius/i-replaced-my-developer-portfolio-with-an-ai-version-of-myself-2nlh</link>
      <guid>https://dev.to/hattorius/i-replaced-my-developer-portfolio-with-an-ai-version-of-myself-2nlh</guid>
      <description>&lt;p&gt;I've never really liked developer portfolios.&lt;/p&gt;

&lt;p&gt;Most of them follow roughly the same structure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;short introduction&lt;/li&gt;
&lt;li&gt;list of technologies&lt;/li&gt;
&lt;li&gt;project cards&lt;/li&gt;
&lt;li&gt;work experience&lt;/li&gt;
&lt;li&gt;contact button&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There's nothing particularly wrong with that.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;So I rebuilt mine.&lt;/p&gt;

&lt;p&gt;Instead of landing on a bunch of cards, you're basically greeted with:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Hi, I'm Aaron. Ask me anything.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You can try it here: &lt;a href="https://xlogic.sh/" rel="noopener noreferrer"&gt;https://xlogic.sh/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I changed it
&lt;/h2&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;Trying to squeeze that into a normal portfolio always felt arbitrary.&lt;/p&gt;

&lt;p&gt;Do I put the biggest project first?&lt;/p&gt;

&lt;p&gt;The most technically impressive one?&lt;/p&gt;

&lt;p&gt;The most recent one?&lt;/p&gt;

&lt;p&gt;Do people visiting my site even care about the same things I think they care about?&lt;/p&gt;

&lt;p&gt;I figured it would be more interesting if the visitor could decide.&lt;/p&gt;

&lt;p&gt;So now you can ask things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What has Aaron built?&lt;/li&gt;
&lt;li&gt;What does he actually do at work?&lt;/li&gt;
&lt;li&gt;Which projects was he most excited about?&lt;/li&gt;
&lt;li&gt;What technologies does he prefer using?&lt;/li&gt;
&lt;li&gt;What did he build before working professionally?&lt;/li&gt;
&lt;li&gt;Why did he stop playing competitive games?&lt;/li&gt;
&lt;li&gt;What kind of work does he enjoy?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The rest of the website still exists, but the conversation became the main interface.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqsyq66v821nbubbr2s2e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqsyq66v821nbubbr2s2e.png" alt=" " width="800" height="463"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The part I liked most
&lt;/h2&gt;

&lt;p&gt;The interesting thing for me wasn't really adding a chatbot.&lt;/p&gt;

&lt;p&gt;It was changing how the site is navigated.&lt;/p&gt;

&lt;p&gt;A traditional portfolio works like this:&lt;/p&gt;

&lt;p&gt;Visitor -&amp;gt; Navigation -&amp;gt; Projects / About / Experience -&amp;gt; Information I decided to put there.&lt;/p&gt;

&lt;p&gt;Mine is now closer to:&lt;/p&gt;

&lt;p&gt;Visitor -&amp;gt; Question -&amp;gt; Relevant information&lt;/p&gt;

&lt;p&gt;That feels much more natural for a personal site.&lt;/p&gt;

&lt;p&gt;Especially when the amount of information becomes larger than what you'd reasonably put on a homepage.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's behind it
&lt;/h2&gt;

&lt;p&gt;Most of the information about me and my projects lives in Markdown files.&lt;/p&gt;

&lt;p&gt;They're split up into general information and project-specific information.&lt;/p&gt;

&lt;p&gt;When someone asks a question, the backend figures out what information is actually relevant, retrieves it, and uses that to answer.&lt;/p&gt;

&lt;p&gt;The important part was avoiding the obvious bad solution:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;send everything I've ever written about myself with every request&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That would be slow, expensive, and probably make the answers worse.&lt;/p&gt;

&lt;p&gt;So the flow is roughly:&lt;/p&gt;

&lt;p&gt;Question -&amp;gt; Figure out what context is needed (personal information/memories/projects) -&amp;gt; retrieve that relevant information -&amp;gt; generate response -&amp;gt; stream it back to the site.&lt;/p&gt;

&lt;p&gt;The frontend itself is built with SvelteKit.&lt;/p&gt;

&lt;p&gt;A lot of the backend orchestration currently runs through n8n.&lt;/p&gt;

&lt;h2&gt;
  
  
  Then I launched it
&lt;/h2&gt;

&lt;p&gt;Yesterdat I posted the first version on Reddit.&lt;/p&gt;

&lt;p&gt;And people immediately broke it.&lt;/p&gt;

&lt;p&gt;Which, in retrospect, was actually pretty useful.&lt;/p&gt;

&lt;p&gt;The site itself was hosted on Netlify, including the endpoint handling the conversation.&lt;/p&gt;

&lt;p&gt;That worked perfectly during development.&lt;/p&gt;

&lt;p&gt;Then real people started asking much more complicated questions than I had.&lt;/p&gt;

&lt;p&gt;Some requests took long enough that the Netlify function hit its execution timeout.&lt;/p&gt;

&lt;p&gt;So people would open the site, ask something interesting, wait for an answer...&lt;/p&gt;

&lt;p&gt;...and the request would just die.&lt;/p&gt;

&lt;p&gt;Not exactly the launch experience I had in mind.&lt;/p&gt;

&lt;h2&gt;
  
  
  So I moved the backend
&lt;/h2&gt;

&lt;p&gt;The frontend is still hosted normally, but the actual chat endpoint is now running on infrastructure I control.&lt;/p&gt;

&lt;p&gt;That means I'm no longer depending on a short-lived serverless function for requests that can occasionally take longer.&lt;/p&gt;

&lt;p&gt;The architecture is now roughly:&lt;/p&gt;

&lt;p&gt;SvelteKit frontend -&amp;gt; Self-hosted API -&amp;gt; n8n workflow -&amp;gt; Streaming response&lt;/p&gt;

&lt;p&gt;It's also been a good reminder that testing something yourself and having ten strangers click it are very different things.&lt;/p&gt;

&lt;p&gt;Reddit basically became my load test.&lt;/p&gt;

&lt;h2&gt;
  
  
  There's still plenty to improve
&lt;/h2&gt;

&lt;p&gt;The biggest thing I'm working on now is making the answers more consistent.&lt;/p&gt;

&lt;p&gt;Since the site is representing an actual person, it's important that it knows the difference between:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;something that's definitely true&lt;/li&gt;
&lt;li&gt;something that can reasonably be in ferred&lt;/li&gt;
&lt;li&gt;something it simply doesn't know&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'd much rather have it say "I don't know", than confidently make something up about me.&lt;/p&gt;

&lt;p&gt;I'm also still tweaking retrieval, latency, and how much context each question actually needs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Is this excessive for a portfolio?
&lt;/h2&gt;

&lt;p&gt;Definitely.&lt;/p&gt;

&lt;p&gt;A static site would be easier, faster, cheaper, and much harder to break.&lt;/p&gt;

&lt;p&gt;But I also think personal websites are one of the few places where overengineering something is completely justified.&lt;/p&gt;

&lt;p&gt;There doesn't need to be a business case. I just wanted to build a portfolio that felt more like me.&lt;/p&gt;

&lt;p&gt;If you want to try it: &lt;a href="https://xlogic.sh/" rel="noopener noreferrer"&gt;https://xlogic.sh/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>ai</category>
      <category>svelte</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
