Username is required: blocking first step on every sign-in until one is saved

showOnboard(required) has no skip and no dismiss; a suggestion from the email
prefix is prefilled (GET /api/my/username-suggest, made unique); the member
area does not render until the username exists. Welcome tour and login ad still
run once for invite arrivals afterwards. Wallet-only sessions are unaffected.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
martbost
2026-09-12 15:32:42 -05:00
parent 6996186061
commit a385fbf4c2
3 changed files with 35 additions and 10 deletions
+5 -5
View File
@@ -98,15 +98,15 @@
<div id="onboardModal" class="modal-back" hidden>
<div class="modal-card">
<p class="eyebrow">Welcome to InstantAdPay</p>
<h3 style="margin:.2em 0 .5em">Pick your username</h3>
<p class="muted small">This is how your team sees you, and it turns your invite link into a clean vanity link.
You can change it later in Profile.</p>
<h3 style="margin:.2em 0 .5em">Pick your username to continue</h3>
<p class="muted small">This is how your team sees you, and it becomes your invite link and your public page.
It is permanent once saved, so pick the one you want to be known by. We suggested one from your email; keep it or change it.</p>
<p><input id="obUsername" placeholder="Username (3-20 letters, numbers, _)" autocomplete="off" style="width:100%"></p>
<p class="muted small" style="margin:12px 0 4px">Optional — a short bio for your public page (you can skip this).</p>
<p><textarea id="obBio" rows="2" maxlength="600" placeholder="A short bio (optional)" style="width:100%"></textarea></p>
<p id="obErr" class="small" style="color:var(--bad)" hidden></p>
<p style="margin-top:14px;display:flex;gap:10px;justify-content:flex-end">
<button class="btn sec small" id="obSkip" type="button">Skip for now</button>
<button class="btn sec small" id="obSkip" type="button" hidden>Skip for now</button>
<button class="btn" id="obSave" type="button">Save &amp; continue</button>
</p>
</div>
@@ -915,7 +915,7 @@
<script src="/assets/common.js?v=20260912b"></script>
<script src="/assets/wallet.js?v=20260911a"></script>
<script src="/assets/promo.js?v=20260911a"></script>
<script src="/assets/my.js?v=20260912c"></script>
<script src="/assets/my.js?v=20260912e"></script>
<script src="/assets/chat.js?v=20260907l"></script>
</body>
</html>