<?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: Yangbin Zhang</title>
    <description>The latest articles on DEV Community by Yangbin Zhang (@nikefd).</description>
    <link>https://dev.to/nikefd</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%2F4233000%2Fa22c50e9-3aeb-4ab8-a703-417eef6cc944.jpg</url>
      <title>DEV Community: Yangbin Zhang</title>
      <link>https://dev.to/nikefd</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nikefd"/>
    <language>en</language>
    <item>
      <title>I built a self-hosted AI news reader with source-linked daily briefings</title>
      <dc:creator>Yangbin Zhang</dc:creator>
      <pubDate>Sun, 08 Nov 2026 02:42:52 +0000</pubDate>
      <link>https://dev.to/nikefd/i-built-a-self-hosted-ai-news-reader-with-source-linked-daily-briefings-52c0</link>
      <guid>https://dev.to/nikefd/i-built-a-self-hosted-ai-news-reader-with-source-linked-daily-briefings-52c0</guid>
      <description>&lt;p&gt;AI updates are scattered across release blogs, API changelogs, research feeds, and open-source projects. Finding the announcement is one step; figuring out whether it deserves a closer look is another.&lt;/p&gt;

&lt;p&gt;I built &lt;strong&gt;AI Frontier Agent&lt;/strong&gt; to bring those updates into one place. It is an open-source, self-hosted reader that groups related coverage and generates daily briefings in English and Chinese, with links back to the original sources.&lt;/p&gt;

&lt;p&gt;You can &lt;a href="https://ai.zhangyangbin.com/summary?lang=en" rel="noopener noreferrer"&gt;read the public English briefing&lt;/a&gt; without creating an account, or &lt;a href="https://github.com/nikefd/ai-frontier-agent" rel="noopener noreferrer"&gt;browse the code on GitHub&lt;/a&gt;.&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%2F4djoxz7h2g0vueavrim6.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%2F4djoxz7h2g0vueavrim6.png" alt="An English daily briefing with numbered citations to the original sources" width="799" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with a briefing, then check the source
&lt;/h2&gt;

&lt;p&gt;The reading flow is simple: scan a briefing, follow a citation for an interesting item, then open the original announcement or paper. Related reports are grouped so you can read about an event without treating every report as a separate update.&lt;/p&gt;

&lt;p&gt;The configured sources cover model releases, API changes, engineering blogs, papers, and selected communities. Sources refresh at different intervals, depending on their tier.&lt;/p&gt;

&lt;p&gt;The article feed also supports search and source filters. If you prefer your existing RSS reader, there is an &lt;a href="https://ai.zhangyangbin.com/rss/digest.xml?lang=en" rel="noopener noreferrer"&gt;English briefing feed&lt;/a&gt;.&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%2F9qx2yvlehuh26fw4e6v8.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%2F9qx2yvlehuh26fw4e6v8.png" alt="The article feed with source categories and reading actions" width="799" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These screenshots show the demo on November 4, 2026. The live content changes over time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Make missing updates easier to investigate
&lt;/h2&gt;

&lt;p&gt;One part I care about is knowing when a source stops working. A quiet feed can mean there is no news, but it can also mean a parser broke or a website started rate-limiting requests.&lt;/p&gt;

&lt;p&gt;The app exposes source health and freshness information to help investigate those cases. That does not prove complete coverage of AI news; it gives me a way to inspect the sources the app is configured to follow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Self-hosting and model costs
&lt;/h2&gt;

&lt;p&gt;The app uses FastAPI and a Vite frontend. A single application process serves the UI and runs scheduled jobs. Docker Compose also starts RSSHub and Redis, while application data lives in a persistent volume.&lt;/p&gt;

&lt;p&gt;AI features use the OpenAI-compatible endpoint and model you configure. The default provider is DeepSeek, so an OpenAI API key is not required. Fetching and browsing work without a model key; generated briefings, deep dives, and chat require one.&lt;/p&gt;

&lt;p&gt;Self-hosters cover their own infrastructure and model costs. The bilingual briefing is generated in one request with two renditions, so it uses more output tokens than a single-language version. Reading a cached briefing or switching the interface language does not trigger a model call.&lt;/p&gt;

&lt;p&gt;For installation, follow the &lt;a href="https://github.com/nikefd/ai-frontier-agent#quick-start-with-docker-compose" rel="noopener noreferrer"&gt;Docker Compose quick start&lt;/a&gt;. It includes creating the first administrator before exposing the service publicly. A fresh installation starts with an empty feed; sign in and select &lt;strong&gt;Fetch now&lt;/strong&gt; to populate it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is still limited
&lt;/h2&gt;

&lt;p&gt;This is an early project. Upstream feeds can fail, and generated summaries need checking against the sources. English article mode displays original titles and summaries; it does not translate every source or previously saved document into English.&lt;/p&gt;

&lt;p&gt;Signed-in users can save bookmarks and generate deeper explanations or experiment cards. Those features are optional—you can try the public reading experience first.&lt;/p&gt;

&lt;p&gt;The project is licensed under &lt;strong&gt;Apache-2.0&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I would like feedback on
&lt;/h2&gt;

&lt;p&gt;If you try one briefing, which item would you actually open? Is there anything repetitive, unclear, or missing?&lt;/p&gt;

&lt;p&gt;If you try deploying it, where does setup first become confusing? A concrete example or a GitHub issue would help me decide what to improve next.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ai.zhangyangbin.com/summary?lang=en" rel="noopener noreferrer"&gt;Try the English briefing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ai.zhangyangbin.com/feed?lang=en" rel="noopener noreferrer"&gt;Browse the article feed&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nikefd/ai-frontier-agent" rel="noopener noreferrer"&gt;Source code and setup instructions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>selfhosted</category>
      <category>opensource</category>
      <category>ai</category>
      <category>python</category>
    </item>
  </channel>
</rss>
