From a6dcd0299950ef2dbcb9f58784d154f904e4b037 Mon Sep 17 00:00:00 2001 From: martbost Date: Sat, 12 Sep 2026 17:30:02 -0500 Subject: [PATCH] Earn: claim streak (5/7/10, 25 every 7th day), after-set prompts for verified visits and launching a campaign Co-Authored-By: Claude Fable 5.1 --- ads.js | Bin 85390 -> 86873 bytes chatbot.js | 1 + public/assets/my.js | 14 ++++++++++---- public/my.html | 2 +- 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/ads.js b/ads.js index b5615eebf6874e1b908c9e22146a22a708e06efd..c3aea0aee8b829628df5a1d372393a802c53acb4 100644 GIT binary patch delta 1312 zcmZ`(&ubGw6eg8|gkGcvzL`m5T4*kr-FZL0_kHi%*Y763f0+FE=d{1L z2%BxpCykbbz3$(pNR`yQuuAlxnmhlCtNOCH>I2%HM&5e~L2 zLY)+pNeCI(8%D*kew}ct?~^hcvideJpZXyzCG>M9odn`JK)aNMkQXf#tO{jUQc$Hm z!W?YmcU-TDMeW^Gyb*Y|aD7jgFZo`;4Qye;K^zonp}Skah@jjsQwp`3c#~1b?F$Zv zhpc((yE8P+Vw!`z%|e;<#QWkK2mMn%9p$X)IrmPbwq2=~H+H}fzC`PCXd!KF>OehI!q}wU zrp$~J9(p!hq^PD;F42b1s6jg<`tqtc;nW8=ref2vbkr;v6S;Ksrj&@Lk8eglzg@qE zJ)+N_W?u}!SQ*%OQkIa`to8F_aUGsk%atmWb`)#nN^NsK3D0m)?s_)-AQ1*bDN*RV$g(ORqOYg7 zHcY6?HI{V%yhNffyu@xE?cs6?99#AisU{WMxUz-`3-BPfoR&Yc5S8BFJNbKhJki$> z>WV5%Cq3c{y=NCmR3qtN?V&QNVx1cT)?rv8fwov3dnf?Pt&J3d7j){BX`1GhoBHTU z)OHbie$Ym3DUKxB>bl$&{4s3^&7eTD91M58%SS*}SWOUtj-Y1YV%lgK(Q;j$vdJED zAP;`v2@F00n@kD21qNjdxj%~Do)xQV1GL9RgPN$YS}7bli4^Y(t<8 delta 101 zcmcb)jJ0nz>xMTwH#6_sz%=>5K}+Exy_CevoJ!}M#LQghqSTbklH$$Yhg9UJv-mLz Zi(--0w4P)pKE2<9ky{W`r_m$zLI61eCshCd diff --git a/chatbot.js b/chatbot.js index e8c48de..b16072b 100644 --- a/chatbot.js +++ b/chatbot.js @@ -79,6 +79,7 @@ FACTS: - WALLETS + BUYING POL (Training > Wallets and buying POL, /wallets, members only): preferred MetaMask (recommended; extra accounts for Qualified Start), Phantom, SafePal, Coinbase Wallet; Trust works but blocks buys spending most of its POL (keep ~2x). MoonPay flow: connect wallet, Buy packages > "Buy POL with a card" opens MoonPay with POL on Polygon + the member's address prefilled; card/Apple Pay/Google Pay; first-time ID check; minimum order ~$30; buy package cost + 2-3 POL for fees; POL arrives in minutes; then buy. Exchanges: withdraw POL on the Polygon network. Never MATIC on Ethereum, never share the recovery phrase. - INTRO VIDEO ON THE WALL: Profile > social links has an "Intro video" field (YouTube, Vimeo or direct .mp4 link). It embeds on the member's public wall page (/wall/) right under their bio, above the three-level line and the join button. - HOLDING TANK (Members > My line > Holding tank card): free members who joined with no sponsor wait there; a member who has switched on payouts AND bought their own $20+ package can Adopt one (first come, max 2 open adoptions, 7-day window; if the person never links a wallet or buys, they fall back into the tank; a person can be adopted twice at most). Adopting sets the sponsor, opens a chat and emails the member; their first purchase then binds to the adopter on-chain. Members can also "Release to tank" one of their own free referrals (pay it forward). Admin sees the tank under Members. +- DAILY CLAIM STREAK: finishing the daily ad set and claiming pays 5 credits on day 1, 7 on day 2, 10 from day 3, and 25 on every 7th consecutive day; miss a day and it restarts. After the set, verified visits (up to 20 a day, 1 credit each) keep earning, and the credits are meant to be spent on a campaign. - HOLDING TANK ALERTS: when new members land in the tank, a note at the top of every member's Overview names them (usernames) and a post goes to the team's Telegram payments topic; adopt from My line > Holding tank (your own $20 package required). - LEGACY WELCOME (former Faucet Wave / Tier One Ads members): they join through instantadpay.com/from/faucetwave or instantadpay.com/from/tieroneads and, if their email is on the legacy list, welcome-back credits are added automatically at signup (former advertisers 500, former earners 150; once per person; credits, not POL). They land in the holding tank like any member who joins without a sponsor. - PROMO CODES: partner site owners get a reusable code; a member redeems it on a join link (?promo=CODE) or in the Overview box "Have a promo code?" and receives free ad credits (amount set per code by the admin, one use per account; codes can cap uses or expire). Credits, not POL. diff --git a/public/assets/my.js b/public/assets/my.js index ca8460d..60b3371 100644 --- a/public/assets/my.js +++ b/public/assets/my.js @@ -1693,11 +1693,17 @@ const done = st.views >= st.target; $('earnClaimBtn').hidden = !(done && !st.claimed); if (st.claimed) { - $('earnHint').textContent = 'Claimed for today. Come back tomorrow, or put those credits to work in Campaigns.'; - const box = $('earnAdBox'); if (box && !box.querySelector('.done-big')) box.innerHTML = '
✓Ads done for todayToday\'s set is viewed and claimed. Fresh ads tomorrow.
'; + $('earnHint').textContent = 'Claimed for today' + (st.streakDay > 1 ? ' (streak day ' + st.streakDay + ')' : '') + '. Tomorrow\'s claim pays ' + st.nextClaim + ' credits if you come back.'; + // after the set (Marty, 2026-09-12): keep going with verified visits, and turn the credits into a campaign + const box = $('earnAdBox'); + if (box) box.innerHTML = '
✓Ads done for todayToday\'s set is viewed and claimed. Fresh ads tomorrow.' + + '
' + + (st.visitsLeft ? '' : '') + + '
'; + if (box) box.querySelectorAll('[data-earnnext]').forEach(b => b.addEventListener('click', () => { if (b.dataset.earnnext === 'campaigns') setPane('campaigns'); else setEarnSub('visits'); })); if ($('earnStartBtn')) $('earnStartBtn').hidden = true; } else if ($('earnStartBtn')) $('earnStartBtn').hidden = false; - else if (done) $('earnHint').textContent = 'Set complete. Claim your ' + st.claimCredits + ' credits.'; + else if (done) $('earnHint').textContent = 'Set complete. Claim your ' + st.claimCredits + ' credits' + (st.streakDay > 1 ? ' (streak day ' + st.streakDay + ')' : '') + '.'; return st; } catch (e) { return null; } } @@ -1760,7 +1766,7 @@ $('earnClaimBtn').addEventListener('click', async () => { try { const r = await api('/api/my/claim'); - IAP.status('+' + r.credited + ' credits earned. Spend them in Campaigns.', 'ok'); + IAP.status('+' + r.credited + ' credits earned' + (r.streakDay > 1 ? ', streak day ' + r.streakDay : '') + '. Tomorrow\'s claim pays ' + r.nextClaim + '. Spend them in Campaigns.', 'ok'); await earnRefresh(); loadDashboard(); } catch (e) { IAP.status(e.message, 'bad'); } diff --git a/public/my.html b/public/my.html index 8479fdb..3e44e98 100644 --- a/public/my.html +++ b/public/my.html @@ -915,7 +915,7 @@ - +