- Updated timestamps and AST hashes for multiple files in the manifest.json. - Added new test file backend/tests/test_expected_income.py. - Added documentation files: перево́д_между_своими.md and 0002-fixes.md. - Introduced pytest.ini to configure pytest settings, including test paths and warning filters.
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
uvfor backend development- Node.js and Corepack (
corepack enable) for frontend development
Local stack
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:
docker compose --env-file infra/.env -f infra/docker-compose.yml run --rm migrate
Development checks
uv sync --project backend --all-groups --locked
uv run --project backend ruff check backend
uv run --project backend ty check --project backend
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.