Add a Suite link to the member nav — it was unreachable

The Circle Suite went live to all 216 positions, but nothing outside its own
pages linked to it. Members could only reach it by knowing the URL, which
means most of them could not reach it at all.

The dashboard now leads with it: "My Tools" is the primary action, and Promo
Tools drops to secondary — the Promo Center is itself a level-1 Suite tool, so
the Suite is its parent rather than its sibling.

Everywhere else it rides the existing nav-dash.js injection, which already
runs on every member page and already knows who the visitor is. Same identity
test as the dashboard button: if we know who they are, they hold a position,
and a position is a licence to the toolkit. Prospects still see nothing.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
martbost
2026-08-29 06:33:30 -05:00
parent bd42708fa4
commit b5cb63f15c
2 changed files with 17 additions and 3 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><meta name="robots" content="noindex"><meta name="description" content="Your RM Circle position, payments, and team — live from the blockchain."><title>My Team Dashboard | RM Circle Team Build</title><link rel="icon" type="image/png" href="/favicon.png"><link rel="stylesheet" href="/styles.css"></head>
<body>
<header class="wrap nav"><a class="brand" href="/"><img class="brand-mark" src="/logo.jpg" alt="The RM Circle" width="42" height="42"><span><span id="brandName">RM Circle</span><small>Member Dashboard</small></span></a><div class="nav-actions"><a class="btn btn-secondary hide-mobile" href="/training">Training</a><a class="btn btn-secondary hide-mobile" href="/start">Current Sponsor</a><a class="btn btn-primary" href="/tools">🎬 Promo Tools</a></div></header>
<header class="wrap nav"><a class="brand" href="/"><img class="brand-mark" src="/logo.jpg" alt="The RM Circle" width="42" height="42"><span><span id="brandName">RM Circle</span><small>Member Dashboard</small></span></a><div class="nav-actions"><a class="btn btn-secondary hide-mobile" href="/training">Training</a><a class="btn btn-secondary hide-mobile" href="/start">Current Sponsor</a><a class="btn btn-secondary hide-mobile" href="/tools">🎬 Promo Tools</a><a class="btn btn-primary" href="/suite">🧰 My Tools</a></div></header>
<main class="wrap" style="padding:26px 0 60px">
<section id="idPrompt" class="login-panel" style="margin:8vh auto"><h1>Your position, live from the blockchain.</h1><p>Enter your RM Circle member ID to see your payments, your team, and your lineage — everything verified on Polygon.</p><form id="idForm"><div class="field"><label for="memberId">Your member ID</label><input id="memberId" class="input" inputmode="numeric" placeholder="e.g. 46" required></div><button class="btn btn-primary" style="width:100%">Show My Dashboard</button><div id="idError" class="micro" style="color:var(--danger)"></div></form></section>
<section id="dash" class="hidden">
+16 -2
View File
@@ -8,6 +8,20 @@
if (/^\/my(\/|$)/.test(location.pathname)) return;
var nav = document.querySelector('.nav-actions');
if (!nav) return;
// The Suite went live to the whole org but nothing outside its own pages
// linked to it, so members could only reach it by knowing the URL. Same
// identity test as the dashboard button: if we know who they are, they hold
// a position, and a position is a licence to the toolkit.
function addSuite() {
if (/^\/suite(\/|$)/.test(location.pathname)) return;
if (nav.querySelector('a[href="/suite"]')) return;
var a = document.createElement('a');
a.className = 'btn btn-secondary hide-mobile';
a.href = '/suite';
a.textContent = '🧰 My Tools';
nav.insertBefore(a, nav.firstChild);
}
function add(id) {
if (!id || !/^\d{1,15}$/.test(String(id))) return;
if (document.getElementById('navMyDash')) return;
@@ -22,6 +36,6 @@
try { stored = localStorage.getItem('ctb.myId') || localStorage.getItem('rmc.toolsId'); } catch (e) {}
fetch('/api/public/msg-me')
.then(function (r) { return r.ok ? r.json() : null; })
.then(function (d) { add(d && d.id ? d.id : stored); })
.catch(function () { add(stored); });
.then(function (d) { var id = d && d.id ? d.id : stored; add(id); if (id) addSuite(); })
.catch(function () { add(stored); if (stored) addSuite(); });
})();