Inspiration

As students at UW-Madison, we saw a constant struggle to organize pickup sports. Most games were coordinated through fragmented group chats or relied on the hope that people would just show up. We wanted to create a central "game board" for campus, a place where any student can instantly find a match, build a team, and turn strangers into teammates.

What it does

BadgerPlay is a mobile-first web app that allows students to host and join real-time pickup games like basketball, volleyball, and pickleball. It features a live game feed, a verified student badge system for .edu emails, and a robust social layer. Users can add friends, chat directly, and send interactive game invites. We also implemented a private game system where hosts can create hidden matches that are only accessible via invite links sent in chat.

How we built it

The app was built from scratch using a modern full-stack architecture:

Frontend: Built with React 18 and Vite for speed, using Tailwind CSS for a mobile-first, native-feeling UI.

Backend: A Node.js and Express REST API manages authentication, game logic, and social features.

Database: MongoDB Atlas stores our document-shaped data, with Mongoose handling schema validation.

Security: We implemented custom password hashing with bcryptjs and a 6-digit OTP verification system for signups.

We deployed using render.

Challenges we ran into

The most difficult engineering hurdle was the Private Games System. We had to ensure that private games were completely excluded from global database queries while still being accessible to specific invited users. Designing the "invite bubble" within the chat, which required the frontend to parse message data and render an interactive "Join Game" button, tested our ability to manage complex application states.

Accomplishments that we're proud of

We are particularly proud of the Real-Time Feel we achieved without the initial complexity of WebSockets. By implementing efficient 10-second polling for games and 3-second polling for messages, the app feels live and responsive. We also successfully built a complete social ecosystem where every name and avatar is a gateway to organic discovery and new friendships

What we learned

This project reinforced how critical organic social discovery is for a community app. We learned that technical features like "Game History" aren't just logs—they are tools that help users reconnect with people they’ve played with, turning a single game into a lasting social connection.

What's next for Badger Play

Native App Transition: We plan to transition the platform from a web app into a dedicated mobile app to provide a more seamless user experience.

Calendar Integration: We will implement an "Add to Calendar" feature, allowing students to automatically sync their scheduled pickup games with their personal schedules.

Push Notifications: To keep users updated in real-time, we plan to add push notifications for when someone joins your game or sends you a new invite.

Real Email Delivery: We will move beyond the current alert-based demo system to implement production-ready email delivery for OTP codes and account verifications.

Map View: We aim to build an interactive map view that uses campus geolocation to show exactly where games are happening across UW-Madison in real-time.

And more features...

Built With

Share this project:

Updates