Payout alerts highlight unlocked tools: shared suite-tools level map drives the Telegram team feed, recruiting feed, member DM on upgrade, and X posts; only announces LIVE tiers and gated behind config.suiteToolsInAlerts (off until Suite launch)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
// 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 — promo center, printable handouts with your QR, the Circle Method course, your dashboard and the AI coach' },
|
||||
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: false, short: 'the Email Engine and Video Maker' },
|
||||
4: { name: 'Culmen', live: false, short: 'your own Voice Profile and multi-page funnels' },
|
||||
5: { name: 'Apex', live: false, short: 'the Traffic Desk — syndicated network display advertising' },
|
||||
6: { name: 'Fastigium', live: false, short: 'the Funnel Factory and Replay Funnels' },
|
||||
7: { name: 'Vertex', live: false, short: 'Leader Ops — team radar and coaching digests' },
|
||||
8: { name: 'Corona', live: false, short: 'the Founder Desk — your own AI operator' }
|
||||
};
|
||||
|
||||
// Very short form for character-limited surfaces (X/Twitter).
|
||||
const TERSE = {
|
||||
1: 'the Launch Kit',
|
||||
2: 'the Copy Engine + Page Builder',
|
||||
3: 'the Email Engine + Video Maker',
|
||||
4: 'Voice Profile + funnels',
|
||||
5: 'the Traffic Desk',
|
||||
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 };
|
||||
Reference in New Issue
Block a user