# Hermes **A self-hosted personal finance command center for exact accounting, purposeful savings, planned operations, and explainable cash forecasting.** [![Status: stable](https://img.shields.io/badge/status-stable-347A5A)](docs/project-status.md) [![Self-hosted](https://img.shields.io/badge/deployment-self--hosted-347A5A)](docs/operations/deployment.md) [![License: AGPL-3.0-or-later](https://img.shields.io/badge/license-AGPL--3.0--or--later-4C6EF5)](LICENSE)
![Hermes overview showing free money, physical balance, reserved funds, near-term forecast, and category analytics](docs/assets/readme/overview.jpg) Screenshots show the English interface introduced in `1.1.0` with synthetic USD demonstration data; no personal financial data is included. Hermes helps one owner understand not only where money went, but what is free to use, what has already been assigned to goals, and how known plans may change the future balance. It runs on your own computer or home server, stores data in your PostgreSQL database, and does not depend on an external cloud service. > [!IMPORTANT] > Hermes `1.0.0` is the first public release. It supports a single owner in a > protected environment: loopback or a trusted network, with VPN or a maintained > HTTPS reverse proxy for remote access. Direct public-internet exposure remains > unsupported. ## Why Hermes - **Free money first.** Physical balance, virtual funds, account reserves, and genuinely free money remain distinct instead of collapsing into one total. - **The future is explainable.** Forecast points are derived from current balances and known planned events, with the exact events behind each change. - **Financial operations stay exact.** Money uses `Decimal`/`NUMERIC`, writes are transactional, and displayed values follow one deterministic formatting and rounding contract. - **Your data stays yours.** Hermes is single-owner and self-hosted, with protected `.hermes` backups and an explicit plaintext JSON option. ## Product tour ### Understand the next month Forecast free or total money across five horizons, inspect the minimum balance, cash-gap risk, net flow, and every event that changes the projection. ![Hermes balance forecast with period controls, decision metrics, and an explainable timeline](docs/assets/readme/forecast.jpg) ### Give saved money a purpose Virtual funds reserve parts of real account balances for goals without creating separate bank accounts. Hermes tracks progress, physical coverage, free money, and manual or dynamic allocation. ![Hermes virtual funds showing saved totals, free money, allocation mode, and goal progress](docs/assets/readme/funds.jpg) ### Plan without changing today's balance Recurring rules and one-off plans stay balance-neutral until they are confirmed. The calendar shows exact dated amounts and keeps overdue actions explicit. ![Hermes calendar showing recurring income, expenses, and one-off plans](docs/assets/readme/calendar.jpg)
Responsive interface Hermes adapts its navigation and content hierarchy for narrow screens rather than shrinking the desktop layout mechanically.

Hermes overview on a narrow mobile viewport

