WISLA
A modular athlete management platform built with Java 17 and Spring Boot 3, serving 20K+ daily users across multiple sports organisations.
The brief, unpacked
WISLA is a comprehensive athlete and team management platform designed for sports organisations to manage registrations, scheduling, performance tracking, and communication. The platform handles complex domain logic including multi-tenant organisation hierarchies, role-based access control with Spring Security 6, and real-time synchronisation across distributed services. I architected the backend from the ground up, designing a domain-driven service layer with JPA/Hibernate for MySQL, RESTful APIs with comprehensive OpenAPI documentation, and a modular monolith structure that supports future microservice extraction.
- Daily Active Users
- 20K+
- API Response Time (p95)
- <120ms
- Tenants
- 15+
- Test Coverage
- 92%
The work
Challenges, and how they fell
- 01
Multi-tenant data isolation
Serving multiple independent organisations with strict data isolation requirements and varying custom field schemas.
Solution
Implemented a discriminator-based multi-tenant strategy with Spring Security filters injecting tenant context at the request level. Custom field schemas are stored as JSONB with Hibernate custom types, enabling flexible per-organisation attributes without sacrificing query performance.
- 02
Complex role hierarchies
Organisations required granular permission models — from league administrators to team coaches to athletes — with overlapping and inheritable permissions.
Solution
Designed a role-based access control layer using Spring Security 6 method-level annotations, with a custom permission evaluator that resolves transitive role hierarchies. The permission matrix is cached in Redis with tenant-scoped invalidation.
- 03
High-throughput competition scheduling
The scheduling engine needed to handle concurrent booking requests for venues, officials, and team slots without conflicts, across multiple timezones.
Solution
Built a pessimistic locking scheduler with MySQL row-level locks and a compensation transaction pattern for conflict resolution. The scheduler processes bookings in batch with configurable window sizes, achieving sub-100ms response times at peak load.
Gallery








Next project
Interactive Portfolio
Continue