<?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: Nic Scheltema</title>
    <description>The latest articles on Forem by Nic Scheltema (@skeltsy).</description>
    <link>https://forem.com/skeltsy</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%2F3735855%2F35962a08-bd0f-4d02-80ed-bc46aa599563.jpg</url>
      <title>Forem: Nic Scheltema</title>
      <link>https://forem.com/skeltsy</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/skeltsy"/>
    <language>en</language>
    <item>
      <title>Introducing ShapedQL: The SQL Engine for Search, Feeds, and AI Agents</title>
      <dc:creator>Nic Scheltema</dc:creator>
      <pubDate>Tue, 27 Jan 2026 18:28:48 +0000</pubDate>
      <link>https://forem.com/skeltsy/introducing-shapedql-the-sql-engine-for-search-feeds-and-ai-agents-2k5l</link>
      <guid>https://forem.com/skeltsy/introducing-shapedql-the-sql-engine-for-search-feeds-and-ai-agents-2k5l</guid>
      <description>&lt;p&gt;At Shaped, we believe that while &lt;strong&gt;retrieval&lt;/strong&gt; (finding 1,000 items) is largely a solved problem, &lt;strong&gt;relevance&lt;/strong&gt; (finding the best 10) is still an infrastructure nightmare.&lt;/p&gt;

&lt;p&gt;Today, we are officially launching &lt;strong&gt;ShapedQL&lt;/strong&gt;, a declarative SQL language and real-time engine designed to collapse the entire ranking and retrieval stack into a single query.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Problem: The "Frankenstein" Stack
&lt;/h3&gt;

&lt;p&gt;Most engineering teams today are forced to maintain what we call a &lt;strong&gt;"Frankenstein stack."&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;To build a high-quality "For You" feed, a personalized search bar, or an AI agent with long-term memory, you typically have to glue together a dozen fragmented tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  A &lt;strong&gt;Vector Database&lt;/strong&gt; (like Pinecone) for semantic retrieval.&lt;/li&gt;
&lt;li&gt;  A &lt;strong&gt;Search Engine&lt;/strong&gt; (like Elasticsearch) for keyword matching.&lt;/li&gt;
&lt;li&gt;  A &lt;strong&gt;Feature Store&lt;/strong&gt; (like Redis) to hold user session data.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Thousands of lines of Python "spaghetti code"&lt;/strong&gt; to handle business logic, filtering, and re-ranking.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result is a "house of cards." It’s stateless, slow to iterate on, and impossible to debug. When a user asks, &lt;em&gt;"Why was this item ranked first?"&lt;/em&gt; engineers usually don’t have an answer.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Solution: From Documents to Decisions
&lt;/h3&gt;

&lt;p&gt;ShapedQL was built to move the industry from &lt;strong&gt;document retrieval&lt;/strong&gt; to &lt;strong&gt;real-time decisions.&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Unlike traditional search engines that are stateless by design, ShapedQL treats "User Context" as a first-class citizen. It doesn’t just look for items that are &lt;em&gt;similar&lt;/em&gt; to a query; it finds items that a specific user is most likely to &lt;em&gt;engage with&lt;/em&gt; right now.&lt;/p&gt;

&lt;p&gt;We’ve collapsed the entire relevance lifecycle into a 4-stage pipeline that you can define in a single SQL query:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Retrieve:&lt;/strong&gt; Fetch candidates from multiple sources (Hybrid Search, Social Graphs, or Trending lists).&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Filter:&lt;/strong&gt; Apply hard business constraints (e.g., "only show items in stock and under $200").&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Score:&lt;/strong&gt; Rank results using real-time machine learning models optimized for your business goals (Clicks, Conversions, or Watch Time).&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Reorder:&lt;/strong&gt; Optimize the final list for &lt;strong&gt;Diversity and Exploration&lt;/strong&gt;, ensuring the user experience stays fresh and avoids repetition.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  ShapedQL in Action
&lt;/h3&gt;

&lt;p&gt;Here is what a modern discovery feed looks like in ShapedQL. This replaces roughly 2,000 lines of traditional backend infrastructure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;video_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;creator_name&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; 
  &lt;span class="n"&gt;trending_videos&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;                   &lt;span class="c1"&gt;-- 1. Global popularity&lt;/span&gt;
  &lt;span class="n"&gt;following_network&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;"$user_id"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;        &lt;span class="c1"&gt;-- 2. Social graph&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; 
  &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="n"&gt;previously_watched&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;"$user_id"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;   &lt;span class="c1"&gt;-- 3. Stateful filtering&lt;/span&gt;
&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; 
  &lt;span class="n"&gt;p_watch_time&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;user&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;             &lt;span class="c1"&gt;-- 4. ML-powered scoring&lt;/span&gt;
&lt;span class="n"&gt;REORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; 
  &lt;span class="n"&gt;diversity&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;creator_name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;              &lt;span class="c1"&gt;-- 5. List-wise optimization&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  More than just a Query Language
&lt;/h3&gt;

&lt;p&gt;ShapedQL isn't just a syntax; it’s an end-to-end platform that automates the heavy lifting of data engineering and MLOps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Real-Time Connectors:&lt;/strong&gt; Sync data from Snowflake, BigQuery, Kafka, or Segment in milliseconds.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Generative Enrichment:&lt;/strong&gt; Use Gemini-powered LLMs to automatically tag images, clean messy product descriptions, and normalize data on the fly.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Automated MLOps:&lt;/strong&gt; Shaped continuously trains and fine-tunes your ranking models based on live user behavior, so you never have to manage a training pipeline again.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Real-World Impact
&lt;/h3&gt;

&lt;p&gt;We’ve already seen the power of this approach with our customers. By migrating their legacy search infrastructure to Shaped, one customer was able to replace a massive, 3000 elastic search codebase of rules with a 30 line ShapedQL query.&lt;/p&gt;

&lt;p&gt;The result? An &lt;strong&gt;11% lift in search conversions&lt;/strong&gt; and a &lt;strong&gt;10x increase in experimentation velocity.&lt;/strong&gt; They can now test new ranking theories in minutes, not weeks.&lt;/p&gt;

&lt;h3&gt;
  
  
  We’re live on Product Hunt!
&lt;/h3&gt;

&lt;p&gt;Today is a huge milestone for the team. We are sharing ShapedQL with the world on Product Hunt and we'd love your support.&lt;/p&gt;

&lt;p&gt;Check out our new &lt;strong&gt;Free Playground&lt;/strong&gt; (no login required) to see the engine in action and join the discussion:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://www.producthunt.com/products/shaped/launches/shapedql" rel="noopener noreferrer"&gt;https://www.producthunt.com/products/shaped/launches/shapedql&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
👉 &lt;strong&gt;&lt;a href="https://playground.shaped.ai/" rel="noopener noreferrer"&gt;https://playground.shaped.ai/&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We can't wait to see what you build.&lt;/p&gt;

</description>
      <category>machinelearning</category>
      <category>vectordatabase</category>
      <category>ai</category>
      <category>database</category>
    </item>
  </channel>
</rss>
