Unified Platform for Football Operations and Recruitment

Football has a coordination problem. Players, coaches, and clubs constantly move between teams, but the tools connecting them—training schedules, match history, recruitment visibility—are fragmented across WhatsApp, spreadsheets, and federation websites.
I designed and built Le Club, a unified platform that centralizes team management, player performance, and recruitment into a single system.
A shared data model powers multiple experiences: coaches manage trainings and squads, players track performance, clubs organize across teams, and recruiters discover talent with verified data.
Core Capabilities
- Multi-role platform (players, coaches, clubs, recruiters) with unified access
- GraphQL API covering teams, players, matches, trainings, and competitions
- Identity and authorization system based on OpenID Connect (OIDC)
- Real-time notification system for events and user interactions
- Data ingestion pipeline aggregating verified football data from external sources
Key Results
- Replaced fragmented workflows with a single, coherent multi-role platform
- Unified identity model across backend and clients, avoiding duplicated access logic
- Secure data access via role-based authorization and row-level security
- Continuous enrichment of platform data through large-scale ingestion pipelines
Architecture Overview
Le Club is a polyglot TypeScript/Python monorepo composed of distributed services:
- API (Node.js + Koa + Apollo GraphQL)
Exposes a unified domain model for clubs, teams, players, and events, backed by MongoDB - Identity Layer (OIDC Provider)
Handles authentication and authorization with role management and Hasura integration - Notifications (RabbitMQ + Server-Sent Events)
Decoupled real-time event delivery system - Data Pipeline (Python + Celery + Redis)
Scrapes and normalizes football data (FFF, RBFA, Soccerway, etc.)
Technical Highlights
- Built a full OpenID Connect provider with PKCE flows and email/phone authentication
- Modelled event hierarchy using Mongoose discriminators (trainings, matches, tournaments)
- Implemented real-time notifications via SSE backed by RabbitMQ
- Designed a distributed ETL pipeline with proxy rotation (Scrapoxy) for large-scale scraping
- Shared TypeScript types and configuration across a multi-service monorepo
My Role
Owned the system end-to-end:
- Designed architecture and data model
- Built the GraphQL API and identity layer
- Implemented real-time notification infrastructure
- Developed the data ingestion pipeline
- Contributed to frontend applications (React, video upload, match annotation)