Skip to content

0001. Monorepo with a frontend/backend split for adepthood

Status

Accepted (backfilled 2026-07-31; the structure predates this record).

Context

Adepthood ships a React Native mobile app and a FastAPI API that evolve in lockstep — API contract changes, shared roadmap issues, and full-stack features (auth, habits, practices) routinely touch both sides. Separate repos would force cross-repo PR choreography for nearly every feature; a single mixed-language tree with no boundary would blur tooling and ownership.

Decision

Keep one repository (Geoffe-Ga/adepthood) with two top-level trees: frontend/ (React Native + Expo, TypeScript) and backend/ (FastAPI, Python). Each side owns its own toolchain and quality scripts (scripts/frontend/check-all.sh, scripts/backend/check-all.sh), while the repo shares one roadmap (prompts/github-issues/), one pre-commit config, and one agent fleet.

Consequences

  • Full-stack changes land as one atomic PR; the phased roadmap can specify "Full-stack" scope per issue.
  • Tooling must be namespaced: pre-commit runs both Python and Node hooks, and CI gates are split per side.
  • Cross-cutting conventions (conventional commits, TDD, coverage floors) are stated once and enforced repo-wide.
  • Anything that is genuinely a separate product (course content, the watch app, the vault) lives in its own satellite repo instead — the monorepo boundary is the app, not the ecosystem.