Wall page: mint QR, achievement badge, admin-ad backfill, join gated on views

- QR is mint-green (still high-contrast for reliable scanning).
- The wall shows the owner's achievement badge next to their avatar.
- Positions 2 & 3 fill with upline line-banners, then ADMIN ADS when there's no
  upline (configurable via data/admin-wall-ads.json; sensible default) so the
  wall is never sparse.
- "Join free through this wall" is disabled until the visitor has viewed every
  ad on the wall, with a "X/Y viewed" prompt.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
martbost
2026-09-07 08:35:44 -05:00
parent a4119d652d
commit 0dbd99f69e
11 changed files with 59 additions and 21 deletions
+5 -3
View File
@@ -5,7 +5,7 @@
<title>Banner wall | InstantAdPay</title>
<!--OG-->
<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=20260906m">
<link rel="stylesheet" href="/assets/site.css?v=20260907s">
</head>
<body>
<div id="nav"></div>
@@ -13,6 +13,7 @@
<div class="wrap" style="max-width:920px">
<div class="bio-head" id="bioHead" hidden>
<img id="bioAvatar" class="bio-avatar" alt="" hidden>
<img id="bioBadge" class="bio-badge" alt="achievement badge" hidden>
<div class="bio-meta">
<p class="eyebrow">Member profile</p>
<h2 id="wallTitle" style="margin:.1em 0">Loading…</h2>
@@ -31,12 +32,13 @@
<h3 id="wallCtaHead">Join this line</h3>
<p class="muted small">Free to join with just an email. Your wallet only comes out if you buy —
and payments go straight to member wallets, never through an admin.</p>
<p id="wallGate" class="small" style="color:var(--amber);font-weight:600" hidden></p>
<p><a class="btn" id="wallJoin">Join free through this wall</a></p>
<p class="small muted"><a href="/ledger">Watch the live ledger</a> · <a href="/contract">Read the contract</a></p>
</div>
</div>
</section>
<script src="/assets/common.js?v=20260907n"></script>
<script src="/assets/wall.js?v=20260906m"></script>
<script src="/assets/common.js?v=20260907s"></script>
<script src="/assets/wall.js?v=20260907s"></script>
</body>
</html>