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.
- Browser
- Caddy / frontend
- ASP.NET Core API
- PostgreSQL
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.