1
+# PRD: TechCrunch RSS Integration for Cross-Source Trend Correlation
2
+
3
+**Author:** Farnsworth (Analyst/Content Curator)
4
+**Date:** 2026-05-19
5
+**Status:** Draft
6
+**Type:** Feature PRD
7
+**Depends on:** .squad/decisions.md (Decision #7: Crawler Plugin Architecture), docs/PRD-topic-channels.md
8
+
9
+---
10
+
11
+## Executive Summary
12
+
13
+SquadScope currently derives all insights from a single signal source: GitHub activity. While GitHub reveals *what developers are building*, it cannot tell us *why* activity is spiking — whether it's organic community interest, a VC-backed launch, or a viral TechCrunch article driving attention. This PRD proposes integrating TechCrunch's RSS feed as SquadScope's first non-GitHub data source, enabling **cross-source trend correlation** that distinguishes organic momentum from press-driven hype.
14
+
15
+**Key insight:** GitHub star surges often lag TechCrunch coverage by 24–72 hours. Detecting this pattern lets SquadScope editorially distinguish "genuinely important" (organic growth) from "temporarily hyped" (press-driven spike that fades within a week).
16
+
17
+---
18
+
19
+## Problem Statement
20
+
21
+### What GitHub data alone cannot tell us
22
+
23
+1. **Causality is invisible.** A repo gaining 2,000 stars in a week is interesting, but *why* matters editorially. Is it because the project shipped a breakthrough feature, or because TechCrunch wrote about it and HN amplified?
24
+
25
+2. **Funding and launch context is missing.** When a startup raises a $50M Series B and open-sources their core library, GitHub shows a star spike — but without the funding context, the analysis misattributes organic community excitement.
26
+
27
+3. **Industry narrative gaps.** SquadScope's "Gaps" section (what's missing from the conversation) is currently limited to what's absent from GitHub. But sometimes the gap is between what the industry *claims* to care about (per press coverage) and what's actually *being built* (per GitHub).
28
+
29
+4. **Hype detection requires a baseline.** To identify noise, you need to know what the press machine is amplifying. Without press data, everything on GitHub looks equally "organic."
30
+
31
+5. **Prediction accuracy suffers.** The topic-channels PRD envisions a prediction ledger. Cross-referencing press coverage with subsequent GitHub activity dramatically improves prediction calibration.
32
+
33
+---
34
+
35
+## Value Proposition
36
+
37
+### For SquadScope readers
38
+
39
+| Current State (GitHub-only) | With TechCrunch Correlation |
40
+|---|---|
41
+| "Repo X gained 3,000 stars this week" | "Repo X gained 3,000 stars after TechCrunch covered their $30M raise — watch if stars sustain past week 2" |
42
+| "These 5 AI repos are trending" | "3 of 5 trending AI repos correlate with press coverage; 2 show organic growth (stronger signal)" |
43
+| "Gap: No new observability tools" | "Gap: TechCrunch covered 4 observability startups this month, but none have meaningful GitHub traction yet — vaporware risk" |
44
+
45
+### For SquadScope's editorial stance
46
+
47
+- **Critical thinking becomes measurable:** "Press-amplified vs. organically growing" is a concrete, data-backed editorial judgment
48
+- **Signal vs. noise gets sharper:** Hype detection moves from vibes-based to correlation-based
49
+- **The Gaps section gains depth:** Disconnects between press narrative and actual developer activity become visible
50
+
51
+---
52
+
53
+## Correlation Model
54
+
55
+### How TechCrunch articles map to GitHub signals
56
+
57
+```
58
+┌─────────────────┐ ┌──────────────────────┐
59
+│ TechCrunch RSS │ │ GitHub Weekly Crawl │
60
+│ (article feed) │ │ (repo activity) │
61
+└────────┬────────┘ └──────────┬───────────┘
62
+ │ │
63
+ ▼ ▼
64
+┌─────────────────┐ ┌──────────────────────┐
65
+│ Extract: │ │ Extract: │
66
+│ - Company/proj │ │ - Repo name/org │
67
+│ - Category │ │ - Star delta │
68
+│ - Funding amt │ │ - Fork delta │
69
+│ - GitHub links │ │ - Contributor growth │
70
+└────────┬────────┘ └──────────┬───────────┘
71
+ │ │
72
+ └──────────┬───────────────────┘
73
+ ▼
74
+ ┌─────────────────────┐
75
+ │ Correlation Engine │
76
+ │ (fuzzy matching) │
77
+ └──────────┬──────────┘
78
+ ▼
79
+ ┌─────────────────────┐
80
+ │ Annotated Analysis │
81
+ │ - press_correlated │
82
+ │ - organic_growth │
83
+ │ - hype_risk_score │
84
+ └─────────────────────┘
85
+```
86
+
87
+### Correlation heuristics
88
+
89
+1. **Direct link match:** TechCrunch article contains a GitHub URL → exact match to crawled repo
90
+2. **Organization match:** Article mentions company X → match to `github.com/X/*` repos gaining stars
91
+3. **Project name match:** Article title/body contains project name → fuzzy match against repo names in weekly crawl
92
+4. **Category correlation:** Article tagged "AI" published Monday → AI-category repos spiking by Thursday
93
+5. **Temporal lag analysis:** Stars gained within 72 hours of article publication → likely press-correlated
94
+
95
+### Hype risk scoring
96
+
97
+| Pattern | Hype Risk | Editorial Label |
98
+|---------|-----------|-----------------|
99
+| Stars spike post-article, sustain 2+ weeks | Low | "Press-validated, community-sustained" |
100
+| Stars spike post-article, decay within 7 days | High | "Press-driven hype, fading interest" |
101
+| Stars growing before any press coverage | Very Low | "Organic growth — genuinely interesting" |
102
+| Press coverage but no GitHub activity | Medium | "Announced but unbuilt / closed-source" |
103
+
104
+---
105
+
106
+## Technical Approach
107
+
108
+### Data Source: TechCrunch RSS
109
+
110
+- **Feed URL:** `https://techcrunch.com/feed/`
111
+- **Format:** RSS 2.0 / XML
112
+- **Update frequency:** ~20-40 articles/day
113
+- **Relevant categories:** Startups, Apps, AI, Funding, Open Source
114
+- **Rate limits:** None (public RSS)
115
+- **Content available in feed:** Title, excerpt/summary, author, publish date, categories, link
116
+
117
+### Architecture: Fits Decision #7 (Crawler Plugin)
118
+
119
+The existing `DataSource` protocol interface applies directly:
120
+
121
+```python
122
+class TechCrunchSource:
123
+ """Crawler plugin for TechCrunch RSS feed."""
124
+
125
+ def get_name(self) -> str:
126
+ return "techcrunch"
127
+
128
+ def get_rate_limits(self) -> RateLimits:
129
+ return RateLimits(requests_per_hour=10, burst=5)
130
+
131
+ async def crawl(self, config: CrawlConfig) -> CrawlResult:
132
+ """Fetch and parse TechCrunch RSS, extract structured articles."""
133
+ ...
134
+```
135
+
136
+### Data flow integration
137
+
138
+```
139
+Existing: data/raw/YYYY-WNN.json (GitHub crawl)
140
+New: data/raw/YYYY-WNN-techcrunch.json (TechCrunch crawl)
141
+Merged: data/analyzed/YYYY-WNN-summary.md (cross-referenced analysis)
142
+```
143
+
144
+### RSS parsing requirements
145
+
146
+| Requirement | Approach |
147
+|-------------|----------|
148
+| XML parsing | `feedparser` (Python) — battle-tested RSS library |
149
+| Category extraction | Map TC categories to SquadScope topic taxonomy |
150
+| GitHub link extraction | Regex scan article content for `github.com` URLs |
151
+| Entity extraction | Match company/project names against crawled repos |
152
+| Deduplication | Hash on article URL; skip already-processed items |
153
+| Storage | JSON array, same weekly naming as GitHub crawl |
154
+
155
+### Output schema (per article)
156
+
157
+```json
158
+{
159
+ "source": "techcrunch",
160
+ "title": "Anthropic open-sources Claude's tool-use framework",
161
+ "url": "https://techcrunch.com/2026/05/15/...",
162
+ "published_at": "2026-05-15T14:30:00Z",
163
+ "categories": ["ai", "open-source", "funding"],
164
+ "github_links": ["https://github.com/anthropics/tool-use-sdk"],
165
+ "entities": ["Anthropic", "Claude"],
166
+ "funding_amount": null,
167
+ "relevance_score": 0.85
168
+}
169
+```
170
+
171
+### Analyzer changes
172
+
173
+The analyzer prompt gains a new context block:
174
+
175
+```
176
+## Press Context (TechCrunch, week of {date})
177
+{N} articles published relevant to tech/open-source.
178
+Notable coverage:
179
+- {title} ({category}) — mentions {github_links}
180
+- ...
181
+
182
+Cross-reference: For each trending repo, note if press coverage
183
+preceded the star surge. Label as "press-correlated" or "organic."
184
+```
185
+
186
+---
187
+
188
+## Phases
189
+
190
+### Phase 1: RSS Crawl Plugin (1–2 weeks)
191
+
192
+- Implement `TechCrunchSource` crawler plugin
193
+- Parse RSS feed, extract structured article data
194
+- Store as `data/raw/YYYY-WNN-techcrunch.json`
195
+- Filter to tech/open-source relevant articles only
196
+- Basic deduplication
197
+- **Output:** Weekly TechCrunch article JSON alongside GitHub JSON
198
+
199
+### Phase 2: Correlation Engine (2–3 weeks)
200
+
201
+- Implement GitHub URL extraction from articles
202
+- Fuzzy entity matching (company name → GitHub org)
203
+- Temporal correlation (article date vs. star surge timing)
204
+- Add `press_correlated: bool` and `hype_risk: low|medium|high` to repo analysis
205
+- **Output:** Enriched analysis with cross-source annotations
206
+
207
+### Phase 3: Editorial Integration (1–2 weeks)
208
+
209
+- Update analyzer prompt to consume TechCrunch context
210
+- Add "Press vs. Reality" subsection to weekly summary
211
+- Surface disconnects in Gaps section
212
+- Update Hugo templates to render correlation badges
213
+- **Output:** Reader-facing cross-source insights on the published site
214
+
215
+### Phase 4: Prediction Enhancement (future)
216
+
217
+- Track whether press-correlated repos sustain momentum
218
+- Feed correlation accuracy back into prediction ledger
219
+- Calibrate hype risk scoring over time
220
+- **Output:** Improved prediction accuracy in topic channels
221
+
222
+---
223
+
224
+## Cost & Resource Impact
225
+
226
+| Resource | Impact |
227
+|----------|--------|
228
+| RSS fetch | Negligible (1 HTTP request/week, public feed, no auth) |
229
+| Storage | ~50-100 KB/week JSON (40 articles × metadata) |
230
+| Analyzer tokens | +500-800 tokens input context per run (~$0.002/week) |
231
+| API rate limits | Zero impact (RSS is not GitHub API) |
232
+| CI minutes | +5-10 seconds per run (RSS fetch + parse) |
233
+| Dependencies | `feedparser` (Python, MIT license, mature) |
234
+
235
+**Total incremental cost: <$0.01/week.** Trivial relative to base pipeline costs documented in PRD-cost-estimation.md.
236
+
237
+---
238
+
239
+## Risks & Mitigations
240
+
241
+| Risk | Probability | Impact | Mitigation |
242
+|------|------------|--------|------------|
243
+| TechCrunch changes RSS format | Low | Medium | feedparser handles format variations; alert on parse failures |
244
+| RSS feed discontinued | Very Low | Low | Graceful degradation — analysis runs without press context |
245
+| False correlations (noise) | Medium | Medium | Require temporal proximity (72h) + name match confidence >0.7 |
246
+| Over-weighting press signal | Medium | High | Editorial rule: press correlation is annotation, not ranking factor |
247
+| Content extraction blocked | Low | Low | Use RSS summary only, don't scrape full articles |
248
+
249
+---
250
+
251
+## Open Questions
252
+
253
+1. **OQ1: Should we also extract from TechCrunch's category-specific feeds?**
254
+ - `techcrunch.com/category/artificial-intelligence/feed/` for topic-channel alignment
255
+ - Pro: Better relevance filtering. Con: More feeds to manage.
256
+
257
+2. **OQ2: Full article fetch vs. RSS excerpt only?**
258
+ - RSS includes ~200 word excerpt. Full article requires HTTP fetch + HTML parsing.
259
+ - Recommendation: Start with RSS excerpt only. Avoids scraping concerns and ToS issues.
260
+
261
+3. **OQ3: Should correlation annotations be visible to readers or analyst-only?**
262
+ - Option A: Show "📰 Press-correlated" badge on repo entries
263
+ - Option B: Keep as internal signal that shapes editorial tone only
264
+ - Recommendation: Option A for transparency (readers deserve to know *why* something is trending)
265
+
266
+4. **OQ4: Add HackerNews as a second correlation source simultaneously?**
267
+ - HN has an API, overlaps with TechCrunch coverage, and better represents developer sentiment
268
+ - Recommendation: TechCrunch first (simpler, RSS), HN second (API, different signal)
269
+
270
+5. **OQ5: How to handle TechCrunch articles about closed-source products?**
271
+ - Many TC articles cover proprietary SaaS with no GitHub presence
272
+ - Recommendation: Filter to articles containing GitHub links OR open-source keywords only
273
+
274
+---
275
+
276
+## Success Criteria
277
+
278
+| Metric | Target | Measurement |
279
+|--------|--------|-------------|
280
+| Articles crawled per week | 15-40 relevant | Count in weekly JSON |
281
+| Correlation hit rate | >30% of trending repos have press match | Cross-reference accuracy |
282
+| Hype detection accuracy | >70% of "high hype risk" repos show star decay at week +2 | Retrospective validation |
283
+| Reader value signal | Qualitative improvement in Gaps section depth | Editorial review |
284
+| Zero pipeline failures from RSS source | 100% graceful degradation | CI logs |
285
+
286
+---
287
+
288
+## Relationship to Existing PRDs
289
+
290
+- **PRD-topic-channels.md:** TechCrunch correlation enriches per-topic analysis. AI-focused TC articles correlate with `ai-ml` topic channel repos.
291
+- **PRD-cost-estimation.md:** Incremental cost is negligible (<$0.01/week). No tier change needed.
292
+- **decisions.md Decision #7:** This is the first concrete implementation of the crawler plugin architecture.
293
+- **decisions.md MCP Tools:** TechCrunch RSS fetch can be an MCP tool, registered in allowlist per Decision 5.
294
+
295
+---
296
+
297
+## Editorial Philosophy Note
298
+
299
+TechCrunch integration does NOT mean SquadScope becomes a TechCrunch aggregator. The feed is a **correlation signal**, not content to republish. SquadScope's voice remains: "Here's what's actually happening on GitHub this week, and here's what the press says is happening. Notice the gap? That's where the real story is."
300
+
301
+The editorial value is in the *delta* between press narrative and developer activity — not in summarizing TechCrunch articles.