Credit activity ledger: every earn and spend logged with a reason, listed under Campaigns

Hugh earned a 10-credit sign-in bonus, then bought a 280-credit extension; earned credits spend
first, so Earned read 0 and the bonus looked lost. There was no record a member could check.
Now every real credit movement writes a credit_log row (JSON store in file mode): welcome, sign-in
bonus with streak, daily claim, inbox reads, video watches, verified visits, milestone/leaderboard
bonuses, partner codes, admin/team grants, AI Copy Engine charges + refunds, flat buys (featured
run, extension, visit pack, more visits), login-ad days, and metered delivery rolled up per
campaign per day; on-chain purchased-credit spends are marked. GET /api/my/credits/activity;
dashboard shows the last 40 under Campaigns (also when there are no campaigns) with a link from
Earn credits. Chatbot canned answer + AI prompt updated; my.js tag bumped.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
martbost
2026-09-16 08:41:43 -05:00
parent ffacf741da
commit 69d672665c
8 changed files with 50 additions and 14 deletions
+3 -2
View File
@@ -597,7 +597,8 @@
view counts. Finish today's set, claim your credits, and spend them on banner and text
campaigns just like purchased ones.</p>
<p><span class="badge" id="earnProgress">…</span>
<span class="badge" id="earnBalance">…</span></p>
<span class="badge" id="earnBalance">…</span>
<a href="#" id="earnActLink" class="small" title="every credit earned or spent, with the reason">Credit activity</a></p>
<div class="card" style="background:rgba(4,8,7,.5)" id="earnStage">
<div id="earnAdBox" class="small muted" style="min-height:80px;display:grid;place-items:center">
Press the button to open the first ad in a new tab.</div>
@@ -1021,7 +1022,7 @@
<script src="/assets/common.js?v=20260914a"></script>
<script src="/assets/wallet.js?v=20260911a"></script>
<script src="/assets/promo.js?v=20260911a"></script>
<script src="/assets/my.js?v=20260916b"></script>
<script src="/assets/my.js?v=20260916c"></script>
<script src="/assets/chat.js?v=20260907l"></script>
</body>
</html>