Welcome credits (spec 8b earned pool v1) + official rehearsal rate card

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>
This commit is contained in:
martbost
2026-09-05 05:48:42 -05:00
parent 013a88b7d0
commit d5bb74db7a
9 changed files with 73 additions and 25 deletions
+3 -1
View File
@@ -30,7 +30,9 @@
try {
const d = await (await fetch('/api/my/dashboard')).json();
if (d.error) return;
$('dbCredits').textContent = (d.credits || 0).toLocaleString();
const wc = d.welcomeCredits || 0;
$('dbCredits').textContent = ((d.credits || 0) + wc).toLocaleString();
$('dbCreditsSub').textContent = wc ? (d.credits || 0).toLocaleString() + ' purchased · ' + wc + ' welcome' : '';
$('dbEarned').textContent = IAP.fmtPol(d.earnedWei || '0');
$('dbBuyers').textContent = d.buyerCount || 0;
$('dbTeam').textContent = (d.referrals || []).length;
+4 -4
View File
@@ -5,7 +5,7 @@
<title>The contract | InstantAdPay</title>
<meta name="description" content="Plain-language review of the InstantAdPay settlement contract: what it does, what nobody can change, what the operator can and cannot touch, and how to verify all of it yourself.">
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Sora:wght@600;700;800&display=swap">
<link rel="stylesheet" href="/assets/site.css?v=20260905a">
<link rel="stylesheet" href="/assets/site.css?v=20260905b">
</head>
<body>
<div class="wrap">
@@ -129,8 +129,8 @@
<div class="small">Advertising services with a performance referral program. Not an investment product; no income guarantees. Crypto transactions are irreversible. Never spend what you cannot afford.</div>
</footer>
</div>
<script src="/assets/common.js?v=20260905a"></script>
<script src="/assets/contract.js?v=20260905a"></script>
<script src="/assets/chat.js?v=20260905a"></script>
<script src="/assets/common.js?v=20260905b"></script>
<script src="/assets/contract.js?v=20260905b"></script>
<script src="/assets/chat.js?v=20260905b"></script>
</body>
</html>
+6 -5
View File
@@ -5,7 +5,7 @@
<title>InstantAdPay: advertise and earn, locked in code</title>
<meta name="description" content="Real ad packages with instant on-chain settlement. Every purchase pays the sponsor line in the same transaction, verifiable by anyone on the live ledger.">
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Sora:wght@600;700;800&display=swap">
<link rel="stylesheet" href="/assets/site.css?v=20260905a">
<link rel="stylesheet" href="/assets/site.css?v=20260905b">
</head>
<body>
@@ -255,6 +255,7 @@
<h3>Free membership includes</h3>
<ul class="checks">
<li>A member account and the live ledger</li>
<li>Welcome credits to taste real ad delivery</li>
<li>Your personal referral link, working from day one</li>
<li>Earnings from day one on your referrals' package purchases</li>
<li>Access to the member dashboard</li>
@@ -398,9 +399,9 @@
</div>
</section>
<script src="/assets/common.js?v=20260905a"></script>
<script src="/assets/wallet.js?v=20260905a"></script>
<script src="/assets/home.js?v=20260905a"></script>
<script src="/assets/chat.js?v=20260905a"></script>
<script src="/assets/common.js?v=20260905b"></script>
<script src="/assets/wallet.js?v=20260905b"></script>
<script src="/assets/home.js?v=20260905b"></script>
<script src="/assets/chat.js?v=20260905b"></script>
</body>
</html>
+4 -4
View File
@@ -5,7 +5,7 @@
<title>Live ledger | InstantAdPay</title>
<meta name="description" content="Every purchase, payout, and pass-up on InstantAdPay, streamed straight from the blockchain with a verify link on every line.">
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Sora:wght@600;700;800&display=swap">
<link rel="stylesheet" href="/assets/site.css?v=20260905a">
<link rel="stylesheet" href="/assets/site.css?v=20260905b">
</head>
<body>
<div class="wrap">
@@ -25,8 +25,8 @@
<div>InstantAdPay · <a href="/">how it works</a> · <a id="contractLink" href="#" target="_blank" rel="noopener">contract source ↗</a></div>
</footer>
</div>
<script src="/assets/common.js?v=20260905a"></script>
<script src="/assets/ledger.js?v=20260905a"></script>
<script src="/assets/chat.js?v=20260905a"></script>
<script src="/assets/common.js?v=20260905b"></script>
<script src="/assets/ledger.js?v=20260905b"></script>
<script src="/assets/chat.js?v=20260905b"></script>
</body>
</html>
+6 -6
View File
@@ -4,7 +4,7 @@
<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
<title>Member area | InstantAdPay</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Sora:wght@600;700;800&display=swap">
<link rel="stylesheet" href="/assets/site.css?v=20260905a">
<link rel="stylesheet" href="/assets/site.css?v=20260905b">
</head>
<body class="bo-body">
@@ -80,7 +80,7 @@
<div class="pane" id="pane-overview">
<div class="stats" style="margin-top:0">
<div class="stat"><div class="n" id="dbCredits">0</div><div class="l">Ad credits</div></div>
<div class="stat"><div class="n" id="dbCredits">0</div><div class="l">Ad credits</div><div class="small muted" id="dbCreditsSub"></div></div>
<div class="stat"><div class="n mono" id="dbEarned">0</div><div class="l">POL earned</div></div>
<div class="stat"><div class="n" id="dbBuyers">0</div><div class="l">Qualifying buyers</div></div>
<div class="stat"><div class="n" id="dbTeam">0</div><div class="l">Joined your line</div></div>
@@ -208,9 +208,9 @@
</div>
</div>
<script src="/assets/common.js?v=20260905a"></script>
<script src="/assets/wallet.js?v=20260905a"></script>
<script src="/assets/my.js?v=20260905a"></script>
<script src="/assets/chat.js?v=20260905a"></script>
<script src="/assets/common.js?v=20260905b"></script>
<script src="/assets/wallet.js?v=20260905b"></script>
<script src="/assets/my.js?v=20260905b"></script>
<script src="/assets/chat.js?v=20260905b"></script>
</body>
</html>