Architecture Decision Records
ADRs are maintained in the repository under
docs/adr/. Each records the
context, decision, and consequences of a significant choice. The directory is canonical;
this table is an index of it and nothing more.
| ADR | Decision |
|---|---|
| 001 | Modular monolith |
| 002 | PostgreSQL as system of record |
| 003 | PostGIS for geospatial |
| 004 | Keycloak for identity |
| 005 | OpenFGA for authorization |
| 006 | NATS JetStream for events |
| 007 | Temporal for durable workflows |
| 008 | React Native with Expo |
| 009 | S3-compatible object storage |
| 010 | AI service isolation |
| 011 | Docusaurus for documentation |
| 012 | Coolify for deployment |
| 013 | Tenant isolation via row-level security |
| 014 | Stripe Connect for payments |
| 015 | Managed SFU for video transport |
| 016 | PIMS integration strategy |
| 017 | Animal-relational policies read the grant tables |
| 018 | Scoped pool acquisition for untransacted reads |
| 019 | Platform-reference authoring runs as its own role |
| 020 | Brevo is the email provider, and what its receipts may claim |
| 021 | Country activation registry, and the removal of the French default |
| 022 | OpenCage is the geocoding provider |
| 023 | Stripe hosted checkout, and the statuses a webhook makes observable |
| 024 | Contact points are what a verified token asserted |
| 025 | Scheduled maintenance runs as its own role |
| 026 | A capability token is a row-level-security scope |
| 027 | The treating-clinic arm, and the bound on it |
| 028 | The incapacity review runs as its own role |
| 029 | Accreditation is recorded per country, and the credential claims only that |
| 030 | The client IP is what a trusted proxy says it is |
| 031 | The mobile app is a product, and which portals get a native client |
When a decision changes, update the existing ADR or add a new one — never leave an architectural decision undocumented. ADR-031 §4 is worth reading as an example of the protocol working: it records a decision that was reversed within an hour of being taken, and why, rather than quietly replacing it.