Shameless

A self-hostable home for League of Legends custom games.

Overview

Shameless manages players, games and teams for a community, with Discord authentication and cost-based team balancing.

Problem

Organizing custom games calls for shared player information and a repeatable way to form teams.

Architecture

An ASP.NET Core API and a React frontend run with PostgreSQL. Docker Compose starts a separate migration service and a first-run setup wizard; Caddy serves the frontend and proxies the API.

  1. Browser
  2. Caddy / frontend
  3. ASP.NET Core API
  4. PostgreSQL
Simplified component flow.

Engineering decisions

Database migrations run in a dedicated service rather than at API startup. The installation wizard configures a fresh instance, including Discord, before the application starts.

Challenges

A first-run installation must coordinate configuration, database migrations and application startup while allowing an operator to recover from setup errors.

Reliability & security

Discord membership gates sign-in. The application has distinct user, administrator and superadministrator roles; installation secrets are stored in a configuration volume.

Testing

Unit tests cover balancing calculations; integration tests exercise HTTP against PostgreSQL. CI checks the API, frontend, deployment and Compose installation before publishing releases.

Links

Repository · Documentation · Lab