3f8d23d66c
Four new tools, so no tier is a placeholder any more: L4 Voice Profile (/suite/voice) — five short answers that ride along with every Copy Engine and Email Engine generation. It sits BEFORE the compliance block in the prompt on purpose: a personal voice must never be able to talk the model out of the honesty rules. suite-email builds its own prompt, so the profile is threaded in there separately or email would keep sounding generic while the Copy Engine sounded like the member. L5 Split Tester (/suite/split) — 2-3 variants launched as one test with the impressions split evenly, then click counters compared. Deliberately conservative: it will not declare a winner until both arms have real volume AND the leader is clearly ahead, because a 3-click gap on 400 impressions is noise. A genuine tie is reported as a tie, which is useful information too. A failed arm rolls back the whole test rather than leaving half of it running. Apex is the right home for it — that is where impressions jump to 50,000. L6 Funnel Factory (/suite/funnel) — extra named pages at /p/<id>/<slug>, so a leader can run one page per audience and point different ads at each. Missing slugs fall back to the member's main page, same no-dead-ends rule as /p/<id>. L7 Leader Ops (/suite/leader) — the coaching radar already existed in chain.js and only admin could see it, which was backwards: the leaders running those legs need it more than anyone. Now scoped to the member's own organisation, with a written plan built on contract-read facts only. Follows the teach-forward rule — the digest gives the leader words to hand down, not just numbers to act on. Tile copy across the wall and the payout alerts now describes what actually exists rather than what was sketched. suite-tools.js was stale in both directions (it still had the Traffic Desk at L5 and L3 not live). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
67 lines
3.1 KiB
JavaScript
67 lines
3.1 KiB
JavaScript
// One source of truth for "what does this level unlock in the Circle Suite",
|
|
// shared by the Telegram feeds, the X/Twitter payout posts, and anywhere else
|
|
// that congratulates an upgrade.
|
|
//
|
|
// Two honesty rules baked in:
|
|
// 1. `live:false` tiers are NEVER announced. We do not congratulate someone
|
|
// for unlocking software that does not exist yet.
|
|
// 2. The whole feature is gated on config.suiteToolsInAlerts, so nothing goes
|
|
// public while the Suite is still in team beta. Flip it on at launch.
|
|
'use strict';
|
|
|
|
const LEVEL_TOOLS = {
|
|
1: { name: 'Scintilla', live: true, short: 'the Launch Kit and the Traffic Desk — promo center, printable handouts with your QR, the Circle Method course, your dashboard, the AI coach, and banners or text ads on our own ad network' },
|
|
2: { name: 'Ascensus', live: true, short: 'the Copy Engine and Page Builder — an AI copywriter for your posts and DMs, plus your own hosted invitation page' },
|
|
3: { name: 'Fabrica', live: true, short: 'the Email Engine and Video Maker — full sequences in the team voice, and the promo videos rendered with your own end card' },
|
|
4: { name: 'Culmen', live: true, short: 'your Voice Profile — the Copy Engine and Email Engine start writing the way you actually talk' },
|
|
5: { name: 'Apex', live: true, short: 'the Split Tester, and your ad allowance jumps to 50,000 impressions a month' },
|
|
6: { name: 'Fastigium', live: true, short: 'the Funnel Factory — a separate hosted landing page for every audience you talk to' },
|
|
7: { name: 'Vertex', live: true, short: 'Leader Ops — your whole organisation triaged live from the contract, plus a coaching plan to teach forward' },
|
|
8: { name: 'Corona', live: true, short: 'the Founder Desk — every tool at its highest allowance, and the top of the ladder' }
|
|
};
|
|
|
|
// Very short form for character-limited surfaces (X/Twitter).
|
|
const TERSE = {
|
|
1: 'the Launch Kit + Traffic Desk',
|
|
2: 'the Copy Engine + Page Builder',
|
|
3: 'the Email Engine + Video Maker',
|
|
4: 'your own Voice Profile',
|
|
5: 'the Split Tester + 50k impressions',
|
|
6: 'the Funnel Factory',
|
|
7: 'Leader Ops',
|
|
8: 'the Founder Desk'
|
|
};
|
|
|
|
function levelNumber(level, levelName) {
|
|
const n = Number(level);
|
|
if (n >= 1 && n <= 8) return n;
|
|
if (levelName) {
|
|
for (const k of Object.keys(LEVEL_TOOLS)) {
|
|
if (LEVEL_TOOLS[k].name.toLowerCase() === String(levelName).toLowerCase()) return Number(k);
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
function enabled(cfg) { return !!(cfg && cfg.suiteToolsInAlerts); }
|
|
|
|
// Full sentence fragment, or '' when we shouldn't say anything.
|
|
function unlockText(level, levelName, cfg) {
|
|
if (!enabled(cfg)) return '';
|
|
const n = levelNumber(level, levelName);
|
|
const t = LEVEL_TOOLS[n];
|
|
if (!t || !t.live) return '';
|
|
return t.short;
|
|
}
|
|
|
|
// Terse form for tweets, or '' when we shouldn't say anything.
|
|
function unlockTerse(level, levelName, cfg) {
|
|
if (!enabled(cfg)) return '';
|
|
const n = levelNumber(level, levelName);
|
|
const t = LEVEL_TOOLS[n];
|
|
if (!t || !t.live) return '';
|
|
return TERSE[n] || '';
|
|
}
|
|
|
|
module.exports = { LEVEL_TOOLS, unlockText, unlockTerse, levelNumber, enabled };
|