A living map of the relationship-intelligence platform: turning Thunder's network into answers about who fits an opportunity and who can warmly introduce us. Updated as we make progress.
Every external connection the graph depends on — data sources, enrichment APIs, and AI. Keys live in .env.prod on EC2.
Nightly cron runs automatically on EC2 (~2am UTC). On-demand workers can be triggered from the web UI or SSH.
Sequenced for value-first: each step makes the answers warmer and the system more self-serve.
What materially changed, newest first.
Every recommendation is one number combining three things: how relevant the firm is to the deal, how warm our relationship with it is, and who can make the intro. Below is every tunable knob, its live value, and what moving it does. Each knob has a NAME and a FILE so you can point me straight at it.
W_RELATIONSHIP to 0.35", "make in-person meetings worth 10 in warmth", or "don't show VC funds for a buyout raise." I'll edit the source, verify, and redeploy.The ranking is now 100% match relevance (Jason, 2026-06-29). Relationship warmth and the strongest-connection / owner path are still computed per firm, but as separate, sortable signals + stats — never folded into the rank. recommend.mjs.
10 components earn raw points, summed → squashed through a logistic curve (sigmoid, midpoint 45, steepness k=0.05) → 0–100 → multiplied by the firm-type fit weight (§3). Company Quality (score_z) was removed (Jason, 2026-06-29) — fit drives relevance, not the company's own score. compatibility.mjs.
A soft multiplier on relevance, by firm type and intent. 1.0 = ideal · partial · 0 = wrong type → deep-demoted to 5% (OFFTYPE_FLOOR) and sorted to the very bottom (never hard-deleted). recommend.mjs.
"Raise (any)" applies when no financing structure is chosen; picking venture / buyout / debt swaps in that more specific column. Acquire intent uses a separate target-company path (§8), not this table.
When the deal maps to a real Thunder-App company, we blend in the precomputed prod relevance prior as a cross-check. recommend.mjs + match-score.mjs.
Canonical warmth (warmth.mjs, faithful port of the prod WarmthScorer). Four components sum to 0–100, scored identically across every source.
Some cohorts carry a fixed warmth boost that survives the nightly recompute — applied by score-warmth.mjs after the base recompute, capped at 100. So a member with no touch history still floors at the bonus value, and a touched member gets base + bonus.
"Me-first": your own relationships outrank teammates'. The best available path sets the score. recommend.mjs.
The acquire intent matches target companies in our network (not investor firms), scored on its own additive scale (0–100). recommendTargets().
The fastest way to brief me. Pick a row, tell me the value, I'll handle the edit + redeploy.