Add 'Already joined' toggle + post-join PIF message template
- New checkbox: 'Already joined (skip signup language)' toggles the plan generator - Already-joined mode strips signup prompts, says 'I went back and funded your level' - New template: templates/post-join-pif-message.md for the manual message scenario - Skill updated with reference to the new template
This commit is contained in:
+55
-3
@@ -474,6 +474,10 @@
|
||||
<input type="checkbox" id="showReferral" checked>
|
||||
<label for="showReferral">Show referral earnings (my 10%)</label>
|
||||
</div>
|
||||
<div class="checkbox-group">
|
||||
<input type="checkbox" id="alreadyJoined">
|
||||
<label for="alreadyJoined">Already joined (skip signup language)</label>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label>Share this link (sends the plan as-is)</label>
|
||||
<div class="shared-link-row">
|
||||
@@ -1114,7 +1118,7 @@ function updateAll() {
|
||||
// ══════════════════════════════════════════════════════════════════════
|
||||
// EVENT WIRING & INIT
|
||||
// ══════════════════════════════════════════════════════════════════════
|
||||
['numPeople','commissionPct','giftLevel','selfFundLevel','showReferral'].forEach(id => {
|
||||
['numPeople','commissionPct','giftLevel','selfFundLevel','showReferral','alreadyJoined'].forEach(id => {
|
||||
const el = document.getElementById(id);
|
||||
el.addEventListener('input', updateAll);
|
||||
el.addEventListener('change', updateAll);
|
||||
@@ -1200,10 +1204,58 @@ function generatePlan() {
|
||||
const effective = getEffectiveStart(giftLevel, selfLevel);
|
||||
const phases = getPhaseSequence(effective);
|
||||
const totalMonths = estimateMonths(phases);
|
||||
const alreadyJoined = document.getElementById('alreadyJoined').checked;
|
||||
|
||||
updateSharedLinkBox();
|
||||
|
||||
let rawPlan = `📋 Your ClickBaitPays Plan
|
||||
let rawPlan = alreadyJoined
|
||||
? `📋 Your ClickBaitPays Plan — Full Roadmap
|
||||
|
||||
So what's ClickBaitPays? It's an ad platform where you run small ad campaigns, click a few ads each day, and every ~19 days you get paid more than the campaign cost. You reinvest those payouts into bigger campaigns and scale up. It's simple, takes a few minutes a day, and you can do it from your phone.
|
||||
|
||||
Here's a calculator I put together so you can play with the numbers yourself: https://cbp-calculator.saasy.top?ref=${refUser}
|
||||
|
||||
Come back to that link anytime — it'll walk you through what's possible and the best plan forward as you grow.
|
||||
|
||||
${giftCost > 0 ? `Since you've already joined, I went back and funded your **Level ${giftLevel}** ($${giftCost}) — it's already set up on your account. You owe nothing for this.` : ''}
|
||||
|
||||
Your full roadmap to $3,960/month:
|
||||
|
||||
${phases.filter(k => k !== '3xL7').map((k, i) => {
|
||||
const p = HYBRIDS[k];
|
||||
const pocketTotal = (p.profit * p.cycles).toFixed(2);
|
||||
return `**Phase ${i+1}: ${p.label}**
|
||||
${p.cycles} cycles, ~${p.months} months — $${p.payout.toFixed(2)}/cycle payout
|
||||
|
||||
You can play this phase two ways:
|
||||
|
||||
🔹 **Pocket mode** — take the ~$${p.profit.toFixed(2)} profit each cycle as spending money (that's your balance after CBP's built-in fee, no extra charge if you keep it in your account to spend later). After ${p.cycles} cycles you have enough saved to unlock the next level, plus ~$${pocketTotal} pocketed along the way. Total time: ~${p.months} months. *(If you withdraw to a crypto wallet, CBP adds a 10% fee on the withdrawal amount.)*
|
||||
|
||||
🔸 **Accelerate mode** — reinvest every penny instead of pocketing it. You reach the next level faster because nothing comes off the top. Total time is shorter, but you pocket nothing along the way.`;
|
||||
}).join('\n\n')}
|
||||
|
||||
**Phase ${phases.filter(k => k !== '3xL7').length+1}: 3× L7 Endgame** 🎯
|
||||
All three L7 campaigns running at once
|
||||
$9,720.00/cycle payout → ~$3,960.00/month passive
|
||||
This is the finish line
|
||||
|
||||
${selfCost > 0 ? `**Your total self-fund: $${selfCost}**${selfCost > giftCost ? ` (you cover $${(selfCost - giftCost).toLocaleString()} after sponsor's gift)` : ''}\n\n` : ''}The choice is yours — pocket spending money along the way, or reinvest everything to get to the endgame faster. Either way, no new money needed after the start. Just run the cycles, stack the profits, and level up.
|
||||
|
||||
As a side note — I also earn 10% of everything you get paid through this system, so eventually I'll get my gift back. But that's not why I'm doing this. I genuinely just want to pay it forward and help you get started. You win, I win — we both win together.
|
||||
|
||||
Estimated time to 3× L7 endgame: ~${totalMonths} months
|
||||
|
||||
Quick Stats
|
||||
• Monthly at 3× L7: ~$3,960/mo passive
|
||||
• Each campaign cycle: 19 days
|
||||
• Min daily clicks: 3-20 (depending on level)
|
||||
• Reward per ad click: $0.48 - $13.50
|
||||
|
||||
Your Referral Link
|
||||
${refLink}
|
||||
|
||||
Good luck — the system works if you work the system. 💪`
|
||||
: `📋 Your ClickBaitPays Plan
|
||||
|
||||
So what's ClickBaitPays? It's an ad platform where you run small ad campaigns, click a few ads each day, and every ~19 days you get paid more than the campaign cost. You reinvest those payouts into bigger campaigns and scale up. It's simple, takes a few minutes a day, and you can do it from your phone.
|
||||
|
||||
@@ -1276,7 +1328,7 @@ function copyPlan() {
|
||||
}
|
||||
|
||||
// Regenerate plan when controls change
|
||||
['numPeople','giftLevel','selfFundLevel','showReferral'].forEach(id => {
|
||||
['numPeople','giftLevel','selfFundLevel','showReferral','alreadyJoined'].forEach(id => {
|
||||
const el = document.getElementById(id);
|
||||
el.addEventListener('input', generatePlan);
|
||||
el.addEventListener('change', generatePlan);
|
||||
|
||||
@@ -0,0 +1,105 @@
|
||||
const LEVELS = [
|
||||
{level:1, act:1, camp:13, total:14, payout:17.17, netProfit:4.17},
|
||||
{level:2, act:7, camp:77, total:84, payout:118.91, netProfit:34.91},
|
||||
{level:3, act:14, camp:163, total:177, payout:211.57, netProfit:48.57},
|
||||
{level:4, act:36, camp:310, total:346, payout:388.80, netProfit:78.80},
|
||||
{level:5, act:72, camp:620, total:692, payout:777.60, netProfit:157.60},
|
||||
{level:6, act:120, camp:1200, total:1320, payout:1555.20,netProfit:355.20},
|
||||
{level:7, act:240, camp:2400, total:2640, payout:3240.00,netProfit:840.00},
|
||||
];
|
||||
|
||||
const HYBRIDS = {
|
||||
'L1-only': { label: 'L1 Only', reinvest: 13, payout: 17.17, profit: 4.17, cycles: 9, months: 3.0, daysPer: 19 },
|
||||
'L2+L1': { label: 'L2 + L1', reinvest: 90, payout: 118.91, profit: 28.91, cycles: 4, months: 2.5, daysPer: 19 },
|
||||
'L3+L1': { label: 'L3 + L1', reinvest: 163, payout: 211.57, profit: 48.57, cycles: 4, months: 2.5, daysPer: 19 },
|
||||
'L4+L3': { label: 'L4 + L3', reinvest: 450, payout: 583.20, profit: 133.20,cycles: 5, months: 3.0, daysPer: 19 },
|
||||
'L5+L4': { label: 'L5 + L4', reinvest: 900, payout: 1166.40,profit: 266.40,cycles: 4, months: 2.0, daysPer: 19 },
|
||||
'L6': { label: 'L6', reinvest: 1200, payout: 1555.20,profit: 355.20,cycles: 4, months: 2.0, daysPer: 19 },
|
||||
'L7': { label: 'Single L7', reinvest: 2400, payout: 3240.00,profit: 840.00,cycles: 7, months: 3.0, daysPer: 19 },
|
||||
'3xL7': { label: '3× L7 Endgame', reinvest: 7200, payout: 9720, profit: 2520, cycles: 1, months: 0.63, daysPer: 19 },
|
||||
};
|
||||
|
||||
function getLevelCost(upTo) {
|
||||
if (upTo <= 0) return 0;
|
||||
return LEVELS.slice(0, upTo).reduce((s, l) => s + l.total, 0);
|
||||
}
|
||||
|
||||
function getEffectiveStart(gift, selfF) {
|
||||
return Math.max(gift, selfF);
|
||||
}
|
||||
|
||||
function getPhaseSequence(effectiveStart) {
|
||||
if (effectiveStart >= 5) return ['L5+L4','L6','L7','3xL7'];
|
||||
if (effectiveStart >= 4) return ['L4+L3','L5+L4','L6','L7','3xL7'];
|
||||
if (effectiveStart >= 3) return ['L3+L1','L4+L3','L5+L4','L6','L7','3xL7'];
|
||||
if (effectiveStart >= 2) return ['L2+L1','L3+L1','L4+L3','L5+L4','L6','L7','3xL7'];
|
||||
return ['L1-only','L2+L1','L3+L1','L4+L3','L5+L4','L6','L7','3xL7'];
|
||||
}
|
||||
|
||||
function estimateMonths(phases) {
|
||||
let total = 0;
|
||||
for (const k of phases) {
|
||||
if (k === '3xL7') break;
|
||||
total += HYBRIDS[k].months;
|
||||
}
|
||||
return total;
|
||||
}
|
||||
|
||||
function estimateYear1Cum(phases, commPct, giftLevel) {
|
||||
let cum = 0;
|
||||
let months = 0;
|
||||
for (const k of phases) {
|
||||
if (k === '3xL7') break;
|
||||
const p = HYBRIDS[k];
|
||||
const yourCut = p.payout * (commPct / 100);
|
||||
const cyclesInYear1 = Math.min(p.cycles, Math.max(0, (12 - months) / (p.months / p.cycles)));
|
||||
const actual = Math.floor(cyclesInYear1);
|
||||
for (let i = 0; i < actual; i++) cum += yourCut;
|
||||
months += p.months;
|
||||
if (months >= 12) break;
|
||||
}
|
||||
return Math.round(cum);
|
||||
}
|
||||
|
||||
function buildSCENARIOS() {
|
||||
const levels = [
|
||||
{ giftLvl: 1, selfLvl: 0, id: 'gift1', label: 'L1 Gift ($14)', yourCost: 14 },
|
||||
{ giftLvl: 0, selfLvl: 1, id: 'self1', label: 'Self L1 ($14)', yourCost: 0 },
|
||||
{ giftLvl: 2, selfLvl: 0, id: 'gift2', label: 'L1-L2 Gift ($98)', yourCost: 98 },
|
||||
{ giftLvl: 0, selfLvl: 2, id: 'self2', label: 'Self L2 ($98)', yourCost: 0 },
|
||||
{ giftLvl: 3, selfLvl: 0, id: 'gift3', label: 'L1-L3 Gift ($263)', yourCost: 263},
|
||||
{ giftLvl: 0, selfLvl: 3, id: 'self3', label: 'Self L3 ($263)', yourCost: 0 },
|
||||
{ giftLvl: 4, selfLvl: 0, id: 'gift4', label: 'L1-L4 Gift ($593)', yourCost: 593},
|
||||
{ giftLvl: 0, selfLvl: 4, id: 'self4', label: 'Self L4 ($593)', yourCost: 0 },
|
||||
{ giftLvl: 5, selfLvl: 0, id: 'gift5', label: 'L1-L5 Gift ($1,253)', yourCost:1253},
|
||||
{ giftLvl: 0, selfLvl: 5, id: 'self5', label: 'Self L5 ($1,253)', yourCost: 0 },
|
||||
];
|
||||
return levels.map(function(s) {
|
||||
const eff = Math.max(s.giftLvl, s.selfLvl);
|
||||
const phases = getPhaseSequence(eff);
|
||||
const t = Math.round(estimateMonths(phases));
|
||||
const y = estimateYear1Cum(phases, 10, s.giftLvl);
|
||||
const eg = phases.filter(function(k) { return k !== '3xL7'; })
|
||||
.reduce(function(sum, k) { return sum + HYBRIDS[k].payout * 0.10 * HYBRIDS[k].cycles; }, 0);
|
||||
return { id: s.id, label: s.label, yourCost: s.yourCost, time: t, yr1: Math.round(y), totalEG: Math.round(eg), monthly: 1860 };
|
||||
});
|
||||
}
|
||||
|
||||
const SCENARIOS = buildSCENARIOS();
|
||||
|
||||
console.log("=== SCENARIOS ===");
|
||||
for (var i = 0; i < SCENARIOS.length; i++) {
|
||||
var s = SCENARIOS[i];
|
||||
console.log(s.id + ": time=" + s.time + "mo, yr1=$" + s.yr1 + ", totalEG=$" + s.totalEG);
|
||||
}
|
||||
|
||||
// Verify consistency: rebuild should give same result
|
||||
var r = buildSCENARIOS();
|
||||
var ok = true;
|
||||
for (var i = 0; i < SCENARIOS.length; i++) {
|
||||
if (SCENARIOS[i].time !== r[i].time || SCENARIOS[i].yr1 !== r[i].yr1) {
|
||||
console.log("MISMATCH at " + SCENARIOS[i].id);
|
||||
ok = false;
|
||||
}
|
||||
}
|
||||
if (ok) console.log("=== ALL CONSISTENT ===");
|
||||
Reference in New Issue
Block a user