<?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: quotewiser</title>
    <description>The latest articles on DEV Community by quotewiser (@quotewisio).</description>
    <link>https://dev.to/quotewisio</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%2F3736209%2F92bf1630-ba6e-4ca3-94e3-e95e4901cbb1.png</url>
      <title>DEV Community: quotewiser</title>
      <link>https://dev.to/quotewisio</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/quotewisio"/>
    <language>en</language>
    <item>
      <title>Building semantic search for quotes I can't quite remember</title>
      <dc:creator>quotewiser</dc:creator>
      <pubDate>Thu, 29 Jan 2026 15:28:30 +0000</pubDate>
      <link>https://dev.to/quotewisio/building-semantic-search-for-quotes-i-cant-quite-remember-5hme</link>
      <guid>https://dev.to/quotewisio/building-semantic-search-for-quotes-i-cant-quite-remember-5hme</guid>
      <description>&lt;p&gt;I love quotes. I collect them. And I could never find the ones I was looking for.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The problem&lt;/em&gt;: you remember the idea of a quote, not the words. You search "courage setback quote" and get motivational poster garbage. If you knew the exact words, you wouldn't need to search.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"We hear and apprehend only what we already half know."&lt;br&gt;
  — Henry David Thoreau, Journal&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So I built Quotewise: semantic search across 600K quotes, each with source citations.&lt;/p&gt;

&lt;h2&gt;
  
  
  The other problem
&lt;/h2&gt;

&lt;p&gt;Even when you find something, how do you know it's real? Most quote sites copy each other, misattributions included. And they're stuck in the past. Mostly dead authors. Nothing from podcasts, indie writers, or YouTube.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I solved it
&lt;/h2&gt;

&lt;p&gt;Semantic search via pgvector handles the first problem. Describe the concept, get relevant quotes. "Quotes about perseverance in the face of uncertainty" actually works.&lt;/p&gt;

&lt;p&gt;For verification, every quote has QuoteSightings, a list of where it was actually found (Wikiquote, Goodreads, books, newsletters, tweets, Youtube, Twitter). You see the sources before you use it.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The unexpected part&lt;/em&gt;: I'd look up a Stoic quote and find a Buddhist saying from 500 years earlier making the same point. Embeddings find conceptual neighbors across cultures and centuries.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture
&lt;/h2&gt;

&lt;p&gt;Stack for anyone curious:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Django 6.0 + PostgreSQL 16 with pgvector&lt;/li&gt;
&lt;li&gt;1024-dimensional embeddings for semantic similarity&lt;/li&gt;
&lt;li&gt;HTMX for the frontend (no React/Vue)&lt;/li&gt;
&lt;li&gt;MCP server so Claude/ChatGPT/Gemini can use it directly&lt;/li&gt;
&lt;li&gt;The MCP integration means my AI assistant can find the quote I'm half-remembering without leaving the conversation.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  MCP setup
&lt;/h2&gt;

&lt;p&gt;If you use Claude Desktop, ChatGPT, or similar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "mcpServers": {
    "quotewise": {
      "url": "https://mcp.quotewise.io/"
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;13 tools: quotes_about, quotes_by, quotes_from, quote_sightings, collections, etc.&lt;/p&gt;

&lt;p&gt;HTTP transport + OAuth device flow. Free tier: 20 requests/hour.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I learned
&lt;/h2&gt;

&lt;p&gt;Misattribution is everywhere. Wikiquote has a whole section for quotes falsely attributed to each person. I hide known fakes by default.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"When you seek, you find things you did not anticipate."&lt;br&gt;
  — James A. Michener, The Covenant&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Embeddings find connections you'd miss with keywords. Same idea, different century, different culture.&lt;/p&gt;

&lt;p&gt;MCP changes the workflow. Instead of tab-switching to verify quotes, my agent does it inline.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Docs&lt;/strong&gt;: &lt;a href="https://quotewise.io/developers/mcp/" rel="noopener noreferrer"&gt;https://quotewise.io/developers/mcp/&lt;/a&gt; &lt;br&gt;
&lt;strong&gt;Web&lt;/strong&gt; interface: &lt;a href="https://quotewise.io" rel="noopener noreferrer"&gt;https://quotewise.io&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Curious what people think about the tool design. Is 13 MCP tools overkill? Would you actually use source citations or do you not care where quotes come from?&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>python</category>
      <category>ai</category>
      <category>mcp</category>
    </item>
  </channel>
</rss>
