EvThatGuy came to me with a straightforward ask: he needed a platform for his 2K esports community. Tournaments with real prize pools. Team management. A landing page that looks good on stream. And he needed it fast because content creators operate on a different timeline than enterprise clients — if it's not live in weeks, the moment has passed.
Here's how I built UPA Esports (Universal Players Association) and what I learned about building for content creators.
The Problem with Esports Platforms
Esports platforms fall into two categories. The first is the 2015 WordPress gaming site: neon green on black, aggressive typography, stock photos of people wearing headsets, and a backend that barely works. The second is the overdesigned Figma prototype: beautiful mockups that took 6 months to produce and will take another 12 to build, by which time the community has moved on.
EvThatGuy needed the middle ground. A platform that looks professional, functions reliably, handles real money, and exists in the real world — not in a design file. That's the brief. Simple to state, hard to execute.
Tournament System with Stripe Prize Pools
The core feature is tournaments. Players pay an entry fee through Stripe. The fees pool into the tournament prize pot. Winners get paid out automatically based on placement. The platform takes a percentage for operating costs. Every dollar is tracked, every payout is auditable, and Stripe handles the actual money movement so I never have to touch funds directly.
The Stripe integration was the most complex part of the build. Entry fees use Stripe Checkout for the payment flow. Prize pools are tracked in the database and reconciled against Stripe's ledger. Payouts use Stripe Connect — each tournament winner needs a connected account to receive funds. The first-time winner onboarding flow (creating a Stripe Connect account, verifying identity, linking a bank account) had to be smooth enough that a 19-year-old 2K player could complete it without calling support.
Tournament states are managed through a state machine: registration open, registration closed, bracket generated, in progress, completed, payouts processing, payouts complete. Each state transition triggers specific actions — closing registration sends bracket notifications, completing a round updates the bracket, finishing the tournament initiates the payout sequence.
Team Management
2K esports is team-based. Pro-Am squads need rosters, and rosters need management. The team system handles:
- Roster tracking: Active players, substitutes, and inactive members with role designations (PG, SG, SF, PF, C for basketball)
- Team profiles: Public pages showing team record, tournament history, and roster with individual stats
- Captain controls: Team captains can invite players, remove players, set lineup order, and register for tournaments
- Free agency: Players without a team can list themselves as free agents with their position, play style, and availability
The team management UI borrows heavily from what works in traditional sports apps. Card-based roster views. Drag-to-reorder lineups. Status badges for active/injured/inactive. Nothing revolutionary — just solid UX patterns applied to esports instead of the NFL.
The Landing Page Challenge
EvThatGuy streams on Twitch and posts on YouTube. When he shows UPA on stream, the landing page is the first thing his audience sees. It needs to look good at 1080p in a stream overlay, load fast on mobile for viewers who click the link in chat, and communicate "legitimate esports platform" in under 3 seconds.
The design direction: dark theme with selective neon accents. Not the generic gaming aesthetic where everything glows — targeted accent colors on key elements (CTAs, tournament cards, prize pool numbers) while the rest of the UI stays clean and restrained. The hero section features real tournament data, not placeholder content. When a $500 prize pool tournament is live, the landing page shows it. Proof over promises.
Typography matters more than most developers think for gaming platforms. I used bold, condensed headings that feel competitive without being aggressive. Body text is clean and readable. No grunge fonts, no faux-distressed textures, no visual noise. The aesthetic says "modern esports organization" not "2009 MLG montage."
The Stack
- Next.js — App Router for the frontend, API routes for the backend
- Prisma + PostgreSQL — tournament data, team rosters, player profiles, transaction records
- Stripe — entry fees via Checkout, prize payouts via Connect, platform fees via application fees
- Vercel — deployment with edge functions for the tournament bracket API
The Stripe Secret Rotation Issue
I'm going to be honest about an open issue because this blog is about proof, not perfection. The Stripe secret key needs rotation. It's been flagged in the backlog, it's a known security item, and it hasn't been done yet. In a perfect world, every secret rotates on a schedule. In the real world of solo development across 10+ projects, some maintenance items sit in the queue longer than they should.
I mention this because too many technical blogs pretend everything is always clean. It's not. Production systems accumulate maintenance debt. The difference between a good operator and a bad one isn't zero debt — it's knowing exactly where the debt is and having a plan to address it.
Building for Content Creators
Content creators are a specific kind of client. Here's what makes them different from enterprise or small business clients:
- Speed is everything. A creator's audience has a short attention span. If EvThatGuy announces a platform and it's not live within days, his community loses interest. There is no "we'll launch next quarter." The timeline is measured in weeks, maximum.
- Visual quality is non-negotiable. The platform will be shown on stream. It will be screenshotted for social media. If it looks mediocre, it reflects on the creator's brand. Design quality isn't a nice-to-have — it's a core requirement.
- Community features matter more than admin features. An enterprise client wants dashboards and reports. A creator wants the community-facing experience to be exceptional. The admin panel can be basic as long as the player experience is polished.
- They test in production, on camera. EvThatGuy's first interaction with new features often happens live on stream. That means bugs are public. There's no quiet deployment window. Every release needs to work the first time because the first time might be in front of 500 viewers.
The Result
UPA Esports is live with active tournaments, real prize pools, and a growing player base. The platform handles everything from registration to payout without manual intervention. EvThatGuy can announce a tournament on stream, players can register and pay within minutes, brackets generate automatically, and winners get paid through Stripe Connect.
Building for content creators taught me that the bar for "good enough" is higher than most enterprise work. When your product is literally on camera, every pixel matters and every interaction is a performance. That pressure produces better software.