Architecture
How the services are divided, why the boundaries sit where they do, and which decisions are settled.
| Page | Read it when |
|---|---|
| Overview | You need the whole picture: Go services behind a Go gateway, React remotes, schema-per-service. |
| Detailed diagrams | The overview is not concrete enough and you want the request and event paths drawn. |
| Scalability | You are handing the design to operations and need the implemented limits. |
| Scaling operations | You need reliability defaults, DR targets, DLQ replay, and chaos experiments. |
| Query keys | You are adding a TanStack Query call and must match the hierarchical key shape. |
Decisions
Architecture Decision Records hold the decisions that are expensive to reverse. They record durable choices, not meeting notes — read the ADR index before proposing a change that contradicts one, and use the ADR template to write a new one.
- ADR 0001 — Fresh-build pivot
- ADR 0002 — Integer identities
- ADR 0003 — Users table ownership
- ADR 0004 — Migration baseline
- ADR 0005 — Monorepo delivery
The rule that constrains everything else
Service code lives in services/<name>/internal/..., which the Go compiler refuses to let another service import. Shared behaviour goes in internal/platform and nothing else is shareable. Cross-schema writes are forbidden; lifecycle rides Redis Streams.