<?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>Forem: Joe Garrett</title>
    <description>The latest articles on Forem by Joe Garrett (@garrjo).</description>
    <link>https://forem.com/garrjo</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3646258%2Fab042b63-69a8-4e8a-9ac7-ddcf487a8b3f.jpeg</url>
      <title>Forem: Joe Garrett</title>
      <link>https://forem.com/garrjo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/garrjo"/>
    <language>en</language>
    <item>
      <title>I built a search engine for $22/month. Here's the stack.</title>
      <dc:creator>Joe Garrett</dc:creator>
      <pubDate>Thu, 04 Dec 2025 12:28:56 +0000</pubDate>
      <link>https://forem.com/garrjo/i-built-a-search-engine-for-22month-heres-the-stack-4e1d</link>
      <guid>https://forem.com/garrjo/i-built-a-search-engine-for-22month-heres-the-stack-4e1d</guid>
      <description>&lt;p&gt;I spent 25 years in IT, including building federal systems that processed millions of loans on servers older than some junior devs. When I needed search for my own projects, I looked at the options:&lt;/p&gt;

&lt;p&gt;Elasticsearch: Complex, expensive, requires a cluster&lt;br&gt;
Algolia: Great product, $500+/month at scale&lt;br&gt;
Meilisearch: Better, still needs infrastructure&lt;/p&gt;

&lt;p&gt;So I built my own.&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.amazonaws.com%2Fuploads%2Farticles%2Fn35rqqoto0kc6hlbecdx.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.amazonaws.com%2Fuploads%2Farticles%2Fn35rqqoto0kc6hlbecdx.png" alt=" " width="800" height="564"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Stack&lt;br&gt;
Database: SQLite + FTS5&lt;br&gt;
Ranking: BM25 + 384-dimension vector search (hybrid)&lt;br&gt;
Vectors: sqlite-vec extension, Xenova/all-MiniLM-L6-v2&lt;br&gt;
Network: P2P mesh with RSA identity, WebSocket&lt;br&gt;
Storage: 930 bytes per doc&lt;/p&gt;

&lt;p&gt;Total infrastructure: 2 servers, $22/month.&lt;/p&gt;

&lt;p&gt;Currently indexing 50k+ pages and climbing.&lt;br&gt;
Why SQLite?&lt;br&gt;
Everyone says SQLite doesn't scale. They're wrong. FTS5 with BM25 ranking handles millions of documents. Add sqlite-vec for vector similarity and you've got hybrid search without Pinecone or Weaviate.&lt;/p&gt;

&lt;p&gt;No cluster. No ops. It just runs.&lt;/p&gt;

&lt;p&gt;Demo&lt;br&gt;
&lt;a href="https://www.qwikwit.com" rel="noopener noreferrer"&gt;https://www.qwikwit.com&lt;/a&gt;&lt;br&gt;
Patent pending. Happy to answer architecture questions.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>sqlite</category>
      <category>node</category>
    </item>
  </channel>
</rss>
