<?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: Brian</title>
    <description>The latest articles on DEV Community by Brian (@brianleft28).</description>
    <link>https://dev.to/brianleft28</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%2F1365223%2F97c0eca4-8042-4f46-9e7a-6c3b58c9d607.jpeg</url>
      <title>DEV Community: Brian</title>
      <link>https://dev.to/brianleft28</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/brianleft28"/>
    <language>en</language>
    <item>
      <title>Everyone builds a RAG chatbot with LangChain. I wrote the pipeline by hand — and deployed it</title>
      <dc:creator>Brian</dc:creator>
      <pubDate>Fri, 21 Aug 2026 22:26:18 +0000</pubDate>
      <link>https://dev.to/brianleft28/everyone-builds-a-rag-chatbot-with-langchain-i-wrote-the-pipeline-by-hand-and-deployed-it-2340</link>
      <guid>https://dev.to/brianleft28/everyone-builds-a-rag-chatbot-with-langchain-i-wrote-the-pipeline-by-hand-and-deployed-it-2340</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;The "personal AI that knows my projects" is a whole genre now. Here's the version I built, and the two choices that took it somewhere different.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The standard recipe is everywhere: LangChain, a vector database, a local model, and you've got an AI that answers questions about your docs. &lt;br&gt;
I built one too. But I made two decisions that changed what it is.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;I wrote every step by hand — &lt;strong&gt;no framework&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Not because frameworks are bad. Because I learn a system by building it, and I wanted to own the failure modes. So ingestion, keyword extraction, relevance retrieval, context assembly and streaming are each written in TypeScript, inside the same app — code I can debug, test and explain line by line.&lt;/p&gt;

&lt;p&gt;The trade-off I'd defend: my index is hand-curated keywords, not opaque embeddings. Less magic, more control. The payoff shows up when the assistant answers wrong about a project — I fix it by editing data (a keyword), not by re-embedding or retraining anything. The retrieval index is editable content.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;It's not a chatbot — it's a parametrizable system, and it's live&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The part I care about most: everything the assistant knows, and everything the site shows, is data — not code. An admin panel governs three layers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Content: projects load as Markdown, sync into a virtual filesystem, and each carries the keywords that drive retrieval.&lt;/li&gt;
&lt;li&gt;Languages: the whole thing exists in Spanish and English, resolved per visitor, without writing content twice.&lt;/li&gt;
&lt;li&gt;Behavior: the assistant's personalities — voice, language, greeting, prompt — are rows in a database.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A change in content, language or the assistant's tone ships as data, not a deploy. It's white-label by design.&lt;/p&gt;

&lt;p&gt;And it's self-hosted end to end — VPS, nginx, TLS, CI/CD. Which means the thing most of these projects can't offer: you can actually go use it. It's not a screenshot of my local setup. It's live.&lt;/p&gt;

&lt;p&gt;What building it by hand actually taught me&lt;/p&gt;

&lt;p&gt;Writing the pipeline myself didn't make it more "advanced." It made it mine — I can explain and debug every line, and I understand exactly what a framework would have been doing for me. Deploying it turned a demo into something people can touch.&lt;/p&gt;

&lt;p&gt;That, to me, is the difference between "I followed a RAG tutorial" and "I built and run a system."&lt;/p&gt;




&lt;p&gt;It's the front end of my portfolio — you navigate it like a Linux terminal and ask an assistant anything about my work. &lt;/p&gt;

&lt;p&gt;Go break it: brianleft.com. Backend / systems engineer, open to remote.&lt;/p&gt;




</description>
      <category>ai</category>
      <category>llm</category>
      <category>rag</category>
      <category>typescript</category>
    </item>
  </channel>
</rss>
