GameGuild is the open platform where game creators learn, build, and ship together: courses and learning paths, a in-browser code editor, project management, playtesting, and community — in one workspace.
The repository is a pnpm monorepo with two applications plus shared tooling:
gameguild/
├── apps/
│ ├── api/ .NET 10 modular monolith (GameGuild.sln)
│ │ └── Source/
│ │ ├── GameGuild.API/ host composition root (DI, endpoints, security)
│ │ └── Modules/ platform + domain modules
│ │ ├── GameGuild.Identity.* authentication, authorization, users, tenants
│ │ ├── GameGuild.Compliance.Audit central audit trail & evidence packaging
│ │ ├── GameGuild.Content.Pages CMS pages, content resources, marketing leads
│ │ ├── GameGuild.Learning.* courses, enrollments, certificates, paths
│ │ ├── GameGuild.Commerce.* billing, orders, payments, products, plans
│ │ └── ... social, projects, teams, finance, analytics, …
│ └── web/ Next.js App Router app (next-intl, Tailwind, Vitest)
├── packages/ shared workspace packages (incl. @game-guild/ui)
├── packages/api-client/ generated API client (OpenAPI-driven)
├── tools/ emception toolchain and build tooling
├── docs/ architecture and feature documentation
├── e2e/ Playwright end-to-end suites
└── compose.yaml local infrastructure (Postgres, Redis, Garage S3, app services)
Requests flow web (Next.js) → api (ASP.NET Core modules) → PostgreSQL, with Redis for caching/queues and Garage for S3-compatible object storage. Backend invariants (module boundaries, authorization, fail-closed auditing) are enforced at build time by the GGARCH001–008 analyzers — see AGENTS.md.
- .NET SDK 10.0.103
- Node.js 22 with pnpm 10 (
corepack enable) - Docker (Postgres 17, Redis 7, Garage S3 via compose)
git clone https://github.com/gameguild-gg/gameguild.git
cd gameguild
corepack enable
pnpm installdocker compose -f compose.yaml up -d postgres redis garage garage-init openinaryThis also provisions the Openinary asset-CDN container (http://localhost:3003).
It stores originals in the local Garage bucket and auto-creates an admin + API
key on first boot. To enable asset uploads through it:
# one-time: copy the generated API key from the first-boot log
docker compose -f compose.yaml logs openinary | grep "API Key:"
# paste it into .env as OPENINARY_UPLOAD_API_KEY=... (and Assets__Openinary__ApiKey for
# local `pnpm dev` runs), then restart the api if it's runningWithout the key everything else works — uploads just fall back to the S3 path.
dotnet restore apps/api/GameGuild.sln
dotnet build apps/api/GameGuild.slnTwo terminals (or use the bundled orchestrator pnpm dev):
# terminal 1 — API on http://localhost:8080
pnpm dev:api
# terminal 2 — web on http://localhost:3000
pnpm dev:webpnpm dev starts API + web + infrastructure together; pnpm dev:compose runs the full stack in Docker.
The PR gates that CI enforces:
# API — build must be warning-clean (GGARCH analyzers are errors)
dotnet build apps/api/GameGuild.sln
# API — full test suite (or target a project under apps/api/tests/)
dotnet test apps/api/GameGuild.sln
# Web — unit/integration tests (Vitest)
pnpm -C apps/web test
# Web — production build
pnpm build:web
# Repo-wide lint & policy checks
pnpm lint
pnpm run ci:repository-policyContributions are welcome. Read CONTRIBUTING.md for the workflow (branching, conventional commits, PR gates) and sign the Contributor License Agreement before your first change. This project follows the Code of Conduct — please keep interactions respectful.
- CLA · Code of Conduct · Contributing guide
- Docs — architecture, authorization, billing, brand
- AGENTS.md — engineering invariants enforced in this repo
Proprietary — all rights reserved by the GameGuild maintainers. See the repository license headers for details.