38 lines
1.6 KiB
Markdown
38 lines
1.6 KiB
Markdown
---
|
|
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) |