// 00 SYSTEM tab — vision, IA, data model, matching pipeline. Diagram-heavy. const SystemTab = () => (
{/* Vision band */}
A lightweight, human-in-the-loop matchmaker for the hydrogen learning ecosystem — discovery + matching, not a heavy platform.
NOT: survey clone · CRM · social network · decorative graph
IS: guided profiling → structured DB → explainable matches → graph exploration
ResearchersPhD candidatesLecturers Project leadsInnovation mgrsIndustry actors Public sectorBridge-builders Curators (admin)
Similarityoverlap of domains/methods
Complementarityneed ↔ offer
Anti-duplicationsame blocker, parallel work
Bridgecross-sector connector
Method transferyour method, their problem
Shared uncertaintyco-learning
{/* Information architecture */} {/* root */} H2Learn app root {/* major branches */} {[ ['Landing', 60, 120], ['Auth', 210, 120], ['Onboarding Q.', 360, 120], ['Dashboard', 510, 120], ['Discovery', 660, 120], ['Network', 810, 120], ['Admin', 960, 120], ].map(([l,x,y]) => ( {l} ))} {/* sub branches under each */} {[ [60, ['Pitch','Modules','Login']], [210,['Sign in','Sign up','SSO']], [360,['Identity','Knowledge','Project','Challenges','Bottlenecks','Uncertainty','Evidence','Review']], [510,['My profile','Completion','Recent matches','Saved','Settings']], [660,['Search','Filters','Cards','Compare','Saved views']], [810,['Force','Cluster','Focus','Path','Anti-dup','Need-Offer']], [960,['Review queue','Taxonomy','Matches','Health']], ].map(([x, items]) => ( {items.map((item, i) => ( {item} ))} ))} {/* Data pipeline */} {[ ['1','Questionnaire',60, 'Identity / Knowledge / Project /\nChallenges / Bottlenecks / Uncertainty / Evidence', '#fff7cc'], ['2','Normalize',230, 'Map answers → entities & tags\n(taxonomy-controlled)', '#fbfaf6'], ['3','Profile signals',400, 'Weighted fingerprint\nNeeds / Offers vectors', '#fbfaf6'], ['4','Compare',570, 'Cosine · Jaccard · need↔offer\nbridge · centrality', '#fbfaf6'], ['5','Relationship edges',740, 'type · strength · evidence\nexplainable signals', '#fbfaf6'], ['6','Graph + matches',910, 'Network view\n+ ranked match list', '#dceaff'], ].map(([n,t,x,sub,bg]) => ( {n} {t} {sub.split('\n').map((s, i) => ( {s} ))} {x < 910 && ( )} ))} human-in-the-loop · transparent · explainable · re-runnable {/* Conceptual data model */}
{/* entities laid out */} {[ ['User', 50, 30, '#fff7cc'], ['PersonProfile',180, 30, '#dceaff'], ['Organization',360, 30, '#d8efe2'], ['Project', 270,120, '#fde2cf'], ['KnowledgeDomain', 50,200,'#f0e0ee'], ['Subdomain', 180,200, '#f0e0ee'], ['ExpertiseTag', 310,200, '#f0e0ee'], ['Method', 430,200, '#e3e0fa'], ['Challenge', 30,310, '#fcdcdc'], ['Bottleneck', 140,310, '#e3e3e3'], ['Uncertainty', 255,310, '#fbeec1'], ['Need', 360,310, '#fde2cf'], ['Offer', 450,310, '#dceaff'], ['EvidenceAnchor', 30,380, '#fff7cc'], ['Match', 185,380, '#dceaff'], ['RelationshipEdge', 320,380, '#dceaff'], ].map(([n,x,y,bg]) => ( {n} ))} {/* relationships (subset, schematic) */} {[ [107,30,237,30,'has'], [237,48,300,120,'works on'], [237,48,360,30,'@'], [237,48,107,200,'expert in'], [237,48,367,200,'tag'], [237,48,487,200,'uses'], [237,48,87,310,'faces'], [237,48,197,310,'blocked by'], [237,48,312,310,'navigates'], [237,48,417,310,'needs'], [237,48,507,310,'offers'], [237,48,87,380,'evidence'], [237,48,242,380,'matched'], [237,48,377,380,'edge'], ].map(([x1,y1,x2,y2,l],i) => ( ))}
Schematic — not a full ER diagram. Spine: PersonProfile connects to everything; RelationshipEdge stores derived links (type, strength, signals, explanation).
{[ ['Q: Primary role','PersonProfile.role','filtering · clustering'], ['Q: Hydrogen value-chain','PersonProfile.valueChain[]','first-layer cluster'], ['Q: Knowledge domains (≤5)','HAS_DOMAIN','cosine sim'], ['Q: Subdomains (≤7)','HAS_SUBDOMAIN','fingerprint'], ['Q: Expertise weighting (100 pts)','SUBDOMAIN.weight','weighted similarity'], ['Q: Methods used','USES Method','method-transfer'], ['Q: Output/evidence','EvidenceAnchor','trust score'], ['Q: Project stage / TRL','Project.stage / .trl','project compatibility'], ['Q: Current challenge','FACES Challenge','anti-dup'], ['Q: Main bottleneck','HAS_BOTTLENECK','anti-dup · need'], ['Q: Uncertainty','NAVIGATES Uncertainty','co-learning'], ['Q: Cross-sector orientation','PersonProfile.bridgeScore','bridge match'], ['Q: Visibility preference','PersonProfile.visibility','privacy gating'], ].map((r,i) => ( ))}
Questionnaire item Maps to Used in
{r[0]} {r[1]} {r[2]}
{/* Matching algorithms */}
{[ {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 */}
Node encoding
Person Project Organization Domain Method Challenge Uncertainty
Size = profile completeness · centrality. Glow = recommended match. Halo = newly added.
Edge encoding
strong similarity weak similarity complementarity anti-duplication (alert) bridge method transfer shared uncertainty
); window.SystemTab = SystemTab;