<?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: PressPlayed.com</title>
    <description>The latest articles on DEV Community by PressPlayed.com (@pressplayed).</description>
    <link>https://dev.to/pressplayed</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%2F4098722%2F592c0d21-e6b7-439f-8cbb-12bd5c367bf5.png</url>
      <title>DEV Community: PressPlayed.com</title>
      <link>https://dev.to/pressplayed</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pressplayed"/>
    <language>en</language>
    <item>
      <title>What it took to make an RSS reader feel like one continuous audio briefing</title>
      <dc:creator>PressPlayed.com</dc:creator>
      <pubDate>Fri, 28 Aug 2026 10:15:17 +0000</pubDate>
      <link>https://dev.to/pressplayed/what-it-took-to-make-an-rss-reader-feel-like-one-continuous-audio-briefing-1nh</link>
      <guid>https://dev.to/pressplayed/what-it-took-to-make-an-rss-reader-feel-like-one-continuous-audio-briefing-1nh</guid>
      <description>&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%2Frhewcu70qgu3qi56i9bp.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frhewcu70qgu3qi56i9bp.png" alt="PressPlayed.com turns articles and topics into a continuous audio briefing" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Most RSS readers optimize for scanning: unread counts, compact lists, folders, and a fast path to the original page.&lt;/p&gt;

&lt;p&gt;I wanted a different path through the same material. My saved articles and recurring subjects kept piling up, but the useful time I had was often time when looking at a screen was inconvenient. So I built &lt;a href="https://pressplayed.com/tour.html?utm_source=devto&amp;amp;utm_campaign=first100" rel="noopener noreferrer"&gt;PressPlayed&lt;/a&gt;, a mobile-first RSS reader that turns sources and topics into one continuous narrated briefing.&lt;/p&gt;

&lt;p&gt;The product idea sounds simple. Making it feel like one uninterrupted piece of audio was not.&lt;/p&gt;

&lt;h2&gt;
  
  
  The product model: briefings, not an inbox
&lt;/h2&gt;

&lt;p&gt;A source is a publication or feed. A briefing is the listening experience assembled from one or more sources.&lt;/p&gt;

&lt;p&gt;That distinction matters because the user is not trying to clear an inbox. They are trying to press play on something coherent: a morning reading list, a housing-market briefing, coverage of Fed interest rates, a hobby, or any other recurring subject.&lt;/p&gt;

&lt;p&gt;PressPlayed supports two ways to build one:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Choose publishers you already trust.&lt;/li&gt;
&lt;li&gt;Choose a topic and let the service find current coverage across sources.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The second path is important. Many people know what they care about but do not know which RSS feeds publish the best coverage. Topic discovery lets the subject come first while still showing where every article came from.&lt;/p&gt;

&lt;h2&gt;
  
  
  Constraint 1: narrate the article, not the web page
&lt;/h2&gt;

&lt;p&gt;A feed item is only the start. Sometimes it contains full text; often it contains a teaser and a link.&lt;/p&gt;

&lt;p&gt;The server fetches the article safely, extracts the readable content, and removes page chrome, repeated captions, bylines, and other text that sounds especially awkward when spoken. Extraction failures are recorded instead of silently turning into a bad narration. Publisher refusals and real paywalls are respected.&lt;/p&gt;

&lt;p&gt;This part is less glamorous than TTS, but it determines whether the result sounds like an article or a browser reading random furniture aloud.&lt;/p&gt;

&lt;h2&gt;
  
  
  Constraint 2: segment synthesis without segment-shaped playback
&lt;/h2&gt;

&lt;p&gt;Long articles cannot be synthesized as one enormous request. PressPlayed splits text into roughly 850-character segments, synthesizes and caches each segment, and asks the browser to play them as a single stream.&lt;/p&gt;

&lt;p&gt;The important detail is that the audio element keeps one source. Bare MP3 frames are appended to one MediaSource buffer in sequence mode. Changing the audio source at every segment or article boundary made mobile background playback fragile; keeping one stream also makes boundaries disappear for the listener.&lt;/p&gt;

&lt;p&gt;The player fetches ahead, retries individual segments, and can move from one article to the next without turning the queue into a playlist the user has to manage.&lt;/p&gt;

&lt;h2&gt;
  
  
  Constraint 3: keep the first audio fast when several people arrive
&lt;/h2&gt;

&lt;p&gt;Text-to-speech is the expensive path. A naive FIFO queue lets one listener fill every slot with a long article while everyone else waits.&lt;/p&gt;

&lt;p&gt;PressPlayed admits synthesis work fairly across accounts and gives priority to the segment a listener is audibly waiting for. The client limits requests in flight, while cached audio skips synthesis entirely. The goal is not maximum benchmark throughput; it is minimizing the time until each person hears useful audio.&lt;/p&gt;

&lt;h2&gt;
  
  
  Personalization should remove work
&lt;/h2&gt;

&lt;p&gt;The controls are intentionally small:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;narrator choice&lt;/li&gt;
&lt;li&gt;language choice&lt;/li&gt;
&lt;li&gt;minimum article length&lt;/li&gt;
&lt;li&gt;skip played articles&lt;/li&gt;
&lt;li&gt;muted words and phrases&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Muted terms can be global or briefing-specific. A person who does not want gambling coverage, for example, can remove articles containing “gambling” or “sportsbook” before they reach the queue.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I am trying to learn
&lt;/h2&gt;

&lt;p&gt;PressPlayed is live, free to try, and does not require a credit card. The public page includes a briefing sample and a short portrait tour of the real mobile interface:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://pressplayed.com/tour.html?utm_source=devto&amp;amp;utm_campaign=first100" rel="noopener noreferrer"&gt;Hear the sample and take the PressPlayed tour&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I would especially value feedback from people who use RSS or build audio products:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Is “sources become briefings” an intuitive model?&lt;/li&gt;
&lt;li&gt;Would you start from known publishers or from a topic?&lt;/li&gt;
&lt;li&gt;Which portability feature matters most: OPML import/export, visible raw feed URLs, or something else?&lt;/li&gt;
&lt;li&gt;What would make the first briefing worth returning to tomorrow?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I am happy to answer technical questions about the extraction, queueing, or browser-audio decisions.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>productivity</category>
      <category>rss</category>
    </item>
  </channel>
</rss>
