diff --git a/auth.js b/auth.js index 11f8f58..e333aa5 100644 --- a/auth.js +++ b/auth.js @@ -14,7 +14,13 @@ let IS_PROD = false; let SITE = 'instantadpay.com'; const CHALLENGE_TTL = 10 * 60 * 1000; -const SESSION_TTL = 24 * 60 * 60 * 1000; // 24h — forces a daily re-login so the login ad shows each day +// 4 hours (Marty, 2026-09-18). Two reasons, and we say both of them out loud rather than +// letting it feel like a glitch: it keeps resources tidy, and it is what makes the login-ad +// slot worth buying — an advertiser paying for a 30-day run needs members to actually pass +// the gate more than once a day. Members are told the length up front, on the sign-in screen, +// in the training and by the chatbot, so nobody is surprised by it. +const SESSION_TTL = Number(process.env.SESSION_TTL_HOURS || 4) * 60 * 60 * 1000; +const SESSION_HOURS = SESSION_TTL / 3600000; const challenges = new Map(); // addressLower -> {message, exp} // ---- JSON session fallback ---- diff --git a/chatbot.js b/chatbot.js index 99c4b9f..9c1cad0 100644 --- a/chatbot.js +++ b/chatbot.js @@ -20,8 +20,12 @@ function key() { function enabled() { return !!key(); } // ---- canned answers: instant, free, always in voice ---- -const KNOWLEDGE_DATE = '2026-09-17'; // bump whenever the canned answers / prompt are brought up to date +const KNOWLEDGE_DATE = '2026-09-18'; // bump whenever the canned answers / prompt are brought up to date const CANNED = [ + // 2026-09-18: sessions were shortened to 4h on purpose. Members WILL ask why they keep being + // signed out, and the honest answer reads far better than letting it look like a fault. + { re: /(logged out|log(ged)? me out|signed (me |us )?out|keep.{0,20}(logging|signing) in|session (expired|timed? out)|why.{0,25}(log ?in|sign ?in) again|have to log ?in again|stay logged in)/i, + a: 'That is deliberate, not a fault. To keep resources optimised we do not keep anyone signed in longer than 4 hours. After that your session ends and you sign in again with a fresh code - nothing about your account, your credits or your line is affected. You will see the login sponsor ad on the way back in, and that is part of what keeps the free side of the platform paid for.' }, { re: /(second account|another account|two accounts|multiple accounts|more than one account|duplicate account|new account with|refer myself|self.?refer|sign up (my )?(wife|husband|partner|spouse|kids?|family))/i, a: 'One account per person, and that is in the Terms (https://instantadpay.com/terms). A second account under another email, name or wallet is not allowed, and neither is referring yourself through one. The one sanctioned way to hold more than one position is Qualified Start: extra wallets linked inside your single account, on the Buy packages tab, where they are visible as yours. A family member who genuinely wants to join can join under your link with their own email. Duplicate accounts can be merged or closed and any credits or prizes earned through them are forfeited; payments the contract already made cannot be reversed.' }, { re: /(pyramid|ponzi|scam|scheme)/i, @@ -96,6 +100,7 @@ function systemPrompt() { return `You are the assistant on InstantAdPay (https://instantadpay.com), a membership advertising platform. FACTS: +- SESSIONS LAST 4 HOURS. Sign-ins expire after 4 hours and the member signs in again with a fresh 6-digit code. This is intentional and we say so plainly: it keeps resources optimised, and the login sponsor ad shown on the way back in is part of what pays for the free side. Nothing is lost on expiry - credits, line and account are untouched. Never describe it as a bug, an error, or something to report. - Free to join with email only (6-digit code sign-in, no passwords). Wallet appears only at purchase or payout activation. Every new member gets a small welcome batch of ad credits — unlocked by the WELCOME TOUR on first sign-in: they visit their upline's line-banner sites (up to 3, 10 seconds each — the same 3 levels the contract pays), then claim the credits. Members with no upline banners get the credits instantly. - SPONSOR ATTRIBUTION: last touch. The invite link opened most recently sets the sponsor (30-day cookie), shown on the join page and again at the code step ("Joining under @name"). It locks when the account is created; the contract binds the buyer to that sponsor at their first purchase. Wrong sponsor before joining: open the right link. Already joined wrong: admin can move the account before the first purchase. - YOUR LINKS (top of Members > Promo tools): the plain invite link plus five angle links (?v=instant paid-in-seconds, ?v=adspend you-buy-ads-anyway, ?v=free costs-nothing-to-try, ?v=ledger no-back-office, ?v=two two-buyers-open-level-two), each with a who-it-is-for note, Copy and Share. Same credit either way; only the first page differs. Link stats on the Overview's coaching card show views/joins/buyers per angle. diff --git a/public/my.html b/public/my.html index 20e9554..81d49f6 100644 --- a/public/my.html +++ b/public/my.html @@ -75,6 +75,10 @@

The ad opens in a new tab. The timer counts down right here — when it hits zero, your dashboard button appears above.

+

Why you are seeing this again: + to keep resources optimised we do not keep anyone signed in for longer than + 4 hours. After that your session ends and you re-authenticate here. + It is not an error, and nothing in your account is affected.

@@ -1033,7 +1037,7 @@ - +