Files
k1nq 63d065011b Update manifest.json and infra README
- Updated timestamps and AST hashes in manifest.json for various backend and frontend files to reflect recent changes.
- Added new files related to MCC categories and optional hold reasons in the manifest.
- Modified the README in the infra directory to correct the linting tool from 'mypy' to 'ty' for type checking in the backend project.
2026-09-23 10:57:27 +05:00

57 lines
1.9 KiB
Markdown

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