Inspiration

Princeton has a thriving but fragmented gaming community. Students are scattered across random Discord servers with no unified way to find teammates, track rankings, or run tournaments. I wanted to build the platform we wished existed — one designed specifically for Princeton students, that brings the entire campus gaming scene into one place.

What it does

Princeton Esports is a full-stack platform for Princeton students to connect around competitive gaming. Players can build gamer profiles with their games, ranks, and platform credentials, then use a weekly availability heat map to find teammates with matching schedules. The platform features per-game leaderboards across 18+ titles, a full tournament system supporting single elimination, double elimination, round robin, and Swiss formats, team management with rosters and roles, and real-time group chat so squads can coordinate without ever leaving the app.

How we built it

Frontend: React 18 + Vite, with Zustand for state management and Socket.IO for real-time updates Mobile: Native iOS app in SwiftUI (iOS 17+) with full feature parity Backend: Node.js + Express REST API with Socket.IO for presence and messaging Database: PostgreSQL with a migrations system for schema management Auth: Princeton CAS single sign-on — no new accounts, just your Princeton login Storage: AWS S3 for avatar uploads with Sharp for image optimization Deployment: Heroku-ready production build

Challenges we ran into

Integrating Princeton's CAS authentication and managing sessions securely across the app Designing the availability heat map data model (7 days × 24 hours) in a way that was both efficient to query and intuitive to display Building real-time presence and chat that gracefully handles multi-session scenarios and disconnects Maintaining full feature parity between the web app and the iOS app with two completely different tech stacks Modeling flexible rank systems across 18+ games — each game has its own ranking structure (tiers, divisions, MMR, etc.)

Accomplishments that we're proud of

A fully working dual-platform release: a production-ready web app and a native iOS app Princeton CAS integration that ties every account to a real, verified Princeton student A tournament bracket engine that supports four distinct formats with automated match scheduling Real-time chat and presence powered by Socket.IO with clean multi-session handling A clean, responsive UI that feels purpose-built — not like a generic template

What we learned

How to architect a real-time system at scale using Socket.IO rooms and presence tracking The complexity of designing flexible data models for structured data that varies by game (rank systems, platform credentials) How to keep two separate frontend codebases (React and SwiftUI) in sync around the same backend API The value of a mock API layer for development — it let us build and test the entire frontend before the backend was finished How much UX detail goes into something that feels simple, like a scheduling heat map or a tournament bracket view

What's next for Princeton Esports

Live tournament play — in-app match reporting and live bracket updates during events Push notifications — alerts for tournament matches, team invites, and messages Scrim scheduling — structured practice match coordination between teams Stats integration — pulling live rank data from game APIs (Riot, Steam, etc.) to auto-update profiles Android app — expanding mobile reach beyond iOS Club partnership — official integration with Princeton's esports club for sanctioned tournaments and events

Built With

Share this project:

Updates