Founder, CDT Strategies · Silicon Valley political strategist & donor advisor
Notable clients: Ro Khanna, Josh Shapiro ($570K), Ed Markey, Biden 2020 Super PAC
Quoted in POLITICO · Roll Call · Spotlight PA
/teboe/fec-summary (overridden on backend success). The other tiles are not currently wired to a live re-computation endpoint — Phase 9 path is to ingest district-level public polls (Approval/Name ID), live sentiment recomputes (Sentiment), and FEC Q-by-Q (Khanna/Liccardo Q1 Raised).
Sources: backend/src/api/routes/teboe.py::priority · generator-version priority-v1 (not LLM-driven) · stat-grid methodology cards on each tab below.
last_cash_on_hand_end_period from the candidate’s most recent quarterly filing; coverage date shown beneath the figure. Refreshed every 6 h server-side.
backend/src/invisible_primary/influence_ranker.py · see invisible-primary-report.html §9 for the full methodology + back-test.
backend/src/analysis/narrative_tracker.py · ingestion source list: backend/src/ingestion/news.py RSS_FEEDS (Google News, NPR, BBC, NYT, Politico, The Hill).
docs/CATALYST_DATA_INTEGRITY.md · see Mandate compliance.
data/measured-2028-primary-crosstabs.json · backend/src/ingestion/polling.py.
| Headline | Source | Sentiment | Date |
|---|---|---|---|
| Khanna Secures $13.5M for CA-17 Community Projects | Congress.gov | POS | Feb 26 |
| Khanna Reintroduces Gasoline Export Ban Act | Reuters | POS | Apr 20 |
| Progressive Caucus Eyes 2028: Khanna Among Names | Politico | POS | Apr 12 |
| Silicon Valley Donors Shift Strategy for 2026 | Roll Call | NEU | Mar 30 |
| GOP Targets Khanna Over China Tech Positions | Fox News | NEG | Mar 18 |
backend/src/ingestion/followthemoney.py · backend/src/ingestion/fec.py.
cascade_simulator.py output — only contacts with a populated graph_node_id in the actor knowledge graph (today: Reid Hoffman only) trigger the Stiles threshold-cascade Monte Carlo. All other rows carry cascade_basis = “stored estimate, simulator backfill pending (no graph node yet)” in the backend payload. A score of 8.0 = ~80% of their immediate network follows when simulator-computed. Methodology corrected 2026-05-17 Phase 8.2.3 Pod 3 audit (prior version implied all scores were Monte Carlo-computed while the badge said LIVE — in reality, the values are stored estimates the backend itself flags as “simulator backfill pending”).
Source: backend/src/api/routes/teboe.py (stored-estimate fallback) · backend/src/invisible_primary/cascade_simulator.py (live path when graph_node_id is present).
backend/src/analysis/narrative_tracker.py · Phase 8.2 backlog (survey-panel A/B infra).
backend/src/api/routes/teboe.py::actions · role-gated POST/PATCH/DELETE; GET public to authed users.
last_cash_on_hand_end_period from the candidate’s most recent quarterly filing; coverage date shown beneath the figure. Refreshed every 6 h server-side.
backend/src/invisible_primary/influence_ranker.py · invisible-primary-report.html §9.
backend/src/analysis/narrative_tracker.py · backend/src/ingestion/news.py RSS_FEEDS list.
docs/CATALYST_DATA_INTEGRITY.md.
data/measured-2028-primary-crosstabs.json · backend/src/ingestion/polling.py.
| Headline | Source | Sentiment | Date |
|---|---|---|---|
| Liccardo Joins AI Caucus, Pushes Tech Governance Bills | Mercury News | POS | Apr 18 |
| Navigation Center Model Gets Federal Attention | WaPo | POS | Apr 5 |
| CA-16 Freshman Balances Tech and Labor | Politico CA | NEU | Mar 22 |
| Progressive Groups Question Police Reform Record | The Intercept | NEG | Mar 10 |
backend/src/ingestion/followthemoney.py · backend/src/ingestion/fec.py.
backend/src/invisible_primary/cascade_simulator.py.
backend/src/analysis/narrative_tracker.py · Phase 8.2 backlog.
last_cash_on_hand_end_period from the candidate’s most recent quarterly filing; coverage date shown beneath the figure. Refreshed every 6 h server-side. Note: stat-box label is “Cash on Hand” (cycle-to-date cash), not “Total Raised”.
backend/src/invisible_primary/influence_ranker.py · invisible-primary-report.html §9.
backend/src/analysis/narrative_tracker.py · backend/src/ingestion/news.py.
docs/CATALYST_DATA_INTEGRITY.md.
kxca04primary — top-two advancement-probability market, snapshot 2026-05-02 (not vote share).data/measured-2028-primary-crosstabs.json (ca_4_market_probabilities_2026_05_02) · backend/src/ingestion/polling.py.
| Headline | Source | Sentiment | Date |
|---|---|---|---|
| Eric Jones Seeks to Provide 'American Dream' in U.S. House | Daily Democrat | POS | Apr 5 |
| CA-4 Primary: Jones Challenges Thompson on Affordability | Sac Bee | NEU | Mar 28 |
| PG&E Rate Hikes Draw Congressional Scrutiny | SF Chronicle | POS | Mar 15 |
| Thompson Defends 26-Year Record | Napa Register | NEU | Mar 8 |
backend/src/ingestion/followthemoney.py.
backend/src/analysis/narrative_tracker.py · Phase 8.2 backlog.
backend/src/invisible_primary/influence_ranker.py · invisible-primary-report.html §9.
backend/src/ingestion/teboe_news.py::CANDIDATE_QUERIES picks up shapiro with queries anchored on 'Josh Shapiro' Pennsylvania Governor / PA Governor / Governor Shapiro Pennsylvania). Until the backend redeploys, this tile may show '—' / 'loading…' — we surface that honestly rather than fabricate.
Source: backend/src/analysis/narrative_tracker.py · backend/src/ingestion/teboe_news.py.
backend/src/ingestion/polling.py to pull Franklin & Marshall PA wave releases and Quinnipiac PA cross-tabs. Until then we render this gap rather than a fabricated curve, per M3.
CATALYST_DATA_INTEGRITY.md M3 (honest about gaps): we surface this absence and the close-the-gap path rather than display a fabricated PA favorability curve. Phase 9.x scope: add Franklin & Marshall (cadence: 4×/yr) + Quinnipiac PA (cadence: variable) as named static sources in backend/src/ingestion/polling.py; render values as SOURCED.
Source: none on-disk yet · backend coverage pending Phase 9.x · docs/CATALYST_DATA_INTEGRITY.md#m3.
| Headline | Source | Sentiment | Date |
|---|---|---|---|
| loading /api/v1/teboe/news?candidate_id=shapiro… (added to backend principals config 2026-05-18; tile shows '—' until backend redeploys with new query) | |||
backend/src/ingestion/followthemoney.py to pull FollowTheMoney.org PA state filings.
Source: backend dark-money corpus is FEC IE + IRS 8872; PA state coverage pending.
python3 scripts/scrape_x_sentiment.py --handles GovernorShapiro.
backend/src/analysis/narrative_tracker.py · Phase 9.x scope.
CATALYST_DATA_INTEGRITY.md E1 — not generated by a backend model.| Candidate | Ferguson | Fundraising | Strength | Vulnerability |
|---|---|---|---|---|
| Gretchen Whitmer | 62.8 | $8.2M PAC | Midwest electability | National name ID |
| Josh Shapiro | 58.4 | $5.5M cycle | PA margin + bipartisan | Progressive trust |
| Gavin Newsom | 54.1 | $12M+ fund | Fundraising machine | Net approval -12 |
| Pete Buttigieg | 51.7 | $3.8M PAC | Media + Cabinet exp | Black voter gap |
| Andy Beshear | 48.3 | $2.1M PAC | Won KY twice | Limited nat'l profile |
| Ro Khanna | 41.2 | $1.8M Q1 | Progressive + tech | Name ID outside CA |
| J.B. Pritzker | 39.6 | unlikely to self-fund (NBC May 2026) | Personal wealth + IL machine | Billionaire label |
docs/CATALYST_DATA_INTEGRITY.md — click any data point to open the underlying post on x.com.nitter.tiekoetter.com mirror with failover to 5 other mirrors (nitter.net, nitter.poast.org, nitter.privacydev.net, nitter.kavin.rocks, nitter.unixfox.eu) and exponential backoff. Each post passed through VADER, a deterministic lexicon-based sentiment analyser (no LLM, reproducible). Compound score [−1, +1] aggregated into UTC daily bins; bin only renders if it contains at least one post. Phase 9.1 (2026-05-18): each post's reply thread is also scraped from the same mirror and the replies are VADER-classified; the dashed line on each chart is the daily reply-sentiment weighted by per-post reply count (a viral post's reply mood matters more than a 2-reply post's). Days with zero scrape-able replies render as a gap in the dashed line (NOT a zero) per M3 (honest about gaps). The scrape window is the actual span the mirror returns; no interpolation across empty days. Each chart point hyperlinks to the originating x.com post for verification. Scrape is opt-in (python3 scripts/scrape_x_sentiment.py); the page is purely a renderer over the resulting JSON files — it does not invent posts or replies when the scrape fails.
Source: nitter mirror walk (public X timelines, no auth) · Classifier: VADER 3.x (deterministic) · Data files: data/sentiment-{handle}.json · Most-recent run: (loading…) · Re-run cadence: manual (Phase 9.x path is nightly cron + xurl-authenticated direct X v2 reads).
/api/v1/teboe/fec-summary · FEC EFDS bulk feed, refreshed 6 h/api/v1/teboe/donor-overlap · FEC Schedule A, name+ZIP5 match, current cycle/api/v1/teboe/priority · deterministic rule-based generator (not LLM)/api/v1/teboe/news · Google News + 4 RSS + 3 Reddit · VADER+lexiconcascade_simulator.py Stiles threshold-cascade Monte Carlo/api/v1/teboe/donor-overlap, FEC Schedule A name+ZIP5 match, current cycle); @RoKhanna / @RepLiccardo / @TeboeCooper / @GovernorShapiro daily sentiment (×4) = SOURCED (nitter.tiekoetter.com scrape + VADER 3.x; real scrape window, not interpolated)./api/v1/teboe/actions · senior-role-gated editor with audit logscripts/scrape_x_sentiment.py against nitter.tiekoetter.com mirror (fallback nitter.net); each post classified by VADER 3.x (deterministic lexicon). Window = real scrape extent per handle, not interpolated. Re-run manually; nightly-cron + xurl-authenticated v2 direct in Phase 9 roadmap.docs/CATALYST_DATA_INTEGRITY.md (Captain directive 2026-05-17). 🔄 Refresh affordance (Phase 8.1.2): the floating “↻ Refresh data” button (bottom-right) re-fires every live source on this page in parallel; per-section ↻ buttons next to each methodology card refresh just that source. Source freshness reflects each payload’s actual coverage window (FEC coverage_end_date, news published_at, donor-overlap as_of, etc.), not now(). If any value on this page is unclear, click the methodology card next to it or contact hallie@brainworks.ai.