Skip to content

Fight Night product review — cohesiveness, UX gaps, risks #43

Description

@ScavieFae

Product Review — Fight Night (Mar 11)

Post-build review of briefs 001, 003, 004. Code is feature-complete but several product-level gaps need addressing before Wednesday.

Stations at the Event

Station Hardware Software Status
Main Stage 2 Macs running Slippi netplay Arena matchmaking, bracket advancement, prediction pools Built. Needs integration test.
Bracket Display Secondary monitor/projector viewer.html — polls arena every 3s, SVG bracket tree, LIVE badges Built. QR code for betting in corner.
Operator Console Mattie's phone or laptop admin.html — create tournament, start matches, force-advance Built. Missing rematch button.
Betting Terminal Every spectator's phone /bet page — Privy sign-in, one-tap betting, auto-transitions Built. Privy + Monad untested.
Challenge Cabinet 1 Mac + GCC adapter + controller nojohns challenge phillip — human vs bot, scoreboard Not started. P2.

Product Cohesiveness Issues

  1. Bracket viewer and bet page are visually disconnected — different design languages (standalone HTML vs React app). Spectator scanning QR may not feel like the same product.
  2. No "what is this?" onboarding — bet page assumes context. No explainer screen, no 10-second pitch for walk-up spectators.
  3. No operator runbook — admin panel has buttons but no documented sequence, failure modes, or recovery steps.
  4. No spectator-facing match info — bettors can't see the game from the bet page. Betting blind unless watching the physical screen.
  5. Registration requires Mattie — admin.html is the only way to register. Needs to work on another computer, or ideally be delegatable to a helper.

UX Gaps

  • Betting feels emotionally empty — mechanically works, but no leaderboard, no social proof, no "Alex is up 3 bets." Solo phone experience.
  • No match notifications for entrants — tournament participants have no way to know when their match is starting.
  • MON has no meaning — spectators can't do anything with winnings. No cashout, no prize, no context for value.

Critical Risks

Risk Severity Status
Privy doesn't support Monad chain 143 Critical UNTESTED
WiFi blocks Slippi UDP at venue Critical UNTESTED (test Wed afternoon)
Character select stuck (dead air) High NOT STARTED (Tuesday session)
Arena wallet runs dry High Logging built, funding NOT DONE
Admin panel missing rematch button Medium Endpoint exists, no UI
Privy free tier limit for 30-50 users Medium UNKNOWN
Operator overwhelmed (Mattie solo) Medium NEEDS RUNBOOK
One-machine fallback not tested Medium NOT STARTED
Faucet abuse (one person drains 50 wallets) Low Cap built, no rate limiting

Suggested Hardening (Brief 008)

Filed as .loop/briefs/008-hardening.md:

  1. Test Privy + Monad — kill-switch decision
  2. One-machine local fallback for nojohns fight
  3. Rematch button in admin.html
  4. Operator runbook (printed)
  5. Registration flow on non-operator machine
  6. Vertical slice: tournament create → match → bet → resolve end-to-end
  7. Betting leaderboard (stretch)
  8. Live odds on bracket viewer (stretch)

Code Quality Notes (from review)

Brief 001 (Bracket):

  • All 6 tasks built. Clean separation: models → bracket → tournament → API → viewer → admin.
  • Admin panel missing: rematch, expire match, manual bye. Only force-advance.
  • Character list has typo (YOUNKLINK), duplicate MEWTWO.
  • Viewer optimized for 1920x1080, no horizontal scroll for >16 entries.

Brief 003 (Disconnect Recovery):

  • All 8 tasks built. Fully decoupled match/pool lifecycle.
  • _expire_stale_matches() properly renamed, pool cancellation is independent.
  • _log_wallet_balance() called after all onchain ops.

Brief 004 (Prediction Markets):

  • All 6 tasks built. Privy integration, /bet page, faucet, QR, claim flow.
  • BetPage.tsx is clean — good empty states, hides crypto units, "N bets remaining."
  • Faucet is idempotent, capped at 50, validates addresses.
  • Fixed 0.05 MON bet size, reserves 0.01 for gas.

Related

  • Brief 008 (hardening): .loop/briefs/008-hardening.md
  • Go-live checklist: tournaments/PROGRAM.md

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions