Skip to Content
Living documentation — last reviewed 2026-05-28
DecisionsArchitecture decisions

Architecture decisions

Short, dated records of structural decisions and why they were made. ADRs capture context that gets lost otherwise — they’re for the next engineer (or agent) who asks “why is it like this?”

Index

#TitleStatus
0001Nx monorepo, pnpm workspacesAccepted
0002Clerk for authenticationAccepted
0003Drizzle ORM over Prisma / TypeORMAccepted
0004Multi-org isolation by organization_id, enforced in codeAccepted
0005API-first; business logic lives in the APIAccepted
0006Hebrew/RTL as a first-class languageAccepted
0007R2 with separate compliance bucketAccepted
0008Platform tiers as the feature-gate primitiveAccepted
0009Background jobs via BullMQ on RedisAccepted
0010Spotter agent architectureAccepted (Phase 1 shipped)
0011Native automations engine (FIT-157)Proposed (spike / design only)
0012Lead status model (configurable pipelines) + channel-agnostic inboxAccepted (shipped)
0013Lead messaging consent & opt-out (gate for lead automations, FIT-206)Accepted
0014Freeform-to-structured workout transformer (FIT-245)Accepted
0015Arbox parity mode (“Arbox Bridge”) — migration parity + Move middleman (FIT-258)Proposed (design spike)
0016Plan change, booking-entitlement sweep, and manual charges (FIT-254)Accepted
0017Fizikal as the FreeFit/Move rails vendor (FIT-65)Proposed (probe-gated)
0018Org-scoped audit logging — app-level capture, 24-month retention (FIT-20)Accepted

Writing a new ADR

Use the next free number. Keep it short — under 200 lines. Include:

  1. Context — what triggered the decision.
  2. Decision — what we picked.
  3. Consequences — positive AND negative. Be honest about the costs.
  4. Alternatives considered — what else was on the table and why we rejected it.
  5. Related — links to other ADRs / runbooks / feature docs.

When superseding an older ADR, link forward AND back, and update its Status: to Superseded by ADR-NNNN.