2026-09-22 08:29:49 +05:00

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

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 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.

S
Description
No description provided
Readme 3.8 MiB
Languages
Python 61.2%
TypeScript 33.3%
CSS 4.8%
JavaScript 0.4%