Real people, not numbers: usernames (unique, profile pane to set them),
shown across the ledger, activity, rosters, and the sidebar chip; vanity
invite links (/join/<username>) with late chain binding intact. Promo tools
pane ships Branded Voice share posts and an email swipe personalized with
each member's link. The earn viewer excludes a member's own campaigns, so
nobody earns from their own spend. Back office gains the cyan/violet/amber
accent family over the green base. Three house campaigns seeded so every
surface shows live inventory. Assets v=20260905i.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Earning views now run on single-use server-issued tokens: the view only
counts when the full dwell elapses on the server clock; instant, forged,
replayed, and stale posts are all rejected, and the client countdown
pauses whenever the tab loses visibility or focus. New placements: login
ads on the sign-in screen (the per-day format's real home), a banner slot
in the back-office Overview, a text slot in the member sidebar, and a
member-ads banner on the homepage. Assets v=20260905g.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Overview gains a recent-activity mini-feed (chain events + line joins) and
a quick-actions card jumping straight to buy/earn/campaigns plus one-tap
invite copy. Panes fade in (reduced-motion safe). First slice of the
back-office polish pass. Assets v=20260905f.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Members buy directly from the dashboard: live-priced tiles in a dedicated
menu section, wallet flow with buy-time sponsor resolution, dashboard
refresh on settle. No more round-trip to the homepage. Assets v=20260905e.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Members earn credits by attention (spec 8b): daily 5-ad set with dwell
timing and a too-fast guard, then a claimable daily batch. Earned credits
now FUND campaigns: banner/text budgets draw earned-first (free members can
advertise on welcome credits alone), purchased credits and the on-chain
burn queue only cover the remainder; earned-only campaigns pause when the
pool runs dry. New Earn credits section in the member menu with the viewer.
Explorer links degrade gracefully for the private chain (contract page
points at the audited Amoy verification). Site flipped to the anvil
rehearsal chain at rpc.instantadpay.com: unlimited test POL, no more
faucets. E2E: welcome->views->claim->earned-funded campaign->charged
serving, all green. Assets v=20260905d.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Every account gets welcomeCredits (25, rate-card configurable) via an
idempotent lazy grant on dashboard load, so existing members receive theirs
retroactively. earned_credits table with JSON fallback; Overview stat shows
the purchased/welcome split. Chatbot facts and canned answers synced;
homepage free-membership list mentions the welcome batch. Rate card
promoted from placeholder to decided and persisted in the volume.
Spending integration for the earned pool is the next engine build.
Assets v=20260905b.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
After a wallet sent a transaction, waitTx polled the public RPC straight
from the browser, which connect-src 'self' blocks (Firefox NetworkError,
reported by Marty on Activate; the activation itself landed on-chain).
New /api/tx/<hash> relays eth_getTransactionReceipt via the server's RPC
pool, so the browser only ever talks to us and the mainnet flip needs no
CSP changes. Assets v=20260905a.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Fixed left sidebar (iconed menu with active accent, site links, user chip,
logout), sticky top bar with per-section title and rehearsal notice,
content region per pane. Mobile gets a hamburger off-canvas drawer that
closes on selection. Marketing nav no longer wraps the member area;
signed-out visitors get a centered auth page. All flows and pane IDs
preserved; verified on desktop and 390px. Assets v=20260904r.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Hash-routed pane tabs replace the single scrolling page. Overview keeps the
stat cards, next-move guidance, and levels; My line holds the invite/share
kit and roster; Campaigns gains a pre-purchase gate card; Earnings gains a
pre-activation explainer; Wallet gathers account, credits, link, activate,
logout. Deep links (/my#campaigns) land on the right pane. Browser-verified
tab exclusivity, hash sync, deep links, and 390px overflow. Assets
v=20260904q.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Level-3 progress marker right-aligns inside the card (was centered past the
edge). Grid/flank/story children get min-width:0 so the calculator's
tablewrap scrolls internally instead of widening the page 7px. Invite link
and pitch preview wrap anywhere; ticker gets layout+paint containment;
img max-width guard. Verified at 390px across all four pages with sticky
nav intact. Assets v=20260904p.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The panel's display:flex overrode the browser's default [hidden] styling,
so it rendered open from first paint and the close button was inert. Added
a global [hidden]{display:none!important} guard so the attribute always
wins. Browser-verified: loads minimized, opens, closes, toggles. Assets
v=20260904l.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
refreshNavWallet assumed every signed-in session has a wallet address and
threw on null for email-only members; the catch returned null and render()
treated the member as signed out even though the session and cookie were
valid. Nav now shows the email (or member badge) when no wallet is linked.
Verified with a full browser cycle: session landing, logout, fresh code
sign-in. Assets v=20260904k.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
/api/my/dashboard aggregates credits, earned POL (from the chain index),
qualification count, and the referral roster (privacy-masked emails,
joined-free vs wallet-linked status, code+id referrer match). Members area
leads with four stat cards, a next-move card with a qualification progress
bar (2 and 5 buyer marks), the line roster, and a copy-ready share message
beside the invite link. Assets v=20260904j.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Coolify MySQL (instantadpay-db) via DATABASE_URL; db.js bootstraps schema
and one-time imports the volume JSON. accounts/auth/ads are dual-mode: the
MySQL path uses guarded UPDATEs for the concurrent ad-serving hot path;
without DATABASE_URL the JSON stores remain (local dev). All data functions
async; server boots through db.init. Chain index stays a file: it is a
rebuildable cache of the blockchain, which remains the money truth.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
RM Circle pattern: nine canned answers for the questions everyone asks
(pyramid, withdrawals, splits, qualification, joining, credits, safety),
OpenRouter fallback with a facts-loaded system prompt and hard no-income-
promise rules, graceful no-key fallback. Floating mint bubble widget with
linkified replies; 10/min per-IP rate limit. Assets v=20260904i.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Scenario sliders compute the contract's mechanical splits: sub-$20
packages visibly fail to qualify (levels stay locked and pass up), and the
copy states plainly this is arithmetic, not a prediction. Pass-up rule
block explains the 25-position climb and that it cuts both ways. Assets
bumped to v=20260904h.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Every account gets a share code at signup; /join/<code> attributes
first-touch site-side and resolves to the referrer's CURRENT on-chain id at
the referral's buy time, so activating any time before your people buy
locks the line to you. Joining through a code emails the referrer an
activate-payouts nudge. Buy flow re-resolves the sponsor at click time.
Copy updated across home and members; assets bumped to v=20260904g.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
/contract: plain-language security review with the six design laws, honest
operator CAN/CANNOT lists, split walkthrough, oracle bridge and anti-stall
notes, testing summary, live explorer + Sourcify verified-source links
(config-driven so it follows the mainnet flip). Nav gains The contract.
All asset URLs now carry a version query so deploys bust browser caches
(the level-cycler stall). Earn-deeper checklist leads with: no withdrawal
requests, ever.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
/api/auth/email/start issues a 15-min code (60s resend guard, 6 tries);
verify creates the account passwordless (sponsor cookie first-touch) and
mints the session. UI swaps the password cards for the code flow when
config.emailAuth is on; dev mode returns the code inline. Password flow
remains until the key lands in the volume (data/sendgrid.key) or
SENDGRID_KEY env.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Hero now reads Advertise and earn instantly. New Branded Voice sections:
ad-format showcase (3 live, 3 soon) and free-vs-package member benefits.
The earn-deeper diagram cycles levels 1-3, lighting the paying generation
with its percent; chips are clickable, auto-advance respects reduced
motion.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Aurora ground, glass panels, gradient pill CTAs, Sora display face, live
money ticker, stat band fed by chain totals (tallied in the indexer with
one-time backfill), format showcase, Branded Voice FAQ accordions. CSP
extended for Google Fonts.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Spec 8b types 1-3. Spend accrues per campaign in batches; burns queue for
the engine signer (admin runs consume() on-chain, /api/admin/burns). Rates
are volume config (adrates.json), rehearsal placeholders until Marty sets
the real card. Public slots serve on the ledger page; campaign manager in
the members area.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Normal people join with email + password (sponsor attribution via cookie at
signup); the wallet only appears when buying or activating payouts, and gets
linked to the account then. Wallet-only sign-in remains for crypto-native
users. Sessions carry {email, address, memberId}.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Site copy regenerated through the bv-tester1 engine; em dashes scrubbed from
all user-visible strings. /api/my/activity serves per-member earnings,
referrals, and purchases from the chain index.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Zero-dependency Node server on the RM Circle pattern. Chain config lives in
the volume so the same code runs the Amoy dress rehearsal and mainnet.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>