<?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: Lavneet Sharma</title>
    <description>The latest articles on DEV Community by Lavneet Sharma (@lavihushread).</description>
    <link>https://dev.to/lavihushread</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4204346%2F4c0625bb-754e-43a0-940c-35c912085bc5.png</url>
      <title>DEV Community: Lavneet Sharma</title>
      <link>https://dev.to/lavihushread</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/lavihushread"/>
    <language>en</language>
    <item>
      <title>Ranking is a choice: what I built instead of a news feed algorithm</title>
      <dc:creator>Lavneet Sharma</dc:creator>
      <pubDate>Thu, 29 Oct 2026 20:28:39 +0000</pubDate>
      <link>https://dev.to/lavihushread/ranking-is-a-choice-what-i-built-instead-of-a-news-feed-algorithm-2dma</link>
      <guid>https://dev.to/lavihushread/ranking-is-a-choice-what-i-built-instead-of-a-news-feed-algorithm-2dma</guid>
      <description>&lt;p&gt;Most news apps decide two things for you: what you see, and in what order. When I started building Hushread, an RSS and news reader, I decided it would decide neither. Ranking is a choice, and I chose not to make it.&lt;/p&gt;

&lt;p&gt;That choice creates its own problems. A newest-first feed of 200 sources is noisy, repetitive and endless. This post is about what I built instead of an algorithm to fix that, and the parts any developer building a feed, an inbox or a dashboard can reuse.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you see: only what you chose
&lt;/h2&gt;

&lt;p&gt;The feed is built from the sources you follow and nothing else. A source can be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;an RSS or Atom feed, or a site with no feed at all (Hushread checks the page and turns new posts into items),&lt;/li&gt;
&lt;li&gt;a subreddit, with the post's text rather than a bare link,&lt;/li&gt;
&lt;li&gt;a YouTube channel or a public Facebook page,&lt;/li&gt;
&lt;li&gt;a topic ("chip exports", your football club) that pulls new coverage from any outlet,&lt;/li&gt;
&lt;li&gt;or one of 2,500+ curated sources.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nothing is injected from outside that list, and there are no ads or ad tracking.&lt;/p&gt;

&lt;h2&gt;
  
  
  In what order: newest first, always
&lt;/h2&gt;

&lt;p&gt;The feed is every article from your sources, newest first. Nothing is ranked, boosted or reordered. AI is used in a few places (summaries, linking articles about the same event, judging tone for rules), but never to choose or reorder what is in the feed.&lt;/p&gt;

&lt;p&gt;A chronological feed only works if it is finishable, so the reader helps you get to the end: articles are marked read as you scroll past them, read articles are hidden the next time the feed loads, and the feed ends at "All caught up!".&lt;/p&gt;

&lt;h2&gt;
  
  
  The real fix for noise: group things
&lt;/h2&gt;

&lt;p&gt;The biggest source of noise in a chronological feed isn't order, it's repetition. When thirty outlets cover one event, you get thirty cards. So Hushread groups:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Articles into stories.&lt;/strong&gt; When several articles tell the same story, you see one card with an "Also mentioned in" strip listing the other outlets. Syndicated copies and follow-up rewrites fold under the newest version. When 8 or more publishers cover an event, a "See whole story" tile opens the full story: a summary of where things stand, then every outlet's report, day by day, each linking to the original.&lt;/p&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3m9raeh7v16acekabw5w.jpg" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3m9raeh7v16acekabw5w.jpg" alt="One story, 66 sources: the summary so far, then every outlet's report in time order." width="800" height="914"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;One story, 66 sources: the summary so far, then every outlet's report in time order.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sources into folders.&lt;/strong&gt; Folders group sources, tags group articles, and a source can sit in more than one folder. Any folder can filter the feed or be the screen the app opens on, so "everything" stops being the only view.&lt;/p&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft7ysmpvgh3bf15bma6ak.jpg" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft7ysmpvgh3bf15bma6ak.jpg" alt="Folders and sources in the menu, each with its own unread count, next to the feed." width="800" height="991"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Folders and sources in the menu, each with its own unread count, next to the feed.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Surging stories into Trending, on a separate screen.&lt;/strong&gt; Trending ranks stories by how many different publishers are covering them over the last 48 hours, not by clicks, and it never touches the feed itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rules you write, not rules learned about you
&lt;/h2&gt;

&lt;p&gt;Instead of a model guessing what to hide, you write the rule: mute, mark read, or notify, by keyword or phrase, by source or folder, and optionally by an article's tone. "Mute anything with &lt;em&gt;crypto&lt;/em&gt;" or "mark negative articles as read" does what it says, and you can pause or delete it any time.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd take from this for any feed
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Repetition is a bigger problem than order. Collapse duplicates before you reach for ranking.&lt;/li&gt;
&lt;li&gt;Keep every original one tap away when you group. A group that hides its sources isn't trusted.&lt;/li&gt;
&lt;li&gt;Make the end of the feed reachable. "All caught up" is a feature.&lt;/li&gt;
&lt;li&gt;Put ranked views on their own screen, so the main view stays predictable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can try it in the browser with no sign-up: &lt;a href="https://app.hushread.com/demo?utm_source=devto" rel="noopener noreferrer"&gt;https://app.hushread.com/demo?utm_source=devto&lt;/a&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>rss</category>
      <category>webdev</category>
      <category>ux</category>
    </item>
  </channel>
</rss>