Hermes `1.1.0` supports Russian and English, with a browser-local language preference independent of the accounting currency. ## Current capabilities ### Everyday finance - cash, debit, and savings accounts with ledger-derived balances; - income, expense, transfer, and balance-adjustment operations; - required income/expense categories, nested category trees, and archive-safe historical references; - journal filtering, details, pagination, category reports, and monthly or custom reporting periods; - exact addition and subtraction directly in monetary inputs. ### Funds and available money - virtual funds backed by money on physical accounts; - per-account physical, fund-reserved, reserve, and free coverage; - manual percentages or dynamic allocation based on relative unfilled progress; - atomic allocation, redistribution, fund-to-fund movement, and fund-aware account transfers; - target caps, automatic reserve refill, and deterministic rounding. ### Planning and forecasting - recurring income, expense, and transfer rules; - one-off future plans that remain balance-neutral until applied; - monthly calendar, upcoming and overdue states, confirmation, postponement, cancellation, and optional recurring-series shifting; - per-account and combined forecasts across two weeks, one month, one quarter, six months, or one year; - free-money and total-balance modes, risk warnings, and exact event explanations. ### Access and data protection - atomic first-run setup or restore, master password, base currency, and IANA timezone; - Argon2id password storage, revocable server-side sessions, CSRF protection, login throttling, and idle-session expiry; - authenticated `.hermes` backup envelopes plus explicit plaintext JSON export; - previewed, validated, transactional restore. See the [current project status](docs/project-status.md) for the factual verification snapshot, known limitations, and next steps. ## Run locally The shortest production-like path requires Docker 29+ with Docker Compose v2 and `make`. ```bash cp .env.example .env # Replace POSTGRES_PASSWORD in .env. # For loopback-only plain HTTP, set HERMES_COOKIE_SECURE=false. make up ``` Open `http://localhost:8000`. Angular and the API share one HTTP entrypoint, and PostgreSQL remains inside the Compose network. Stop the application with `make down`. > [!WARNING] > Do not expose an uninitialized Hermes instance or PostgreSQL directly to the > internet. Remote access requires a protected network, VPN, or a maintained > HTTPS reverse proxy with secure cookies enabled. Read the > [security policy](SECURITY.md) before using real financial data. ## Development Requirements: Python 3.13, Node.js 22.22.3 or newer within the supported Node 22 line, npm, Docker Compose, and `make`. ```bash cp .env.example .env make setup make dev ``` Open `http://localhost:4200`. The Angular development server proxies `/api` to FastAPI on `http://localhost:8000`. Run the complete local quality gates with: ```bash make test make lint make typecheck ``` The [local development guide](docs/operations/local-development.md) documents individual commands, dependency changes, migrations, and disposable PostgreSQL integration tests. ## Architecture Hermes is a modular monolith: one deployable application, one PostgreSQL database, and explicit public boundaries between financial domains. ```mermaid flowchart LR Browser[Owner browser] --> Entry[Single HTTP entrypoint] Entry --> Angular[Angular application] Entry --> API[FastAPI modular monolith] API --> Domains[Domain modules] Domains --> PostgreSQL[(PostgreSQL)] ``` - Python 3.13, FastAPI, SQLAlchemy 2, Alembic, Pydantic, and PostgreSQL; - Angular 22 with standalone components and strict TypeScript; - pytest, Ruff, mypy, ESLint, Prettier, and Vitest; - Docker and Docker Compose; - no microservices, broker, background worker, Redis, Kubernetes, or external cloud data dependency. Read the [architecture overview](docs/architecture/overview.md), [module boundaries](docs/architecture/module-boundaries.md), and [data flows](docs/architecture/data-flow.md) before changing cross-domain behavior. ## Status and roadmap Hermes is a personal project whose direction follows the maintainer's own use. Version `1.0.0` is the first stable public release. Compatibility and release operations are documented in the [release lifecycle](docs/operations/release.md). The long-term north star is **Oracle ยท What if?**: deterministic temporary scenarios that compare a financial decision with the baseline forecast without changing the ledger or confirmed plan. Oracle is planned and is not part of the current release. - [Current project status](docs/project-status.md) - [Development roadmap](docs/roadmap.md) - [Changelog](CHANGELOG.md) ## Documentation and support - [Documentation map](docs/index.md) - [UI/UX contract](DESIGN.md) - [Deployment runbook](docs/operations/deployment.md) - [Backup and restore](docs/operations/backup-and-restore.md) - [Security policy](SECURITY.md) For defects and focused proposals, use the [GitHub issue tracker](https://github.com/Gollardo/hermes/issues). Do not include credentials, backup contents, or personal financial data in an issue. ## Contributing Issues and pull requests are welcome when they align with the project's direction, but there is no guaranteed response or review schedule. Keep changes small, preserve module boundaries and financial invariants, and include checks appropriate to the risk. Read [CONTRIBUTING.md](CONTRIBUTING.md) before starting implementation. ## License Copyright holders license Hermes under the [GNU Affero General Public License v3.0 or later](LICENSE), SPDX identifier `AGPL-3.0-or-later`.