AI-summarized daily news digest β delivered to your inbox every morning.
Subscribe at minjungsung.github.io/hackdigest
HackDigest curates and summarizes the top stories across Tech, Stocks, and Real Estate, then delivers a personalized daily digest straight to your email. Each article is condensed into a 3-sentence summary using AI β so you stay informed without the noise.
100% serverless. $0/month to run.
- Multi-topic news curation
- π» Tech β Up to 5 Hacker News stories plus up to 5 hot LLM topics in one email
- π Stocks β Yahoo Finance (EN) / Korean market via Google News (KO)
- π Real Estate β Zillow Β· HousingWire Β· CNBC (EN) / Korean market via Google News (KO)
- Region-aware sources β Korean subscribers get Korean stock & real estate news, English subscribers get US sources
- AI-powered summaries β Groq Qwen model generates 3-sentence casual summaries, with Google Translate fallback
- Per-subscriber personalization β Choose your language + topics for a tailored digest
- Auto-detecting subscription page β Detects browser language, responsive UI
- Zero infrastructure cost β Runs entirely on GitHub Actions + Cloudflare Workers + GitHub Pages
- Security hardened β Automated security scanning on every deploy (injection detection, Bandit, secrets scan)
- Deploy automation β Relevant pushes to main clear the cache; test emails require a manual workflow run
Subscription Page (GitHub Pages)
β Cloudflare Worker (proxy)
β GitHub Actions repository_dispatch
β updates subscribers.json + sends welcome email
cronjob.io (daily trigger at KST 10:15)
β GitHub Actions workflow_dispatch
β Fetchers (HN API / LLM RSS + HN search / Yahoo Finance / Google News / Zillow / HousingWire / CNBC)
β Groq LLM summarization
β Per-subscriber email delivery via Gmail SMTP
| Component | Technology |
|---|---|
| Summarization | Groq API (qwen/qwen3.8-27b) |
| Translation fallback | Google Translate (free API) |
| Article extraction | trafilatura |
| RSS parsing | feedparser |
| Email delivery | Gmail SMTP (SSL) |
| Subscription proxy | Cloudflare Worker |
| CI/CD & runtime | GitHub Actions |
| Caching | GitHub Actions Cache (daily JSON) |
| Frontend | GitHub Pages (vanilla HTML/JS) |
| Scheduling | cronjob.io β workflow_dispatch |
| Security scanning | Bandit + custom injection/secrets checks |
| Dependency management | Dependabot (daily, auto-merge) |
- Fetch β Pulls top articles from multiple sources per topic
- Rank β Scores articles by impact keywords + multi-source appearance
- Summarize β Groq LLM generates a 3-sentence summary in the subscriber's language
- Cache β Stores articles + summaries as daily JSON (avoids redundant API calls)
- Deliver β Sends personalized HTML emails per subscriber per topic
The Tech digest monitors 24 company/model families: OpenAI, Anthropic, Google Gemini/DeepMind, Meta Llama, Mistral, DeepSeek, xAI, Alibaba Qwen, Amazon Nova, Microsoft Phi, NVIDIA Nemotron, IBM Granite, Cohere, AI21 Jamba, Baidu ERNIE, Tencent Hunyuan, ByteDance Doubao, Moonshot Kimi, Z.ai GLM, MiniMax, StepFun, Apple, Allen AI OLMo, and Hugging Face. Coverage combines official RSS, TechCrunch and Ars Technica feeds, targeted HN searches, and Google News searches restricted to established publishers. Research feeds include Sebastian Raschka, Simon Willison, Interconnects, Latent Space, Import AI, and Hugging Face. This is a monitored source list, not a guarantee of complete coverage.
LLM candidates must have a publication or HN submission timestamp within the past three days. Targeted HN searches collect stories with at least 20 points. The final selection requires at least 100 HN points or 40 comments, significant news covered by multiple independent sources, or an official core model/API launch. Topics are ranked by engagement, independent coverage, impact, and recency, with the hottest first. At most five LLM topics are included; quiet items do not fill empty slots. There is no quota per company.
Each LLM item identifies its source as official, external coverage, or research commentary. External coverage is not official confirmation. If the article body cannot be extracted, the email links to the original instead of inventing a summary from the model's knowledge. Some reporting sites require subscriptions. An unavailable source does not block the other sources. Stocks and real estate continue to use separate topic emails.
Within one Tech email, canonical URLs, normalized headlines, and close headline variants are deduplicated. An item selected for LLM is removed from the general HN section, so it appears once. Different model versions remain distinct. Deduplication applies within each email; no recipient delivery history is stored. Different headlines about one event may still escape conservative matching.
Visit minjungsung.github.io/hackdigest and enter your email. The page auto-detects your language β or toggle manually.
cronjob.io triggers a GitHub Actions workflow_dispatch at KST 10:15 every day.
GitHub Actions β HackDigest Daily β Run workflow β Check "Test mode" β Run
For a preview of this change, select its branch, enable "Test mode", and enable "In test mode, send only the combined Tech email". Non-main branches may run only explicitly selected manual tests, after publication validation. Test mode refuses delivery if the test recipient secret is missing.
Test mode sends only to EMAIL_TEST_TO. Uncheck to send to all subscribers.
Merging or pushing changes to main does not send a test digest. Use the manual workflow run above when you want to test email delivery. The automated daily digest continues separately.
src/
main.py # Entry point β orchestrates fetch β summarize β send
models.py # Article, Subscriber, Topic, Language models
subscribers.py # Subscriber CRUD (JSON-based)
summarizer.py # Groq LLM summarization + Google Translate fallback
notifier.py # HTML email builder + Gmail SMTP delivery
cache.py # Daily article/summary cache (JSON files)
fetchers/
__init__.py # Topic dispatcher with language-aware routing
tech.py # Hacker News API fetcher (score-ranked)
stocks.py # Stock news fetcher (Yahoo Finance EN / Google News KO)
realestate.py # Real estate fetcher (ZillowΒ·HousingWireΒ·CNBC EN / Google News KO)
docs/
index.html # Subscription page (GitHub Pages, i18n, auto-detect language)
worker/
src/index.js # Cloudflare Worker proxy (rate-limited, CORS, input validation)
scripts/
check_injection.py # CI security check for workflow injection vulnerabilities
- All external input is sanitized via environment variables (no
${{ }}in shell) - HTML email output is escaped to prevent XSS
- URL scheme whitelist blocks
javascript:injection - Cloudflare Worker validates and whitelists all input fields
- Automated security scan on every push: injection detection, Bandit, secrets scan, frontend XSS check
- Dependabot monitors dependencies daily with auto-merge
| Secret | Description |
|---|---|
EMAIL_TEST_TO |
Test recipient email |
EMAIL_FROM |
Sender Gmail address |
EMAIL_APP_PASSWORD |
Gmail app password |
GROQ_API_KEY |
Groq API key for LLM summarization |
Feedback and feature requests welcome! Check out the Discussions tab.
MIT