The .inv-id-inline spans (join button + dApp-sponsor mention) were left on the
inviter's id; now they follow joinTarget like the header/href already did.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Fixes the spillover leak where a qualified member promoting their own link had
joins land back on themselves (bonus reward) instead of qualifying their team.
- /api/public/member now returns joinTarget: unqualified member -> self;
qualified -> next-to-qualify in their leg (reuses rotation-aligned nextInLine);
whole leg qualified -> global rotation sponsor; else -> spillover (prior behavior)
- /join page: the Join button, "join under" header, sponsor-ID copy, and the
submitted sponsorId all follow joinTarget; a note explains "invited by #X,
joining to help #Y qualify" so the new member knows their real sponsor
- Member's SHARE link is unchanged (/join/<id>); resolution happens when a
visitor opens it, so it self-corrects even for links already in the wild
Dry-run verified: /join/27 -> #34, /join/34 -> #34 (self), /join/21 -> #34.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Prospects who clicked a member's shared /my link landed on a bare stats
dashboard with no explanation of the program. New /join/<id> page carries the
full bridge-page story (video, strategy, matrix, live on-chain payout proof)
personalized to one sponsor: their live position stats as proof, their ID
pinned on the dApp join button, and the submit-your-ID form locked to them
(source invite-<id>). Dashboard share buttons + QR codes now hand out the
invite page; /my stays the member dashboard. Invalid/unregistered invite ids
fall back to the /start rotation. Tracked as new 'join' event with an admin
traffic column.
Also: the chain indexer now auto-increments a rotation sponsor's directs when
a registration names them as referrer (same op as the admin ⊕), announcing it
on Telegram. At 2/2 it alerts to Qualify instead of auto-rotating — moving
the team focus stays a human decision.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>