The League Platform
The Operating System for Sports Clubs
A production-grade, multi-tenant SaaS platform that replaces the spreadsheets, WhatsApp groups, and disconnected tools that sports clubs rely on today. One platform for every sport, every club operation — members, payments, sessions, competitions, live scoring, facilities, equipment, communications, and analytics.
Built as a Modular Monolith with .NET 10, Angular 21, SQL Server, Redis, Docker, and SignalR. 16 independent domain modules, each with Clean Architecture layers, communicating through integration events. Includes a full SaaS business model with tiered subscriptions, Stripe Connect, feature gating, and dunning.
View on GitHubPlatform at a Glance
16
Modules
100+
Endpoints
32+
Pages
35
Correctness Proofs
8
Sports
30
Integration Events

Competitions, Matches & Leaderboards
The competitions module handles league tables, fixtures, match management, and live scoring. Season configuration allows administrators to set up competition rules, point systems, and schedules. Players see their personal stats, league standings, and match history from their own dashboard.

Match management: fixtures, results, and scoring

League leaderboard with standings and points table

Player personal stats: matches, performance, and history

Personal leaderboard: how you rank against others
Season & Team Management
Administrators configure seasons with start/end dates, competition rules, and registration settings. Teams are managed with player rosters, captains, and match assignments. Members are tracked with full profiles, attendance history, and membership status.

Season management and setup

Team rosters and management

Member profiles and tracking
Administration, Roles & Permissions
The platform provides fine-grained control over who can do what. 5 roles (SuperAdmin, ClubManager, Member, Coach, Staff) with granular permissions per module. User management, role assignment, season settings, and platform configuration are all accessible through a clean admin interface.

User management with search, filtering, and status control

Granular permission management per role and module

Role management and assignment

Platform configuration settings

Season rules and competition settings
Member Self-Service Portal
Members manage their own profiles, view personal stats, track match history, and access club information without needing administrator help. The portal is designed to reduce administrative overhead while giving members full visibility into their club activity.

Member self-service profile with personal details and club information
Modular Monolith Architecture
Not microservices. Not a big ball of mud. A Modular Monolith — 16 independent modules that deploy as one but develop as many. Each module owns its domain, data access, and API. They communicate through integration events, not direct references. Zero circular dependencies enforced by NetArchTest architecture tests. Extract to microservices when you need to — without rewriting anything.
Identity
Clubs
Members
Memberships
Sessions
Events
Competitions
Payments
Facilities
Equipment
Programs
Communications
Analytics
Shop
Documents
Subscriptions
Complete SaaS Business Model
This is not just a technical exercise — it models a real SaaS business. Multi-tenancy with shared database and EF Core global query filters, tiered subscriptions with feature gating, platform transaction fees on every payment via Stripe Connect, automated dunning for failed payments, and usage-based limits per tier.
Free
£0/mo
50 members, 1GB storage
Starter
£29/mo
200 members, 10GB, SMS
Pro
£79/mo
Unlimited, analytics, API
Enterprise
£199/mo
White-label, custom domain
Live Scoring & Multi-Sport Support
Real-time match scoring powered by SignalR. Public scoreboards accessible without login. Sport-specific scoring formats for cricket (runs/wickets/overs), football (goals), hockey, rugby, tennis, swimming, athletics, and golf. PWA installable on any device with offline attendance marking and background sync.
Runs, Wickets, Overs
Goals, Cards, Assists
Goals, Penalty Corners
Tries, Conversions, Penalties
Sets, Games, Points
Times, Distances
Times, Distances
Strokes, Holes
Technology Stack
Backend
Frontend
Architecture
DevOps & Testing
35 Correctness Properties
Every critical business rule is encoded as a formal property using FsCheck property-based testing. These are not simple unit tests — they prove that invariants hold for all valid inputs, not just specific examples.
What This Demonstrates About My Engineering
Interested in this level of engineering?
I am available immediately for senior developer, technical lead, and contract opportunities across the UK.