Five Dollar Friday bridge page, with the member's link on it

Marty's ask: use the Friday promo as a tool where the sponsor gets the
credit, and as a bridge-page entry point. The sponsor part already worked
(any public page + ?ref sets the sponsor cookie, 2026-09-21); what was
missing was a page that is ABOUT the offer, so a click on a "20% bonus
credits today" image did not land on the general pitch and leak.

/friday: the banner as the hero, the live state from /api/friday (live now
with today's pack count and bonus credits issued, or the next date with a
countdown to midnight Central found by scanning minutes so DST cannot put it
an hour out), three steps, the email-first join with a new `friday` angle so
it shows as its own row in Admin > Traffic, and the credit definition. No
attribution logic added: last touch, walk-up, as everywhere.

Promo tools: a {{FRIDAY}} token that turns the member's invite link into
/friday?ref=<username>; posts for X, Facebook and Telegram and a text that
carry it; the three new banners (loft 1200x630, dark 1200x630, square
1080x1080) as a group in the kit with a copy-my-Friday-link button on it.
Chatbot answer points at the page and drops the stale "first one is
September 25" line. /friday in the traffic list, the sitemap and the QA
public walk. Cache tags bumped on my.js, promo.js and site.css.

QA member walk: 0 bugs.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
martbost
2026-09-25 06:26:11 -05:00
parent 1b72a9a18c
commit 5b694c8ab4
11 changed files with 1391 additions and 1253 deletions
+17
View File
@@ -2088,6 +2088,10 @@
bwrap.dataset.filled = '1';
// one collapsed accordion per size / use, so the kit stays scannable as it grows
const GROUPS = [
{ title: 'Five Dollar Friday · share with your /friday link', friday: true, items: [
{ file: 'iap-five-dollar-friday-v2-1200x630.jpg', size: '1200×630 · Five Dollar Friday · loft, Central-time window' },
{ file: 'iap-five-dollar-friday-dark-1200x630.jpg', size: '1200×630 · Five Dollar Friday · dark studio' },
{ file: 'iap-five-dollar-friday-v2-1080x1080.jpg', size: '1080×1080 · Five Dollar Friday · square for Instagram and feeds' } ] },
{ title: '1200×630 · social posts, link previews, Daily News covers', items: [
{ file: 'iap-hero-1200x630.png', size: '1200×630 · hero · advertise and earn' },
{ file: 'iap-advertise-earn-1200x630.jpg', size: '1200×630 · advertise and earn instantly, locked in code' },
@@ -2135,6 +2139,19 @@
det.className = 'pb-acc';
det.innerHTML = '<summary><span>' + esc(g.title) + '</span><span class="pb-count">' + g.items.length + (g.items.length === 1 ? ' banner' : ' banners') + '</span></summary><div class="pb-grid"></div>';
const grid = det.querySelector('.pb-grid');
if (g.friday) {
// the bridge page with this member's referral: any public page + ?ref sets the sponsor cookie
const inv = (document.getElementById('inviteLine') || {}).textContent || '';
const fl = inv.replace(/\/join\/([^/?#]+).*$/, '/friday?ref=$1');
const note = document.createElement('div');
note.className = 'pb-note';
note.innerHTML = '<span>Post any of these with your Five Dollar Friday link: <b class="mono"></b></span>';
note.querySelector('b').textContent = fl;
const cp = document.createElement('button'); cp.className = 'btn small'; cp.textContent = 'Copy my Friday link';
cp.addEventListener('click', async () => { try { await navigator.clipboard.writeText(fl); IAP.status('Friday link copied.', 'ok'); } catch (e) { IAP.status('Copy failed.', 'bad'); } });
note.appendChild(cp);
grid.before(note);
}
for (const b of g.items) {
const url = location.origin + '/banners/' + b.file;
const d = document.createElement('div');