Back to projects

Narrato: news by cluster

February 27, 2026 02:09

Narrato groups news articles by topic using embeddings and vector search, then synthesizes a view per cluster. Ingestion and clustering are automated with n8n. Less “one feed,” more “here’s what this story is about and what others say.”

Narrato is about reducing noise. Instead of a flat list of headlines, you get clusters: each cluster has a seed URL (or label), a set of related articles, and a synthesized summary. The grouping is done with embeddings and pgvector (via the Neighbor gem), so articles that are semantically close land in the same bucket. Then each cluster gets a single narrative so you can see “this is the story” without opening twenty tabs.

Tech stack is Rails 8, PostgreSQL with pgvector, Turbo and Stimulus on the front. RSS is in the mix for ingestion; Redcarpet for any markdown in summaries. We use n8n for automations: clusters are created and updated via the app’s API from n8n workflows, so the pipeline runs as “fetch → embed → cluster → synthesize” without touching the UI. The public site is the reading side: browse by cluster, open a cluster, read the synthesis and the links.

The goal was always “synthesize by cluster” rather than “another aggregator.” So the emphasis is on the quality of the grouping and the summary, and on making it easy to plug in new sources or change how clusters are built without rewriting the app.