Sessions last 4 hours, and we say why
Marty's call. Sign-ins expired after 24 hours, which meant a member passed the login gate roughly once a day — and that gate is the entire inventory behind the login-ad product. The platform has served 356 login impressions in its life while members have bought 20,526 credits of them. Four hours, env-tunable via SESSION_TTL_HOURS. Said out loud in three places rather than left to feel like a glitch: the login gate itself now explains it, the chatbot has a canned answer for "why do I keep getting logged out", and the same fact is in the assistant's system prompt so the AI never calls it a bug. Wording throughout is Marty's: to keep resources optimised we do not keep anyone signed in longer than 4 hours, and nothing about the account, credits or line is affected. The canned pattern was checked against the neighbours it sits beside — seven phrasings reach it, and withdraw / pyramid / earnings / second account / payout answers are all untouched. CANNED is first-match-wins, so that check matters. Member walk clean, chatbot suite 35 green. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -14,7 +14,13 @@ let IS_PROD = false;
|
|||||||
let SITE = 'instantadpay.com';
|
let SITE = 'instantadpay.com';
|
||||||
|
|
||||||
const CHALLENGE_TTL = 10 * 60 * 1000;
|
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}
|
const challenges = new Map(); // addressLower -> {message, exp}
|
||||||
|
|
||||||
// ---- JSON session fallback ----
|
// ---- JSON session fallback ----
|
||||||
|
|||||||
+6
-1
@@ -20,8 +20,12 @@ function key() {
|
|||||||
function enabled() { return !!key(); }
|
function enabled() { return !!key(); }
|
||||||
|
|
||||||
// ---- canned answers: instant, free, always in voice ----
|
// ---- 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 = [
|
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,
|
{ 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.' },
|
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,
|
{ 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.
|
return `You are the assistant on InstantAdPay (https://instantadpay.com), a membership advertising platform.
|
||||||
|
|
||||||
FACTS:
|
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.
|
- 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.
|
- 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.
|
- 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.
|
||||||
|
|||||||
+5
-1
@@ -75,6 +75,10 @@
|
|||||||
<p style="margin-top:18px"><button class="btn" id="lgOpen" type="button">Open Ad</button></p>
|
<p style="margin-top:18px"><button class="btn" id="lgOpen" type="button">Open Ad</button></p>
|
||||||
<p class="small muted">The ad opens in a new tab. The timer counts down right here —
|
<p class="small muted">The ad opens in a new tab. The timer counts down right here —
|
||||||
when it hits zero, your dashboard button appears above.</p>
|
when it hits zero, your dashboard button appears above.</p>
|
||||||
|
<p class="small muted" style="margin-top:10px;opacity:.85">Why you are seeing this again:
|
||||||
|
to keep resources optimised we do not keep anyone signed in for longer than
|
||||||
|
<strong>4 hours</strong>. After that your session ends and you re-authenticate here.
|
||||||
|
It is not an error, and nothing in your account is affected.</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -1033,7 +1037,7 @@
|
|||||||
<script src="/assets/common.js?v=20260916a"></script>
|
<script src="/assets/common.js?v=20260916a"></script>
|
||||||
<script src="/assets/wallet.js?v=20260911a"></script>
|
<script src="/assets/wallet.js?v=20260911a"></script>
|
||||||
<script src="/assets/promo.js?v=20260911a"></script>
|
<script src="/assets/promo.js?v=20260911a"></script>
|
||||||
<script src="/assets/my.js?v=20260918b"></script>
|
<script src="/assets/my.js?v=20260918c"></script>
|
||||||
<script src="/assets/chat.js?v=20260907l"></script>
|
<script src="/assets/chat.js?v=20260907l"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
Reference in New Issue
Block a user