Developer GuideArchitectureDecision Records (ADRs)Overview

Architecture Decision Records

Architecture Decision Records (ADRs) capture the key technical decisions made during the design and development of SALLY. Each record documents the context that motivated a decision, the decision itself, and the consequences — what became easier and what became harder as a result.

ADRs serve as a historical record for the engineering team. When someone asks “why did we choose X over Y?”, the answer is in the ADR.


Index

ADRTitleStatusDateSummary
001Monorepo with TurborepoAcceptedFebruary 2026Single repository with Turborepo and pnpm workspaces for shared types and coordinated builds
002NestJS over ExpressAcceptedFebruary 2026Structured backend framework with modules, dependency injection, and guards
003Firebase Auth + JWTAcceptedFebruary 2026Firebase for identity management, custom JWT for API authorization with role and tenant claims
004Multi-tenant Row IsolationAcceptedFebruary 2026Single database with row-level tenant isolation via tenantId foreign key
005Domain-Driven ModulesAcceptedFebruary 2026Backend organized into domain modules (Fleet, Operations, Routing, Integrations, Platform)
006Shadcn + Dark Theme FirstAcceptedFebruary 2026Copy-paste component library with mandatory dark theme and grayscale-only palette
007Real-time Communication with Socket.IOAcceptedFebruary 2026SSE for server push and Socket.IO WebSocket for bidirectional dispatcher-driver messaging
008Multi-channel Notification DeliveryAcceptedFebruary 2026Email via Resend, SMS via Twilio, browser push via Web Push API, and in-app notifications

ADR Format

Each ADR follows a consistent structure:

  • Status — Whether the decision is Proposed, Accepted, Deprecated, or Superseded.
  • Context — The problem or situation that motivated the decision.
  • Decision — What was decided and why.
  • Consequences — The trade-offs: what became easier and what became harder.

New ADRs are numbered sequentially. Once accepted, an ADR is not modified unless it is superseded by a later decision, in which case the original ADR is updated with a link to its replacement.