ADR-0003 — gRPC internally, REST externally, protobuf as single contract

Context

The brief mandates gRPC internally and REST externally. That is a sound split — gRPC gives typed, efficient, streaming inter-service contracts; REST/JSON is what browsers, third parties, and casual clients expect. The risk is maintaining two API definitions for the same operations, which drift (R8). Even in v1 (modular monolith) we want module APIs defined as gRPC so extraction is seamless (ADR-0001).

Decision

Consequences

Positive

Negative / costs

Alternatives considered