Skip to content

Project 02

LastRound

Real-money skill-based esports tournament platform — full payment lifecycle, KYC, brackets, and dispute resolution.

Client
An esports start-up, pre-launch
Built with
Next.js · Supabase · Authorize.net · Didit

What we built

A real-money tournament platform for competitive gaming (client project, pre-launch). Players deposit funds, enter skill-based tournaments, and withdraw winnings — which means the platform is, underneath, a payments and compliance system with a game attached.

Built end-to-end: deposits through Authorize.net Accept Hosted, a full-page redirect so no card data ever touches the app's origin; idempotent deposit fulfilment with a reconciliation path that recovers missed or failed confirmations; identity verification (KYC) through Didit gating withdrawals; a manual, admin-approved payout queue for launch; tournament brackets with automatic advancement; and a dispute-resolution flow with evidence upload.

Money paths are built to be safe under retries and attack: request handling is idempotent, payment and identity webhooks are protected by replay guards, and the database layer was audited for privilege escalation and insecure direct object references.

The payment and KYC layers are provider-agnostic. The platform previously ran Stripe and PayPal integrations and currently runs on Authorize.net and Didit.

  • Authorize.net Accept Hosted deposits: full-page redirect, no card data on the app's origin
  • Didit identity verification before any withdrawal, with payouts through an admin-approved queue
  • Idempotent request handling, webhook replay guards and a database audited for privilege escalation and IDOR

Players, tournaments and amounts in these screenshots are sample data from pre-launch testing.

LastRound home screen: a featured tournament with prize pool, a payouts ticker, and a tournament browser listing entry fees and prizes.
Tournament browser with entry fees, prize pools and fill counts.
LastRound Transactions page for a test account: type, currency and date filters above a ledger of tournament entries, prize-pool funding, entry and funding refunds, a community entry and USD withdrawals, each with date, currency, status and amount.
Player ledger: entries, refunds, prize funding and withdrawals.
LastRound Pick Your Game page: a carousel of game cover cards with Rocket League in front and a View tournaments button, a View all games link, and a Join LastRound call to action.
Game browser: active tournaments organized by game.