Achievement badges + milestone credit bonuses
- Idempotent one-time credit bonus per milestone (payouts/firstBuyer/level2/level3): 10/25/50/100 cr - Overview badges strip (unlockable medals) with canvas share-to-image (username overlaid) - Newly-unlocked milestones toast the bonus on next dashboard load Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -461,6 +461,17 @@ const server = http.createServer(async (req, res) => {
|
||||
else { out.welcomeCredits = 0; out.gauntletPending = true; }
|
||||
}
|
||||
if (out.email) out.inboxUnread = await ads.unreadCount(out.email); // delivers pending solos too
|
||||
// achievement milestones (same ladder as the Overview stepper) + one-time credit bonuses
|
||||
{
|
||||
const bc = out.buyerCount || 0;
|
||||
const reached = [];
|
||||
if (out.memberId) reached.push('payouts');
|
||||
if (bc >= 1) reached.push('firstBuyer');
|
||||
if (bc >= 2) reached.push('level2');
|
||||
if (bc >= 5) reached.push('level3');
|
||||
out.milestonesReached = reached;
|
||||
if (out.email && reached.length) out.milestonesGranted = await ads.grantMilestones(out.email, reached);
|
||||
}
|
||||
if (out.email) { // unmissable login modal when the upline sent a message
|
||||
const un = await messages.newestUnread(out.email);
|
||||
if (un) {
|
||||
|
||||
Reference in New Issue
Block a user