<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Automation on CZ Builds</title><link>https://cz-builds.github.io/blog/tags/automation/</link><description>Recent content in Automation 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/automation/index.xml" rel="self" type="application/rss+xml"/><item><title>I Built a Fully Automated AI Newsletter in 3 Days. Here's Why I'm Pivoting.</title><link>https://cz-builds.github.io/blog/post/pandabrief-retro/</link><pubDate>Sun, 12 Apr 2026 00:00:00 +0000</pubDate><guid>https://cz-builds.github.io/blog/post/pandabrief-retro/</guid><description>&lt;p&gt;Last week I built &lt;strong&gt;PandaBrief&lt;/strong&gt; — a fully automated daily newsletter that translates Chinese tech news into English. From RSS ingestion to LLM scoring to email delivery, zero human intervention required.&lt;/p&gt;
&lt;p&gt;The entire pipeline runs on GitHub Actions, costs $0/month, and handles everything from content curation to subscriber management to self-healing code fixes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Then I realized the product itself might not be worth building.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="what-i-built"&gt;What I Built
&lt;/h2&gt;&lt;p&gt;The system has 8 automated steps that run every day:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;RSS Fetch (16 sources) → LLM Scoring → Dedup → Translation → 
Quality Check → Render HTML → Send Email → Operator Report
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Tech stack:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Content pipeline&lt;/strong&gt;: Python + Groq/Gemini API (free tier, with auto-fallback)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hosting&lt;/strong&gt;: Cloudflare Pages + KV storage (free)&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;CI/CD&lt;/strong&gt;: GitHub Actions (free)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Auto-fix&lt;/strong&gt;: LLM reads GitHub Issues → generates patches → opens PRs → emails me to review&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Total monthly cost: &lt;strong&gt;$0&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="the-interesting-engineering-problems"&gt;The Interesting Engineering Problems
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;LLM rate limits&lt;/strong&gt;: Groq&amp;rsquo;s free tier gives you 100K tokens/day. My pipeline burned through that in one run. Solution: built a provider fallback chain (Groq → Gemini → Zhipu) that automatically switches when one provider hits its limit.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Chinese character corruption&lt;/strong&gt;: When asking the LLM to output complete file contents for auto-fix PRs, it would corrupt Chinese characters in source configs (量子位 → 量种体). Solution: switched from &amp;ldquo;output the whole file&amp;rdquo; to &amp;ldquo;output search-and-replace patches&amp;rdquo; — the LLM copies exact text and only modifies the target section.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Quality gate false positives&lt;/strong&gt;: The translation step uses full article text (3000 chars), but the quality checker only saw a 200-char snippet. It flagged 9/10 translations as &amp;ldquo;hallucinated&amp;rdquo; because it couldn&amp;rsquo;t find details that were actually in the full article. Solution: give the checker more context and tell it &amp;ldquo;the translator had access to the full article.&amp;rdquo;&lt;/p&gt;
&lt;h2 id="why-im-pivoting"&gt;Why I&amp;rsquo;m Pivoting
&lt;/h2&gt;&lt;p&gt;The engineering was fun. But the product has fundamental problems:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Translation is no longer a moat.&lt;/strong&gt; In 2026, anyone can paste Chinese text into ChatGPT. A newsletter that translates is competing with a free, instant, universal tool.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;The audience doesn&amp;rsquo;t have a strong pain point.&lt;/strong&gt; &amp;ldquo;Staying updated on Chinese tech&amp;rdquo; is nice-to-have for Western devs, not must-have. Nobody&amp;rsquo;s workflow breaks without it.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;AI Overviews are eating informational content.&lt;/strong&gt; Google&amp;rsquo;s AI Overviews now reduce click-through rates by 58% for informational queries. The trend is accelerating.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;The Chinese AI narrative has a credibility problem.&lt;/strong&gt; Model distillation controversies, benchmark optimization concerns — the Western dev community is increasingly skeptical. Translating these stories doesn&amp;rsquo;t add trust, it just amplifies noise.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="what-i-actually-learned"&gt;What I Actually Learned
&lt;/h2&gt;&lt;p&gt;The project wasn&amp;rsquo;t a waste. I learned more in 3 days of building than in weeks of tutorials:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;How to orchestrate multi-step LLM pipelines with fallback and retry logic&lt;/li&gt;
&lt;li&gt;Cloudflare Pages + KV as a zero-cost deployment platform&lt;/li&gt;
&lt;li&gt;GitHub Actions as a free cron + CI/CD system&lt;/li&gt;
&lt;li&gt;How to make LLMs generate safe, reviewable code changes (search-and-replace, not full rewrites)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Most importantly: &lt;strong&gt;the ability to quickly build and ship automated systems is valuable, but it needs to be pointed at a real problem.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="whats-next"&gt;What&amp;rsquo;s Next
&lt;/h2&gt;&lt;p&gt;I&amp;rsquo;m an IC (integrated circuit) student with FPGA experience. The AI arms race everyone talks about is fundamentally a &lt;strong&gt;hardware&lt;/strong&gt; arms race. I&amp;rsquo;m going to explore the intersection of AI and hardware — starting with running neural network inference on my Zynq-7020 FPGA.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll document everything here. Follow along if you&amp;rsquo;re interested in where silicon meets intelligence.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;This is the first post on this blog. I&amp;rsquo;m building in public — sharing what I learn, build, and think about at the intersection of AI and hardware.&lt;/em&gt;&lt;/p&gt;</description></item><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>