Populate demo CRM with 24 DAO members and delegation network

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Jeff Emmett 2026-03-13 00:24:01 +00:00
parent d2637aff0b
commit fb9448681c
1 changed files with 92 additions and 8 deletions

View File

@ -217,16 +217,100 @@ routes.get("/api/graph", async (c) => {
if (!token) {
isDemoData = true;
// ── Demo DAO: 24 members with delegation-based trust ──
const daoId = "demo-dao";
const spaceHubId = "demo-space";
nodes.push(
{ id: "demo-1", label: "Alice", type: "person", data: {} },
{ id: "demo-2", label: "Bob", type: "person", data: {} },
{ id: "demo-3", label: "Acme Corp", type: "company", data: {} },
);
edges.push(
{ source: "demo-1", target: "demo-3", type: "works_at" },
{ source: "demo-2", target: "demo-3", type: "works_at" },
{ source: "demo-1", target: "demo-2", type: "contact_of" },
{ id: daoId, label: "Demo DAO", type: "company", data: { role: "dao" } },
{ id: spaceHubId, label: "demo", type: "space" as any, data: {} },
);
// Members: id, name, role, delegatedWeight per authority (gov, fin, dev)
const members: Array<[string, string, string, number, number, number]> = [
["m01", "Alice Chen", "steward", 0.95, 0.60, 0.40],
["m02", "Bob Martinez", "steward", 0.80, 0.85, 0.30],
["m03", "Carol Okafor", "steward", 0.70, 0.45, 0.90],
["m04", "David Kim", "council", 0.65, 0.70, 0.55],
["m05", "Eve Nakamura", "council", 0.55, 0.50, 0.75],
["m06", "Frank Osei", "council", 0.50, 0.80, 0.35],
["m07", "Grace Liu", "contributor", 0.40, 0.35, 0.85],
["m08", "Hassan Patel", "contributor", 0.35, 0.65, 0.45],
["m09", "Ingrid Svensson", "contributor", 0.45, 0.30, 0.60],
["m10", "Jorge Reyes", "contributor", 0.30, 0.55, 0.50],
["m11", "Kaia Tanaka", "contributor", 0.25, 0.40, 0.70],
["m12", "Leo Adeyemi", "contributor", 0.35, 0.25, 0.55],
["m13", "Maya Johansson", "member", 0.20, 0.30, 0.40],
["m14", "Nia Mensah", "member", 0.15, 0.45, 0.20],
["m15", "Omar Farouk", "member", 0.25, 0.20, 0.35],
["m16", "Priya Sharma", "member", 0.10, 0.35, 0.30],
["m17", "Quinn O'Brien", "member", 0.20, 0.15, 0.25],
["m18", "Rosa Gutierrez", "member", 0.15, 0.20, 0.15],
["m19", "Sam Achebe", "member", 0.10, 0.10, 0.45],
["m20", "Tara Singh", "member", 0.05, 0.25, 0.10],
["m21", "Uri Goldberg", "member", 0.12, 0.08, 0.20],
["m22", "Valentina Costa", "member", 0.08, 0.15, 0.12],
["m23", "Wei Zhang", "member", 0.18, 0.12, 0.08],
["m24", "Yuki Mori", "member", 0.06, 0.05, 0.18],
];
for (const [id, name, role, govW, finW, devW] of members) {
const avgTrust = (govW + finW + devW) / 3;
nodes.push({
id, label: name, type: "rspace_user" as any,
data: {
role,
trustScore: Math.round(avgTrust * 100) / 100,
delegatedWeight: Math.round(Math.max(govW, finW, devW) * 100) / 100,
trustScores: { "gov-ops": govW, "fin-ops": finW, "dev-ops": devW },
},
});
edges.push({ source: id, target: spaceHubId, type: "member_of" });
edges.push({ source: id, target: daoId, type: "works_at" });
}
// ── Delegation edges: who delegates to whom, per authority ──
// Governance delegations — Alice is top steward
const govDelegations: Array<[string, string, number]> = [
["m04", "m01", 0.8], ["m05", "m01", 0.6], ["m06", "m01", 0.5],
["m07", "m04", 0.7], ["m08", "m02", 0.6], ["m09", "m01", 0.5],
["m10", "m04", 0.4], ["m11", "m05", 0.5], ["m12", "m03", 0.6],
["m13", "m02", 0.3], ["m14", "m06", 0.4], ["m15", "m01", 0.5],
["m16", "m04", 0.3], ["m17", "m05", 0.4], ["m18", "m02", 0.3],
["m19", "m03", 0.2], ["m20", "m06", 0.3], ["m21", "m01", 0.2],
["m22", "m04", 0.2], ["m23", "m02", 0.4], ["m24", "m03", 0.1],
];
// Financial delegations — Bob is top steward
const finDelegations: Array<[string, string, number]> = [
["m04", "m02", 0.7], ["m05", "m06", 0.6], ["m03", "m02", 0.4],
["m07", "m06", 0.5], ["m08", "m02", 0.8], ["m09", "m04", 0.3],
["m10", "m02", 0.6], ["m11", "m06", 0.5], ["m12", "m08", 0.4],
["m13", "m04", 0.3], ["m14", "m02", 0.7], ["m15", "m06", 0.3],
["m16", "m08", 0.5], ["m17", "m04", 0.2], ["m18", "m02", 0.3],
["m19", "m10", 0.2], ["m20", "m06", 0.4], ["m21", "m04", 0.1],
["m22", "m02", 0.3], ["m23", "m08", 0.2], ["m24", "m14", 0.1],
];
// Dev-ops delegations — Carol is top steward
const devDelegations: Array<[string, string, number]> = [
["m04", "m03", 0.5], ["m05", "m03", 0.7], ["m01", "m03", 0.4],
["m07", "m03", 0.9], ["m08", "m05", 0.4], ["m09", "m07", 0.6],
["m10", "m05", 0.5], ["m11", "m03", 0.7], ["m12", "m07", 0.5],
["m13", "m09", 0.4], ["m14", "m05", 0.2], ["m15", "m03", 0.3],
["m16", "m07", 0.4], ["m17", "m11", 0.3], ["m18", "m09", 0.2],
["m19", "m03", 0.6], ["m20", "m07", 0.2], ["m21", "m11", 0.3],
["m22", "m05", 0.2], ["m23", "m09", 0.1], ["m24", "m03", 0.3],
];
for (const [from, to, weight] of govDelegations) {
edges.push({ source: from, target: to, type: "delegates_to", weight, authority: "gov-ops" } as any);
}
for (const [from, to, weight] of finDelegations) {
edges.push({ source: from, target: to, type: "delegates_to", weight, authority: "fin-ops" } as any);
}
for (const [from, to, weight] of devDelegations) {
edges.push({ source: from, target: to, type: "delegates_to", weight, authority: "dev-ops" } as any);
}
for (const n of nodes) nodeIds.add(n.id);
} else {
const data = await twentyQuery(`{