Architecture decisions
The full log of architecture decision records (ADRs), with their status.
252 of 252 decisions
| Ref | Decision | Status | Date |
|---|---|---|---|
| ADR-001 | Modular monolith Go backend with run-mode deployables | Accepted | 2026-07-13 |
| ADR-002 | CTFd upstream, unforked, plugin plus custom theme only | Superseded | 2026-07-13 |
| ADR-003 | One React plus TypeScript front end (Next.js App Router) | Accepted | 2026-07-13 |
| ADR-004 | Control plane on Azure AKS (EU Data Boundary); bounded portability | Superseded | 2026-07-13 |
| ADR-005 | Self-hosted Keycloak OIDC broker; split staff/tenant realms | Accepted | 2026-07-13 |
| ADR-006 | PostgreSQL schema-per-module with Row-Level Security | Accepted | 2026-07-13 |
| ADR-007 | Valkey plus asynq queue plus transactional outbox | Accepted | 2026-07-13 |
| ADR-008 | OpenAPI 3.1 externally; specified CTFd-to-Go grading contract | Accepted | 2026-07-13 |
| ADR-009 | Provisioner isolated; queue intents authenticated and authorised | Accepted | 2026-07-13 |
| ADR-010 | Range as a pool of standing, reset-between-runs environments | Accepted | 2026-07-13 |
| ADR-011 | Tiered scenario isolation by risk | Accepted | 2026-07-13 |
| ADR-012 | OIDC workload-identity federation; no long-lived range secrets | Accepted | 2026-07-13 |
- ADR-001
- Decision
- Modular monolith Go backend with run-mode deployables
- Status
- Accepted
- Date
- 2026-07-13
- ADR-002
- Decision
- CTFd upstream, unforked, plugin plus custom theme only
- Status
- Superseded
- Date
- 2026-07-13
- ADR-003
- Decision
- One React plus TypeScript front end (Next.js App Router)
- Status
- Accepted
- Date
- 2026-07-13
- ADR-004
- Decision
- Control plane on Azure AKS (EU Data Boundary); bounded portability
- Status
- Superseded
- Date
- 2026-07-13
- ADR-005
- Decision
- Self-hosted Keycloak OIDC broker; split staff/tenant realms
- Status
- Accepted
- Date
- 2026-07-13
- ADR-006
- Decision
- PostgreSQL schema-per-module with Row-Level Security
- Status
- Accepted
- Date
- 2026-07-13
- ADR-007
- Decision
- Valkey plus asynq queue plus transactional outbox
- Status
- Accepted
- Date
- 2026-07-13
- ADR-008
- Decision
- OpenAPI 3.1 externally; specified CTFd-to-Go grading contract
- Status
- Accepted
- Date
- 2026-07-13
- ADR-009
- Decision
- Provisioner isolated; queue intents authenticated and authorised
- Status
- Accepted
- Date
- 2026-07-13
- ADR-010
- Decision
- Range as a pool of standing, reset-between-runs environments
- Status
- Accepted
- Date
- 2026-07-13
- ADR-011
- Decision
- Tiered scenario isolation by risk
- Status
- Accepted
- Date
- 2026-07-13
- ADR-012
- Decision
- OIDC workload-identity federation; no long-lived range secrets
- Status
- Accepted
- Date
- 2026-07-13