Member dashboard: drill-down tree, list view, legend, and strategy-aware referral tool

- "Your team" now covers the member's FULL leg with click-to-drill
  pyramid, breadcrumb, and a list-view toggle (mirrors the admin matrix).
- Legend under both the member tree and admin matrix explaining the
  qualified checkmark, tier badges, and downline rollup.
- "Share this position" card: while under 2/2 it's a personal recruiting
  tool — per-member QR (vendored qrcode-generator, CSP-safe), copy link,
  and a join CTA carrying the member's ID as sponsor. At 2/2 the page
  automatically retires the link and redirects sharing to the team
  rotator, so personal referrals can't undermine the moving-link
  strategy.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
martbost
2026-08-13 14:53:06 -05:00
parent 5a916bf12d
commit 350d50798f
7 changed files with 2369 additions and 9 deletions
+1 -1
View File
@@ -437,7 +437,7 @@ async function memberPublic(id) {
const inc = await fetchIncome(id);
out.income = inc.map(p => ({ fromId: p.fromId, pol: p.pol, ts: p.ts, desc: describeIncome(p.fromTier, p.level, p.pol) })).reverse().slice(0, 50);
} catch (e) { out.income = []; }
out.subtree = getSubtree(id, 3);
out.subtree = getSubtree(id, 99); // full leg — the dashboard drills down client-side
const chain = [];
const seen = new Set([id]);
let cur = m.uplineId;