Workflow Pipeline
Each research run executes across isolated containers. Render Workflows handles queuing, retry logic, and parallel fan-out. The pipeline: trigger → orchestrate → search → summarize → persist.
Trigger Run
User clicks 'Trigger Run' in the dashboard, or the cron job fires daily at 1 PM UTC.
orchestrate_research
Root workflow task. Coordinates search and summarization across parallel subtasks using Promise.all().
search_exa
Neural web search via Exa API. Returns 10 results with auto-extracted content.
search_hackernews
HN story search via Algolia API. No API key required.
summarize_source (x N)
One subtask per source article, all running in parallel. Each calls Claude to produce a structured insight.
Persist to Postgres
Deduplicates by URL hash, inserts new sources + insights into Render Postgres.
Render Services
| Service | Type | Runtime | Purpose |
|---|---|---|---|
| researcher-web | Web Service | Node.js + Hono | Dashboard UI, trigger endpoint, insight API |
| researcher-cron | Cron Job | Node.js | Daily scheduled trigger (1 PM UTC) |
| render-researcher-workflow | Workflow | Node.js 20 + tsx | Durable task execution |
| researcher-db | Postgres | PostgreSQL 18 | Sources, insights, run history |
Confidence Score
Each insight has a confidence score (0–100%) assigned by Claude during summarization. It rates how relevant and substantive the source article is relative to the research topic.
70–100%
Highly relevant, substantive
40–69%
Partially relevant, limited depth
0–39%
Tangential or lacks substance
Search Sources
Exa Neural Search
AI-powered web search, 10 results, 24h lookback
Hacker News (Algolia)
Recent HN stories, no key required
arXiv Research Papers
Academic papers — not yet implemented
Tech Stack
Web framework for API + server-rendered UI
Utility-first CSS with theme tokens
Type-safe Postgres with schema-as-code
TypeScript SDK for workflow tasks
Structured output via generateObject + Zod
Neural web search with content extraction
Direct TypeScript execution for workflows