From a84b851272940532a73cd86b195e201d8b1d7c5b Mon Sep 17 00:00:00 2001 From: martbost Date: Fri, 18 Sep 2026 07:04:20 -0500 Subject: [PATCH] Correct the DripOffers capacity figure and tighten the cap I read campaigns.received_today as a per-day counter and told Marty the platform delivers about 2,700 clicks a day. It doesn't. That column is only a daily figure while the nightly cron resets it, and that reset has stopped running, so the value is an accumulation since it last ran. The permanent click ledger is unambiguous: roughly 40 to 50 clicks a day across the whole platform. It also agrees exactly with ordered-minus- remaining on every campaign, which is a good independent check that the read-never-derive design is reading the right thing. So MAX_CLICKS drops from 10,000 to 2,500. At the real volume a 10,000-click booking would hold the top of the offerwall for most of a year. The pack-2 placement is working as intended and is already measurable: the three backfilled campaigns took 14 of the platform's 17 clicks today. Co-Authored-By: Claude Opus 5 (1M context) --- dripoffers.js | 22 +++++++++++++++------- qa/dripoffers-bridge.mjs | 2 +- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/dripoffers.js b/dripoffers.js index e09029b..ba83bb4 100644 --- a/dripoffers.js +++ b/dripoffers.js @@ -25,18 +25,26 @@ // 3. A SYNDICATION HICCUP NEVER BLOCKS THE MEMBER. Callers swallow errors; the IAP campaign // goes live either way. // -// Capacity note (2026-09-18): the offerwall is a menu, not a rotator - every eligible campaign -// is listed at once, ordered by reward, and the member chooses. So adding campaigns does not -// starve the others the way the AdRevLinks rotator does; it lengthens the menu. What is finite -// is total clicks, running around 2,700 a day across the whole platform. Hence MAX_CLICKS -// below: one campaign booking 50,000 clicks would sit in the list for weeks. Cost is not the -// reason for the caps - Marty owns the platform and treats these placements as free. +// Capacity note (2026-09-18, corrected same day): the offerwall is a menu, not a rotator - +// every eligible campaign is listed at once, ordered by reward, and the earner chooses. So +// adding campaigns does not starve the others the way the AdRevLinks rotator does; it +// lengthens the menu. +// +// What is finite is total clicks, and the real figure is SMALL: the permanent click ledger +// shows roughly 40-50 clicks A DAY across the whole platform. (An earlier read of 2,700/day +// was wrong - it came from campaigns.received_today, which is only a daily figure while the +// nightly cron resets it, and that reset has stopped running.) Pack 2 puts our offers above +// the house campaigns, and they are indeed taking the large majority of that trickle. +// +// Hence a deliberately small MAX_CLICKS: at this volume a 10,000-click booking would sit at +// the top of the list for most of a year and crowd everything else out. Cost is not the reason +// for the caps - Marty owns the platform and treats these placements as free. 'use strict'; const https = require('https'); const { URL } = require('url'); const MIN_CREDITS = Number(process.env.DRIPOFFERS_MIN_CREDITS || 1000); // below this, not worth a listing -const MAX_CLICKS = Number(process.env.DRIPOFFERS_MAX_CLICKS || 10000); +const MAX_CLICKS = Number(process.env.DRIPOFFERS_MAX_CLICKS || 2500); const MIN_CLICKS = 500; // the platform's own floor const PACK_ID = Number(process.env.DRIPOFFERS_PACK_ID || 2); // 2 = a 10-second dwell const USER_ID = Number(process.env.DRIPOFFERS_USER_ID || 1); // the funding account diff --git a/qa/dripoffers-bridge.mjs b/qa/dripoffers-bridge.mjs index 6e722cc..0bdf8bd 100644 --- a/qa/dripoffers-bridge.mjs +++ b/qa/dripoffers-bridge.mjs @@ -22,7 +22,7 @@ t('tier 1+2 merges both lists', drip.countriesFor('1,2', tiers) === 'US,CA,GB,BR // worldwide would deliver the Tier 1 traffic its owner deliberately excluded t('tier 3 alone is skipped, not silently widened', drip.countriesFor('3', tiers) === null, String(drip.countriesFor('3', tiers))); -t('credits convert to clicks one for one', drip.clicksFor(4000) === 4000, String(drip.clicksFor(4000))); +t('credits convert to clicks one for one', drip.clicksFor(2000) === 2000, String(drip.clicksFor(2000))); t('one campaign cannot swallow the platform', drip.clicksFor(500000) === drip.MAX_CLICKS, String(drip.clicksFor(500000))); // the offerwall title a stranger actually reads (the platform's floor is 5 characters) const T = (c, u) => drip.titleFor(c, u || 'https://www.mailer.gold/x');