The IQA Management Hub is a comprehensive platform designed to support the International Quadball Association (IQA) in managing referee certifications, testing, and operations across its global network of National Governing Bodies (NGBs).
The International Quadball Association (IQA) is the international governing body for the sport of quadball (formerly known as quidditch). The IQA oversees the sport's development worldwide, coordinates international competitions, and establishes rules and standards for play.
The Management Hub provides essential tools for:
For Referees:
- Certification Management: Track and manage referee certifications at various levels
- Online Testing: Complete certification tests with automatic grading and result tracking
- Profile Management: Maintain referee profiles with certification history and achievements
- Test History: View past test attempts, scores, and certification progress
- Payment Processing: Secure payment processing for certification fees via Stripe integration
For National Governing Bodies (NGBs):
- Referee Oversight: View and manage referees within their jurisdiction
- Data Export: Export referee and team data for reporting and analysis
- NGB Profile Management: Maintain organization profiles with branding and media
- Statistics and Reporting: Access referee certification statistics and trends
For Administrators:
- User Management: Manage user accounts, roles, and permissions
- Test Administration: Create and manage certification tests and questions in multiple languages
- Test Content: Create, edit, and organize test questions and certifications
- Import Tools: Bulk import data using CSV import wizards
- System Configuration: Configure system settings, languages, and test policies
The IQA Management Hub is a modern web application built with a clear separation between frontend and backend.
Technology Stack:
- React 18 - Modern component-based UI framework
- TypeScript - Type-safe JavaScript for better developer experience
- Redux Toolkit - State management with @reduxjs/toolkit
- React Router 6 - Client-side routing
- Tailwind CSS - Utility-first CSS framework
- PostCSS - CSS processing and optimization
- Webpack 5 - Module bundling and build tooling
- Jest - Unit testing framework
- Axios - HTTP client for API communication
- Stripe - Payment processing integration
Module Structure:
app/modules/- Feature modules organized by domainapp/pages/- Top-level page componentsapp/components/- Reusable UI componentsapp/apis/- API client code (generated from OpenAPI specs)app/store/- Redux store configuration
Technology Stack:
- .NET 8.0 - Modern, cross-platform application framework
- C# - Primary programming language
- ASP.NET Core - Web API framework
- Entity Framework Core - Object-relational mapping (ORM)
- PostgreSQL - Relational database (production)
- Redis - Caching and background job queue
- Hangfire - Background job processing
- Stripe.NET - Payment processing
- Swashbuckle - OpenAPI/Swagger documentation
- xUnit - Unit testing framework
- OpenTelemetry - Distributed tracing and monitoring
Project Structure:
ManagementHub.Service/- Main web API serviceAreas/- Feature areas organized by domain:Debug/- Debugging and development endpointsExport/- Data export functionalityIdentity/- Authentication and authorizationLanguages/- Language managementNgbs/- National Governing Body endpointsPayments/- Payment processingReferees/- Referee managementTests/- Test and certification endpointsUser/- User management
Authorization/- Authorization policies and handlersConfiguration/- Application configurationJobs/- Background job definitionsSwagger/- API documentation configurationTelemetry/- Observability and monitoring
ManagementHub.Models/- Domain models and data structuresManagementHub.Storage/- Data access layer and database contextManagementHub.Processing/- Business logic and domain servicesManagementHub.Serialization/- JSON serialization configurationManagementHub.Mailers/- Email notification servicesManagementHub.UnitTests/- Unit test project
Docker:
- Multi-stage Docker builds for containerized deployment
- Docker Compose configurations for local development with dependencies
- Configurations available in
docker/directory for dev, staging, and production environments
CI/CD:
- GitHub Actions pipeline (
.github/workflows/pipeline.yml) - Automated building, testing, linting, and security scanning
- CodeQL security analysis
- Docker image publishing to AWS ECR
- Deployment to AWS Elastic Beanstalk (production)
Observability:
- OpenTelemetry instrumentation for distributed tracing
- Support for Azure Monitor and OTLP exporters
- Structured logging with request correlation
- .NET SDK 8.0 or later (download)
- Node.js 18.x or later (download)
- Yarn package manager (install)
- PostgreSQL database (optional - only needed if not using in-memory database)
- Redis (optional - only needed if not using in-memory cache and job queue)
git clone https://github.com/iqasport/referee_hub.git
cd referee_hubcd src/frontend
# Install dependencies
yarn install --immutable
# Build for development
yarn build:dev
# Or build for production
yarn build:prodThe frontend build includes:
- JavaScript bundling with Webpack
- CSS compilation with PostCSS and Tailwind
- Image asset copying
cd src/backend
# Restore dependencies
dotnet restore
# Build the solution
dotnet buildThe backend build automatically includes the frontend assets if they're available in src/frontend/dist/.
Option 1: In-Memory Mode (Simplest)
cd src/backend/ManagementHub.Service
dotnet runThe service starts at http://localhost:5000 with:
- In-memory database (auto-seeded with test data)
- In-memory cache and job queue
- Debug email output (emails logged to console)
- Local filesystem blob storage
Option 2: Docker Compose with Full Stack
cd docker/staging
docker compose up -dAvailable at http://localhost:80 with PostgreSQL, Redis, and MailHog (at http://localhost:8025).
Option 3: Docker Quick Dev Environment
cd docker/dev
docker compose up -dUses the latest published Docker image at http://localhost:80.
When running in development mode, these test users are available (all passwords are password):
- Referee:
referee@example.com - NGB Admin:
ngb_admin@example.com - IQA Admin:
iqa_admin@example.com - Empty Name Referee:
empty@example.com
Control dependencies in appsettings.Development.json under the Services section:
{
"Services": {
"UseInMemoryDatabase": true, // Set to false to use PostgreSQL
"SeedDatabaseWithTestData": true, // Auto-seed test data on startup
"UseInMemoryJobSystem": true, // Set to false to use Hangfire with Redis
"UseLocalFilesystemBlobStorage": true,
"UseDebugMailer": true // Set to false for real email sending
}
}For rapid frontend development with automatic rebuilding and hot reloading:
Development Workflow:
-
Terminal 1 - Start the backend server:
cd src/backend/ManagementHub.Service dotnet runBackend serves at http://localhost:5000
-
Terminal 2 - Start the frontend dev server:
cd src/frontend yarn start:devDev server watches files and rebuilds automatically
-
Open your browser to http://localhost:5000
Changes to React components and TypeScript files will automatically rebuild and hot reload in the browser without losing application state.
What gets auto-reloaded:
- ✅ React components (
.tsx,.jsxfiles) - ✅ TypeScript/JavaScript modules (
.ts,.jsfiles) - ✅ Application code changes with Hot Module Replacement (HMR)
What requires manual rebuild:
⚠️ CSS changes: Runyarn styleswhen modifying stylesheets⚠️ Image assets: Runyarn images:copywhen adding/changing images
Alternative (Old Method):
If you prefer the traditional workflow without HMR:
cd src/frontend
yarn build:devThe backend automatically picks up updated frontend files on page refresh (works best with dotnet run, not Docker).
In the docker/ directory:
dev/- Latest Docker imagedev-https/- With HTTPSstaging/- Full local stack (PostgreSQL, Redis, MailHog)staging-https/- Full stack with HTTPSprod-https/- Production-like setup with HTTPS
Frontend Tests:
cd src/frontend
# Run tests with coverage
yarn testBackend Tests:
cd src/backend
# Run all unit tests
dotnet testFrontend:
cd src/frontend
# Run ESLint
yarn lintTo build a production Docker image:
cd src/backend
# Publish and build Docker image
dotnet publish --os linux --arch x64 -c Release -p:PublishProfile=DefaultContainerThe image will be tagged as iqasport/management-hub:latest.
When running the application in Development mode, Swagger UI is available at:
http://localhost:5000/swagger
The API documentation is automatically generated from the C# code using Swashbuckle.
- Building Details: See docs/building.md for detailed build instructions
- Testing Guide: See docs/testing.md for testing information
- API Client: See docs/api-client.md for API client generation
- AWS Deployment: See docs/aws.md for AWS-specific deployment details