feat: wallet UI — WalletConnect component + ranked fight flow in pages

Add WalletConnect.vue with NWC/LN Address connection states. Add "FIGHT
FOR SATS" button to JoinBoutPage with entry fee payment flow. Show ranked
pot and winner payout in FightPage. Add sats stats and wallet section to
BotProfilePage. Extend BotData interface with satsWon/satsWagered/hasWallet.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Dorian
2026-03-08 01:31:51 +00:00
co-authored by Claude Opus 4.6
parent 131d7e587e
commit 95b53e271f
5 changed files with 238 additions and 1 deletions
+12 -1
View File
@@ -579,6 +579,9 @@ async function handleFightEnd(data: any) {
sfxApplause()
sfxCrowdCheer()
await showLiveOverlay(`${data.winnerName} WINS!`, '#00f0ff', 2000)
if (data.mode === 'ranked' && data.potSats) {
await showLiveOverlay(`WON ${data.potSats} SATS!`, '#00f0ff', 1500)
}
liveScene.stopMusic()
}
@@ -592,6 +595,11 @@ async function handleFightEnd(data: any) {
{ type: 'divider', round: 0, text: '', color: '' },
{ type: 'system', round: 0, text: myWon ? 'YOU WIN!' : 'YOU LOSE!', color: myWon ? 'neon-cyan' : 'neon-pink' },
)
if (data.mode === 'ranked' && data.potSats && myWon) {
liveLogItems.value.push(
{ type: 'system', round: 0, text: `YOU WON ${data.potSats} SATS!`, color: 'neon-cyan' },
)
}
scrollLiveLog()
disconnectSSE()
stopHumanPolling()
@@ -949,7 +957,10 @@ function stopAutoBattle() {
</div>
<div class="flex items-center justify-between mt-0.5">
<span class="font-pixel text-[9px]" :class="tierClass(liveFightData.botA.tier || 0)">{{ Math.round(liveFightData.botA.eloRating || 0) }}</span>
<span class="font-pixel text-[9px] text-text-muted">{{ liveFightData.arenaInfo?.name }} | R{{ liveCurrentRound }}</span>
<span class="font-pixel text-[9px] text-text-muted">
{{ liveFightData.arenaInfo?.name }} | R{{ liveCurrentRound }}
<span v-if="liveFightData.mode === 'ranked'" class="text-neon-cyan"> | {{ liveFightData.potSats || 42 }} SATS</span>
</span>
<span class="font-pixel text-[9px]" :class="tierClass(liveFightData.botB.tier || 0)">{{ Math.round(liveFightData.botB.eloRating || 0) }}</span>
</div>
</div>