⚠️ Project Status: Archived
This project has been discontinued as the official Reflex Arena developers have implemented their own matchmaking system and stats infrastructure.Many things are in a sketch-like state, specifically no proper deployment configuration and bare-bone front-end.
This readme is composed mainly using AI - better than nothing.
A full-stack web service designed to collect, analyze, and display detailed player statistics and
match history for Reflex Arena using a patched reflexded.exe server. Originally envisioned as a
comprehensive stats and matchmaking platform, this project demonstrates practical implementation of
modern web development patterns, real-time data ingestion, and sports analytics concepts.
**Original inspiration and reflexded patch: ** reflex-arena.ru by Sesen
- Layered Architecture: Clean separation between controllers, services, repositories, and entities, though it's mostly just CRUD
- Match Data Ingestion: RESTful endpoint (
/reflexded/*) to receive and store match results from patched dedicated servers - Player Statistics API: Query endpoints for player profiles, match history, and weapon statistics
- Match History API: Retrieve detailed match information including map, mode, duration, and player performance
- Database Management: PostgreSQL with Alembic migrations for schema versioning
- Type Safety: Comprehensive DTOs for API contracts and internal data flow
- Modern Vue 3 Stack: Composition API, bits of TypeScript, Vue Router
- Player Profiles: Display basic player information and recent match history
- Match Browser: View recent matches with key statistics
- Chart.js Integration: Foundation for advanced weapon stats visualization (radar charts, progression lines)
- Dockerized Environment: Full Docker Compose setup for local development and production deployment
- CI Pipeline: GitHub Actions workflow with:
- Automated testing (pytest with coverage)
- Linting (Ruff with extensive rule set)
- Self-hosted runner configuration
- Database Optimization: Performance-tuned PostgreSQL config for CI/CD environments
- Testing Suite: Pytest with async support (though could just use a sync DB driver), fixtures, and mocking utilities
- Comprehensive Test Coverage: Unit and integration tests for core business logic
- Code Quality Tools:
- Ruff for Python linting (50+ enabled rules)
- Development Standards: EditorConfig, strict type checking
- Python 3.13+ with uv package manager
- Docker and Docker Compose
- Node.js 22+ with Bun runtime (for frontend)
-
Start the database:
docker-compose -f docker-compose-dev.yml up -d
-
Configure environment:
cp .env.template .env # Edit .env with your database credentials -
Install dependencies and run migrations:
uv sync uv run alembic upgrade head
-
Start the development server:
uv run fastapi dev
API will be available at
http://localhost:8000
-
Navigate to frontend directory:
cd frontend -
Install dependencies:
bun install
-
Start development server:
bun run dev
Frontend will be available at
http://localhost:5173
# Backend tests
uv run pytest
# Backend linting
uv run ruff check app/
# Frontend tests
cd frontend
bun run test:unit
# E2E tests
bun run test:e2eapp/
├── controller/ # FastAPI route handlers (reflexded, match, player endpoints)
├── service/ # Business logic layer
├── repository/ # Database access layer
├── entity/ # SQLAlchemy models
├── dto/ # Data Transfer Objects (Pydantic models)
├── config/ # Database config and Alembic migrations
└── utils/ # Mock data generators, helpers
Data Flow: HTTP Request → Controller → Service → Repository → Database
- Repository Pattern: Abstraction over data access
- Service Layer: Encapsulation of business logic
- DTO Pattern: Type-safe API contracts with Pydantic
- Dependency Injection: FastAPI's dependency system for DB sessions
- Views: Page-level components (PlayerProfile, MatchList)
- Components: Reusable UI elements
Stores: Pinia stores for state management(didn't get to the point of needing it)- Services: API client layer with TypeScript types
- Router: Vue Router for navigation
- Trigger: Push to
mainbranch or manual dispatch - Environment: Self-hosted runner with custom Docker image
- Services: PostgreSQL 18 with health checks
- Steps: Checkout → Install deps (uv) → Lint (Ruff) → Test (pytest)
- Framework: FastAPI 0.118+ (async, type hints, OpenAPI)
- ORM: SQLAlchemy 2 + Advanced Alchemy
- Database: PostgreSQL 18 with asyncpg driver
- Migrations: Alembic
- Testing: pytest + pytest-asyncio + pytest-cov
- Linting: Ruff (replaces Black, isort, flake8, etc.)
- Package Manager: uv (fast, Rust-based Poetry alternative)
- Framework: Vue 3.5 (Composition API)
- Language: TypeScript 5.9
- State: Pinia 3.0
- Router: Vue Router 4.6
- Charts: Chart.js 4.5
- Build Tool: Vite 7.1
- Testing:
Vitest + Playwright(didn't get there) - Package Manager: Bun
- Containerization: Docker + Docker Compose
- CI: GitHub Actions (self-hosted runner)
- Reverse Proxy: (Planned: Nginx for production)
The ideas/ folder contains detailed specifications for features that were planned but not
implemented:
- Advanced Stats Visualization: Radar charts for weapon proficiency, progression lines, GitHub-style activity calendars, geographic player distribution heatmaps
- ELO Rating System: Full ranking implementation with historical recalculation
- Matchmaking System: Lua-based client integration, queue management, server pool coordination, anti-DDoS via VPN tunneling
- Replay System: Storage, parsing ( via reflex-replay-tools), heatmap generation (death spots, damage exchange, movement patterns)
See for the complete roadmap. ideas/agenda.md
This project is provided as-is for portfolio and educational purposes.
- Original concept and reflexded patch by Sesen (reflex-arena.ru)
- Donaldduck8 for reflex-replay-tools
- Reflex Arena devs for finally getting back to work!