DEUCE League
2025Skill-Matched Sports Leagues

Problem
Recreational tennis, pickleball, and padel in Malaysia runs on WhatsApp groups and word of mouth. Finding a court is easy; finding an opponent who will actually give you a match is not. Traditional leagues solve the matching problem by taking away the flexibility, with fixed fixtures and assigned courts, which is exactly what people with jobs cannot commit to. DEUCE is the flex league in between: skill-matched opponents, played on your own schedule.
Approach
8-week seasons, year-round, across three sports in one app. Every player carries a DEUCE Match Rating (DMR) that updates after each result and feeds automated division placement, so the league keeps rebalancing itself instead of relying on self-reported skill levels. Scheduling is a negotiation rather than a fixture list: propose times and courts, the opponent confirms, the match locks in. Around that sit the things that make a local league feel local, including in-app chat, a social feed, live division leaderboards, and badges.
Contribution
I built the mobile app and the API behind it. On the client (React Native + Expo): onboarding and sport selection, the match proposal and confirmation flow, score submission with opponent confirmation, division leaderboards, chat, and the social feed. On the server: DMR rating updates, division placement, the match lifecycle from proposal to confirmed result, and real-time chat and notifications.
Stack
- Frontend
- React Native, Expo
- Backend
- TypeScript, Express, Prisma, Socket.io
Details
- Role
- Software Developer
- Team
- 5+ engineers
- Timeframe
- 2025
- Scope
- Mobile App & API