<?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: Thaywo</title>
    <description>The latest articles on DEV Community by Thaywo (@t_haywo).</description>
    <link>https://dev.to/t_haywo</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%2F295216%2F4010f26a-92fc-45f0-8d46-cebaf5f251d3.jpg</url>
      <title>DEV Community: Thaywo</title>
      <link>https://dev.to/t_haywo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/t_haywo"/>
    <language>en</language>
    <item>
      <title>ResearchSwarm: AI-Powered Research Discovery Engine</title>
      <dc:creator>Thaywo</dc:creator>
      <pubDate>Sun, 02 Nov 2025 14:42:10 +0000</pubDate>
      <link>https://dev.to/t_haywo/researchswarm-ai-powered-research-discovery-engine-3b8n</link>
      <guid>https://dev.to/t_haywo/researchswarm-ai-powered-research-discovery-engine-3b8n</guid>
      <description>&lt;p&gt;🎯 What I Built&lt;/p&gt;

&lt;p&gt;ResearchSwarm is a system that rely on MINIMAX AI via OpenRouter to reimagines how academic research is discovered and connected. It uses the unique capabilities of Agentic Postgres to let several specialized processes work in parallel each on its own isolated database fork to uncover hidden relationships between research papers up to four times faster than traditional methods.&lt;/p&gt;

&lt;p&gt;The Inspiration&lt;/p&gt;

&lt;p&gt;As a researcher, I’ve often struggled with manually tracking citations, finding cross-disciplinary links, and identifying trends buried in thousands of papers. Most research tools only handle basic keyword searches or limited semantic matching. I wanted to build something that could explore data from different angles at once bringing together multiple analyses to reveal insights that would otherwise take weeks to find.&lt;/p&gt;

&lt;p&gt;Core Concept&lt;/p&gt;

&lt;p&gt;At the heart of ResearchSwarm is how it uses “Agentic Postgres.”&lt;br&gt;
Each process runs independently on its own database fork, avoiding conflicts and boosting speed:&lt;/p&gt;

&lt;p&gt;Citation Analyzer – Maps and explores citation relationships&lt;/p&gt;

&lt;p&gt;Topic Discovery Unit – Groups related papers into themes&lt;/p&gt;

&lt;p&gt;Connection Finder – Detects links between different domains&lt;/p&gt;

&lt;p&gt;Trend Tracker – Monitors how topics evolve over time&lt;/p&gt;

&lt;p&gt;Together, these components complete analysis in about 5 seconds compared to 15 seconds or more using sequential execution.&lt;/p&gt;

&lt;p&gt;Repository&lt;/p&gt;

