Narratives Project – A news product for a more peaceful internet
Hey HN! I’m Shaun, and I started the Narratives Project (https://www.narrativesproject.com/), a non-profit that presents divisive news events as contrasting narratives to show why people disagree. Our goal is to lower people’s distress about the news and animosity towards those they disagree with. Our current news media system incites instead of informs. On-the-ground reporting has been replaced by armchair journalism, most people are locked in viewpoint silos that are occasionally penetrated by the worst of the other side, and the entire system is in an escalating panic about…
Narratives Project – A news product for a more peaceful internet launched on March 28, 2022 with 91 votes, #410 of 3,153 launches that month and more than 90% of that year's launches.
In plain words
The Narratives Project is a non-profit news platform that presents divisive events through contrasting narratives to explain why people disagree. Designed for readers seeking balanced perspective, it aims to reduce distress about news and hostility between those with opposing views. Rather than presenting single viewpoints, the platform shows multiple sides of contentious issues to help users understand the reasoning behind different positions.
written from the facts on this page · September 2026
From the sources
In the maker’s words, at launch
Hey HN! I’m Shaun, and I started the Narratives Project (https://www.narrativesproject.com/), a non-profit that presents divisive news events as contrasting narratives to show why people disagree. Our goal is to lower people’s distress about the news and animosity towards those they disagree with. Our…
Does a similar job
all alternatives →
I made a platform for journalists to “open source” their fact checking2019 · sourcedfact.com · ▲593A publication dedicated to full transparency in fact-checking. Every source document is available with annotations to guide the reader, and every fact-checking conversation is out in the open.

Real-time system that tracks how news spreads across 200k websitesNov 2025 · yandori.io · ▲256I built a system that monitors ~200,000 news RSS feeds in near real-time and clusters related articles to show how stories spread across the web. It uses Snowflake’s Arctic model for embeddings and HNSW for fast similarity search. Each “story cluster” shows who published first, how fast it propagated, and how the narrative evolved as more outlets picked it up. Would love feedback on the architecture, scaling approach, and any ways to make the clusters more accurate or useful. Live demo: https://yandori.io/news-flow/



More work this month
the category →
Endless lofi beats composed live in your browser, over pixel-art nights in Paris, Tokyo, New York, Hong Kong, Sydney, San Francisco and more. Free, no sign-up.
Work · 26d ago · loficities.com
Smooth Recorder▲257Mac screen recordings that look edited when you hit stop
Work · 20d ago · smoothrecorder.com


Work · 14d ago · readrare.com
Source: Show HN post ↗ · launch text quoted in part
Launched alongside, March 2022
the whole month →- IM
Hi HN! I made many small web games in the past with Unity or Phaser. But this time I wanted to make something completely on my own. So I coded a basic game framework in plain JavaScript, and used it to make Almost Pong. This was a really fun project that taught me a lot about JavaScript, and I plan to make more minimalist games with this framework. Interesting fact: Almost Pong doesn't load any assets, all sprites and sounds are generated with code. Happy to answer questions, and please let me know if you have any feedback on the game. Thanks!
Dev tools · 2022 · lessmilk.com
- IM
Life & fun · 2022 · networksfromscratch.com
- HA
Paste the following into the console of any HN page - for annotated avatars on all HN comments. (self contained code) for(u of document.querySelectorAll('.hnuser'))for(u.prepend(c=document.createElement('canvas')),x=c.getContext('2d'),c.width=18,c.height=14,s=u.innerText,r=1,i=28+s.length;i--;i>>29>X*X/3+Y/2&&x.fillRect(6+2*X,2*Y,2,2)&x.fillRect(6-2*X,2*Y,2,2):r+=s.charCodeAt(i-28,x.fillStyle='#'+(r>>8&0xFFFFFF).toString(16)))r^=r>>17,r^=r>2
Dev tools · 2022



How well do you know your area? Test your knowledge by locating streets on a map.
Work · 2022 · backofyourhand.com