{/* Information architecture */}
{/* Data pipeline */}
{/* Conceptual data model */}
Schematic — not a full ER diagram. Spine: PersonProfile connects to everything; RelationshipEdge stores derived links (type, strength, signals, explanation).
{[
{n:'Weighted similarity', f:'cosine(weighted subdomain vectors)', use:'who works on the same things, in the same proportion'},
{n:'Category overlap', f:'Jaccard(domains) · Jaccard(methods) · Jaccard(sectors)', use:'who shares a vocabulary'},
{n:'Need ↔ Offer', f:'count(needsᵢ ∩ offersⱼ) + reverse', use:'practical complementarity, the highest-value match'},
{n:'Project compatibility', f:'distance(stage, TRL, scale, application)', use:'projects ready to talk to each other'},
{n:'Anti-duplication', f:'sim(challenges) × sim(bottlenecks) > τ', use:'two teams hitting the same wall'},
{n:'Shared uncertainty', f:'overlap(uncertainty domains) · planning horizon', use:'co-learning candidates'},
{n:'Bridge detection', f:'high cross-sector ties / low intra-cluster only', use:'connectors who knit the ecosystem'},
{n:'Method transfer', f:'A.method ∩ B.challengeNeedsMethod', use:'one person\'s tool is another\'s missing piece'},
{n:'Centrality', f:'betweenness · degree · eigenvector', use:'graph health; spotlight hubs & isolates'},
].map(a => (
{a.n}
{a.f}
{a.use}
))}
Every edge stores: source · target · type · strength (0–1) · signals[] · explanation · confidence · curator-reviewed? The explanation is shown verbatim in the “Why this match” panel — no black box.
{/* Visual semantics legend */}