&lt;p&gt;GitHub:&lt;br&gt;
&lt;a href="https://github.com/thaywo/agentic_challenge_backend" rel="noopener noreferrer"&gt;https://github.com/thaywo/agentic_challenge_backend&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/thaywo/frontend_researchswarm" rel="noopener noreferrer"&gt;https://github.com/thaywo/frontend_researchswarm&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Key Features&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Hybrid Search&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Combines BM25 keyword ranking with semantic vector search.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;POST /api/search/hybrid
{
  "query": "quantum machine learning",
  "keywordWeight": 0.5,
  "vectorWeight": 0.5
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Parallel Discovery&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Runs all four processes simultaneously.&lt;/p&gt;

&lt;p&gt;POST /api/agents/discover&lt;/p&gt;

&lt;p&gt;Response:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "total_duration": 2845,
  "agents": 4,
  "successful": 4,
  "results": [...]
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Citation Network&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Displays an interactive graph of how papers reference one another.&lt;/p&gt;

&lt;p&gt;GET /api/papers/:id/network?depth=2&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Cross-Domain Connections&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Reveals research that bridges different academic areas.&lt;/p&gt;

&lt;p&gt;GET /api/analytics/connections/cross-domain&lt;/p&gt;

&lt;p&gt;Screenshots&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Hybrid Search Interface&lt;/li&gt;
&lt;/ol&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%2Fq0x2hqr317ofqzpvrug9.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%2Fq0x2hqr317ofqzpvrug9.png" alt=" " width="800" height="386"&gt;&lt;/a&gt;&lt;br&gt;
Combines keyword and semantic results for better discovery.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Parallel Execution Dashboard&lt;/li&gt;
&lt;/ol&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%2Ftm9v6e3q44wehh4fkgiw.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%2Ftm9v6e3q44wehh4fkgiw.png" alt=" " width="800" height="385"&gt;&lt;/a&gt;&lt;br&gt;
All four processes running at once on separate database forks.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Citation Network Visualization&lt;/li&gt;
&lt;/ol&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%2Figkt4b3m7hrfffdb5kfx.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%2Figkt4b3m7hrfffdb5kfx.png" alt=" " width="800" height="387"&gt;&lt;/a&gt;&lt;br&gt;
Interactive graph showing citation relationships.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Cross-Domain Links&lt;/li&gt;
&lt;/ol&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%2Fno2vwbnliji9ndbe4pn6.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%2Fno2vwbnliji9ndbe4pn6.png" alt=" " width="800" height="387"&gt;&lt;/a&gt;&lt;br&gt;
Papers connecting quantum computing and machine learning.&lt;/p&gt;

&lt;p&gt;🚀 How Agentic Postgres Was Used&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Fast Database Forks (Zero-Copy)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Challenge: Running multiple tasks at once without conflicts.&lt;br&gt;
Solution: Each process creates its own zero-copy database fork using Tiger Cloud.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;async createFork(name) {
  const forkName = `${name}-${Date.now()}`;
  const command = `tiger service fork create --name ${forkName}`;
  const { stdout } = await execAsync(command);
  const info = JSON.parse(stdout);

  return {
    forkId: info.service_id,
    connectionString: info.connection_string
  };
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Impact:&lt;/p&gt;

&lt;p&gt;Forks created in under 500 ms&lt;/p&gt;

&lt;p&gt;No extra storage until data diverges&lt;/p&gt;

&lt;p&gt;Automatic cleanup after completion&lt;/p&gt;

&lt;p&gt;4× faster execution&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Hybrid Search (pg_textsearch + pgvector)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Challenge: Academic search needs both keyword precision and contextual meaning.&lt;br&gt;
Solution: Combine BM25 and vector similarity in a single query.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CREATE FUNCTION hybrid_search(...) RETURNS TABLE (...) AS $$
BEGIN
  WITH keyword_search AS (...),
       vector_search AS (...)
  SELECT COALESCE(k.id, v.id),
         (k.keyword_score * keyword_weight + v.vector_score * vector_weight) AS combined_score
  FROM keyword_search k
  FULL OUTER JOIN vector_search v ON k.id = v.id
  ORDER BY combined_score DESC;
END;
$$ LANGUAGE plpgsql;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Impact:&lt;/p&gt;

&lt;p&gt;Balances precision and context&lt;/p&gt;

&lt;p&gt;Handles synonyms and related concepts&lt;/p&gt;

&lt;p&gt;Responds in under 200 ms for 10K+ papers&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Tiger MCP Integration&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Challenge: Each component needed awareness of the database schema.&lt;br&gt;
Solution: Used Tiger MCP (Model Context Protocol) to provide schema context.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const mcpContext = await tigerMCP.getContext({
  schema: 'research_discovery',
  tables: ['papers', 'citations', 'topics'],
  include_docs: true
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Impact:&lt;/p&gt;

&lt;p&gt;Automatically generates correct SQL queries&lt;/p&gt;

&lt;p&gt;Reduces setup time by half&lt;/p&gt;

&lt;p&gt;Ensures consistent structure across components&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Tiger CLI for DevOps&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Challenge: Simplifying database infrastructure management.&lt;br&gt;
Solution: Used Tiger CLI for automation.&lt;/p&gt;

&lt;p&gt;tiger service create --name research-swarm --addons time-series,ai&lt;br&gt;
tiger service fork create --name citation-analyzer-123&lt;br&gt;
tiger db connection-string --service-id ywwb0507h1&lt;/p&gt;

&lt;p&gt;Impact:&lt;/p&gt;

&lt;p&gt;Easy setup and monitoring&lt;/p&gt;

&lt;p&gt;Ready for CI/CD pipelines&lt;/p&gt;

&lt;p&gt;Clean and intuitive workflow&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;TimescaleDB Hypertables&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Challenge: Efficient trend tracking over time.&lt;br&gt;
Solution: Used TimescaleDB hypertables for time-series optimization.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CREATE TABLE trends (
  topic_id INTEGER,
  time_period DATE,
  paper_count INTEGER,
  citation_velocity FLOAT,
  growth_rate FLOAT,
  is_emerging BOOLEAN
);

SELECT create_hypertable('trends', 'time_period', chunk_time_interval =&amp;gt; INTERVAL '1 month');
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Impact:&lt;/p&gt;

&lt;p&gt;10× faster time-based queries&lt;/p&gt;

&lt;p&gt;Automatic compression&lt;/p&gt;

&lt;p&gt;Smooth long-term data analysis&lt;/p&gt;

&lt;p&gt;💡 Experience Summary&lt;br&gt;
What Worked Well&lt;/p&gt;

&lt;p&gt;Instant Forks: Creating large database forks in seconds.&lt;/p&gt;

&lt;p&gt;Hybrid Search: Strong combination of text and vector search.&lt;/p&gt;

&lt;p&gt;Developer Tools: Excellent CLI and dashboard experience.&lt;/p&gt;

&lt;p&gt;Challenges and Fixes&lt;/p&gt;

&lt;p&gt;Fork Management: Solved with automatic cleanup in the orchestrator.&lt;/p&gt;

&lt;p&gt;Search Weighting: Added configurable keyword/vector balance.&lt;/p&gt;

&lt;p&gt;Result Merging: Used JSONB columns for flexible data storage.&lt;/p&gt;

&lt;p&gt;Key Takeaways&lt;/p&gt;

&lt;p&gt;Agentic Postgres changes the way databases are used.&lt;br&gt;
It’s not just a place to store data it’s an active partner in data analysis:&lt;/p&gt;

&lt;p&gt;Databases can fork and parallelize their own workloads&lt;/p&gt;

&lt;p&gt;Searches understand meaning, not just text&lt;/p&gt;

&lt;p&gt;Infrastructure adjusts automatically based on need&lt;/p&gt;

&lt;p&gt;This marks a major shift in how large-scale data exploration can be done.&lt;/p&gt;

&lt;p&gt;What’s Next&lt;/p&gt;

&lt;p&gt;Live arXiv Integration – Automatically fetch new papers daily.&lt;/p&gt;

&lt;p&gt;More Specialized Components – For summarization and collaboration suggestions.&lt;/p&gt;

&lt;p&gt;Advanced Visuals – 3D citation graphs, timeline views, and heatmaps.&lt;/p&gt;

&lt;p&gt;Suggestions for the Tiger Team&lt;/p&gt;

&lt;p&gt;Fork Management UI: Add a visual fork tree and analytics.&lt;/p&gt;

&lt;p&gt;pg_textsearch Upgrades: Include built-in hybrid functions and multilingual support.&lt;/p&gt;

&lt;p&gt;MCP Documentation: Provide more examples and integration tips.&lt;/p&gt;

&lt;p&gt;📊 Performance Metrics&lt;br&gt;
Metric  Value&lt;br&gt;
Parallel Execution  2.8 s (vs 12 s sequential)&lt;br&gt;
Fork Creation Time  &amp;lt; 500 ms&lt;br&gt;
Hybrid Search Latency   &amp;lt; 200 ms (10 K papers)&lt;br&gt;
Citation Network Query  &amp;lt; 300 ms (depth = 2)&lt;br&gt;
Database Size   ~ 50 MB&lt;br&gt;
Fork Storage Overhead   0 bytes (until divergence)&lt;br&gt;
🛠️ Tech Stack&lt;/p&gt;

&lt;p&gt;Backend: Node.js, Express&lt;/p&gt;

&lt;p&gt;Database: PostgreSQL 16 (Tiger Cloud)&lt;/p&gt;

&lt;p&gt;Extensions: pgvector, timescaledb, pg_textsearch&lt;/p&gt;

&lt;p&gt;CLI: Tiger CLI v0.15.0&lt;/p&gt;

&lt;p&gt;Hosting: Tiger Cloud&lt;/p&gt;

&lt;p&gt;Deployment: Tiger Cloud Service (ywwb0507h1)&lt;/p&gt;

&lt;p&gt;🎓 Why It Stands Out&lt;/p&gt;

&lt;p&gt;True Parallel Architecture – Independent forks for full isolation&lt;/p&gt;

&lt;p&gt;Production-Ready Implementation – Structured APIs, logging, and monitoring&lt;/p&gt;

&lt;p&gt;Proven Results – Real, measurable performance gains&lt;/p&gt;

&lt;p&gt;Meaningful Use Case – Solves an everyday research challenge&lt;/p&gt;

&lt;p&gt;🙏 Acknowledgments&lt;/p&gt;

&lt;p&gt;Special thanks to:&lt;/p&gt;

&lt;p&gt;Tiger Data Team – For creating Agentic Postgres&lt;/p&gt;

&lt;p&gt;TimescaleDB – For the solid foundation&lt;/p&gt;

&lt;p&gt;DEV Community – For hosting this challenge&lt;/p&gt;

&lt;p&gt;Researchers worldwide – For inspiring this project&lt;/p&gt;

&lt;p&gt;🔗 Final Links&lt;/p&gt;

&lt;p&gt;Live Demo: &lt;a href="https://agentic-researchswarm.vercel.app/" rel="noopener noreferrer"&gt;https://agentic-researchswarm.vercel.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Built with passion for the Agentic Postgres Challenge.&lt;/p&gt;

&lt;p&gt;ResearchSwarm – where isolated database forks work together to uncover what traditional systems overlook.&lt;/p&gt;

</description>
      <category>agenticpostgres</category>
      <category>agenticpostgreschallenge</category>
      <category>agents</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
