Athlify is a mobile-first platform for street and urban sport athletes. I designed and implemented the backend across nine functional modules covering identity, team management, location-based discovery, match challenges, real-time chat, social following, announcements, notifications, and admin moderation.
The Coordination Problem
Street athletes have no dedicated infrastructure for organizing games. Finding opponents, agreeing on a time, and keeping a team informed all happen across scattered channels — or not at all.
The system needed to make that coordination structured. Challenge proposals, counter-offers, team membership, and real-time messaging all had to be connected enough that athletes could trust the platform to handle the logistics.
What I Worked On
- Built the full backend MVP across nine modules on NestJS with Prisma and PostgreSQL.
- Implemented a structured challenge lifecycle: send, accept, reject, and counter-propose match requests with linked proposal history.
- Designed team management with role-based permissions, join requests, invitations, and captain controls.
- Built real-time direct and group chat over WebSockets with persistent message history.
- Implemented a location-aware discovery layer for map-based team browsing with sport filtering.
- Delivered a notification engine covering in-app records and Firebase Cloud Messaging push delivery for all platform events.
- Supported an announcements feed with admin approval gates, follower-scoped visibility, and like interactions.
Durable Shape
The backend became more reliable when every lifecycle — challenges, memberships, content — was modelled as a state machine with explicit transitions and non-destructive removal. Soft deletes throughout meant moderation actions were reversible and audit trails were always intact.
The modular NestJS architecture kept each domain self-contained, so new features like venue booking or tournament brackets can be layered on without touching what already works.