# Finance Tracker Closed-beta, zero-based personal budgeting for RUB accounts and credit cards. The application is a modular monolith with a FastAPI API and Celery worker, a React web client, PostgreSQL, Redis, S3-compatible object storage, and SMTP. ## Prerequisites - Docker with Compose - `uv` for backend development - Node.js and Corepack (`corepack enable`) for frontend development ## Local stack ```bash cp infra/.env.example infra/.env docker compose --env-file infra/.env -f infra/docker-compose.yml up --build ``` The web application is served at `http://localhost:8080`; Mailpit is available at `http://localhost:8025`, and the MinIO console at `http://localhost:9001`. Run migrations before the first API start if the compose stack does not do it: ```bash docker compose --env-file infra/.env -f infra/docker-compose.yml run --rm migrate ``` ## Development checks ```bash uv sync --project backend --all-groups --locked uv run --project backend ruff check backend uv run --project backend mypy --config-file backend/pyproject.toml backend/app uv run --project backend pytest backend corepack pnpm --dir frontend install --frozen-lockfile corepack pnpm --dir frontend lint corepack pnpm --dir frontend typecheck corepack pnpm --dir frontend test corepack pnpm --dir frontend build ``` Tests that use real bank documents are deliberately separate and require `PRIVATE_FIXTURES_DIR`. Never put bank originals under a tracked repository path. Synthetic parser fixtures are safe for CI. ## Production boundary Production services must use Russian-hosted PostgreSQL, Redis, object storage, and backups. TLS, a private object bucket, externally managed secrets, legal review, and the private parser contract suite are release gates, not defaults provided by the local compose stack. Browser-visible `VITE_*` variables must never contain secrets. See `CONTEXT.md` for domain terminology and `docs/adr/` for architectural decisions.