--- trigger: always_on --- # Tech Stack This project is a monorepo with a React Native (frontend) and FastAPI (backend) stack, deployed via Docker Compose and validated by Gitea Actions. ## Backend (FastAPI) - Language: Python 3.11+ - Framework: FastAPI - ASGI Server: Uvicorn - Schemas: Pydantic v2 (source of truth for request/response) - HTTP Client: httpx (for outbound integrations) - Packaging/Deps: uv + pyproject.toml - Lint/Format: ruff (format + lint) - Type Checking: mypy (progressively strict) - Testing: pytest + coverage (100% required) - Logging: structured JSON in prod; human-readable in dev; correlation IDs - Docs: OpenAPI at `/docs`, kept current with examples - Optional: SQL (SQLAlchemy + async driver) if/when persistence is needed ## Frontend (React Native) - Runtime: React Native (Expo for dev) - Language: TypeScript (strict mode) - UI/Navigation: React Navigation (or Expo Router), reusable components in `frontend/components/` - Networking: fetch or axios with a centralized service layer in `frontend/services/` - State/Server cache: lightweight hooks; introduce React Query if needed later - Testing: Jest + React Native Testing Library; MSW for network mocking - Lint/Format: ESLint + Prettier - Node: 20 LTS - Note: RN production builds via EAS (outside Compose). Compose primarily supports local dev integration. ## DevOps & Tooling - Containerization: Docker Compose (`deploy/compose.yml`) - CI: Gitea Actions in `.gitea/workflows/` - Backend: ruff, mypy, pytest with coverage≥100% - Frontend: eslint, jest with coverage thresholds (≥90% or match backend at 100% if desired)