<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Productivity on CZ Builds</title><link>https://cz-builds.github.io/blog/tags/productivity/</link><description>Recent content in Productivity on CZ Builds</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Sun, 12 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://cz-builds.github.io/blog/tags/productivity/index.xml" rel="self" type="application/rss+xml"/><item><title>I Built a Personal AI News Agent That Emails Me Every Morning</title><link>https://cz-builds.github.io/blog/post/daily-digest/</link><pubDate>Sun, 12 Apr 2026 00:00:00 +0000</pubDate><guid>https://cz-builds.github.io/blog/post/daily-digest/</guid><description>&lt;p&gt;I spend too much time scrolling Hacker News, arxiv, and tech Twitter. Most of it is noise. So I built a system that does the filtering for me — every morning at 6 AM, I get an email with the 10 most relevant stories across AI, semiconductors, and space.&lt;/p&gt;
&lt;p&gt;Fully automated. Zero cost. Built in an afternoon.&lt;/p&gt;
&lt;h2 id="the-problem"&gt;The Problem
&lt;/h2&gt;&lt;p&gt;My information diet was broken:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Douyin/YouTube recommendations&lt;/strong&gt; — optimized for engagement, not relevance&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Manually checking 10+ sites&lt;/strong&gt; — time-consuming, easy to miss things&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Asking ChatGPT&lt;/strong&gt; — no context about what I specifically care about&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I wanted something that knows my interests (AI hardware, FPGA, space engineering) and filters 200+ daily articles down to the 10 that actually matter.&lt;/p&gt;
&lt;h2 id="how-it-works"&gt;How It Works
&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;9 RSS Sources → Fetch → LLM Scoring → Summarize (bilingual) → Email
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Every day at 6 AM Beijing time, a GitHub Actions workflow:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Fetches&lt;/strong&gt; ~150 articles from 9 sources (Hacker News, arxiv, Ars Technica Space, SemiAnalysis, EE Times, etc.)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scores&lt;/strong&gt; each article 1-10 based on my specific interests using Gemini&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Summarizes&lt;/strong&gt; the top 10 in both English and Chinese&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Emails&lt;/strong&gt; the digest to me with links to every original article&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="the-scoring-prompt"&gt;The Scoring Prompt
&lt;/h3&gt;&lt;p&gt;This is where the personalization lives. The LLM knows I&amp;rsquo;m an IC student interested in:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AI inference on edge hardware (FPGA/ASIC)&lt;/li&gt;
&lt;li&gt;Semiconductor industry moves&lt;/li&gt;
&lt;li&gt;Space technology engineering details&lt;/li&gt;
&lt;li&gt;Open source AI tools&lt;/li&gt;
&lt;li&gt;Contrarian technical takes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A paper about efficient transformer inference on resource-constrained chips scores 9/10. A generic &amp;ldquo;AI will change everything&amp;rdquo; opinion piece scores 2/10.&lt;/p&gt;
&lt;h3 id="model-fallback-chain"&gt;Model Fallback Chain
&lt;/h3&gt;&lt;p&gt;Free API tiers have rate limits. Instead of failing when one model is exhausted, the system automatically falls back:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;gemini-2.5-flash (best quality, 20 req/day)
 ↓ exhausted? auto-switch
gemini-2.0-flash (good quality, 1500 req/day)
 ↓ exhausted? auto-switch
gemini-2.0-flash-lite (basic, unlimited)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The most important items get processed by the best model. Later items gracefully degrade.&lt;/p&gt;
&lt;h2 id="sources"&gt;Sources
&lt;/h2&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Source&lt;/th&gt;
 &lt;th&gt;Category&lt;/th&gt;
 &lt;th&gt;Why&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Hacker News&lt;/td&gt;
 &lt;td&gt;AI &amp;amp; Tech&lt;/td&gt;
 &lt;td&gt;High signal-to-noise, community-validated&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;arxiv cs.AI&lt;/td&gt;
 &lt;td&gt;AI Research&lt;/td&gt;
 &lt;td&gt;Primary source for papers&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;arxiv cs.AR&lt;/td&gt;
 &lt;td&gt;Hardware&lt;/td&gt;
 &lt;td&gt;Computer architecture papers&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;SemiAnalysis&lt;/td&gt;
 &lt;td&gt;Hardware&lt;/td&gt;
 &lt;td&gt;Best semiconductor industry analysis&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;EE Times&lt;/td&gt;
 &lt;td&gt;Hardware&lt;/td&gt;
 &lt;td&gt;Electronics engineering news&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;MIT News AI&lt;/td&gt;
 &lt;td&gt;AI Research&lt;/td&gt;
 &lt;td&gt;Research breakthroughs&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Ars Technica Space&lt;/td&gt;
 &lt;td&gt;Space&lt;/td&gt;
 &lt;td&gt;Eric Berger&amp;rsquo;s space reporting&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Everyday Astronaut&lt;/td&gt;
 &lt;td&gt;Space&lt;/td&gt;
 &lt;td&gt;Deep engineering explanations&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;SpaceNews&lt;/td&gt;
 &lt;td&gt;Space&lt;/td&gt;
 &lt;td&gt;Industry coverage&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="tech-stack"&gt;Tech Stack
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Pipeline&lt;/strong&gt;: Python (feedparser + google-genai + resend)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Database&lt;/strong&gt;: SQLite (ephemeral, rebuilt each run)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scheduling&lt;/strong&gt;: GitHub Actions cron (free)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LLM&lt;/strong&gt;: Gemini API (free tier)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Email&lt;/strong&gt;: Resend (free tier)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Total cost&lt;/strong&gt;: $0/month&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="what-i-learned-from-pandabrief"&gt;What I Learned from PandaBrief
&lt;/h2&gt;&lt;p&gt;This project reuses the architecture from &lt;a class="link" href="https://cz-builds.github.io/blog/post/pandabrief-retro/" &gt;PandaBrief&lt;/a&gt;, my previous newsletter project. Key improvements:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Model fallback chain&lt;/strong&gt; — never fail because of rate limits&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bilingual output&lt;/strong&gt; — Chinese + English in one prompt call&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Personalized scoring&lt;/strong&gt; — not generic &amp;ldquo;is this important&amp;rdquo; but &amp;ldquo;is this important &lt;em&gt;to me&lt;/em&gt;&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Private by default&lt;/strong&gt; — this is a personal tool, not a product&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The biggest lesson: the same automation pipeline that couldn&amp;rsquo;t sustain a public product works perfectly as a personal productivity tool. The difference is that I&amp;rsquo;m the only user, so I can tune the scoring to exactly what I care about.&lt;/p&gt;
&lt;h2 id="try-it-yourself"&gt;Try It Yourself
&lt;/h2&gt;&lt;p&gt;The code is at &lt;a class="link" href="https://github.com/cz-builds/daily-digest" target="_blank" rel="noopener"
 &gt;github.com/cz-builds/daily-digest&lt;/a&gt;. Fork it, change &lt;code&gt;sources.yaml&lt;/code&gt; and the scoring prompt to match your interests, add your API keys as GitHub Secrets, and you&amp;rsquo;ll have your own AI-curated morning briefing.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;This is part of my &lt;a class="link" href="https://cz-builds.github.io/blog/categories/build-log/" &gt;build in public&lt;/a&gt; series. I&amp;rsquo;m an IC student exploring the intersection of AI and hardware.&lt;/em&gt;&lt;/p&gt;</description></item></channel></rss>