Architecture Decision Records (ADRs)
An ADR captures a significant technical decision: the context that forced a choice, the decision made, and the consequences accepted. They exist so that a year from now (or a new engineer, or an AI assistant) can understand why the system is the way it is — not just what it does.
Format
Each ADR follows the same shape:
- Status — accepted / superseded / proposed
- Context — the forces and constraints at play
- Decision — what was chosen
- Consequences — what this buys us and what it costs
- Alternatives considered — what we didn’t pick, and why
Index
| ADR | Decision |
|---|---|
| ADR-001 | Single-database multi-tenancy with automatic query scoping |
| ADR-002 | JWT access tokens + refresh tokens |
| ADR-003 | RBAC with global resource.action permissions |
| ADR-004 | Separate control plane (panel) from tenant app (admin-web) |
| ADR-005 | Redis cache layer + rate limiting |
| ADR-006 | Fees/finance data model with idempotent payments |
| ADR-007 | Scripted (YAML) onboarding over self-serve wizard first |
These ADRs were reconstructed from the codebase and project history to document decisions already in force. Where a decision is still evolving, the Status says so.