- Python 38.6%
- TypeScript 32.6%
- Kotlin 27.7%
- Shell 0.5%
- CSS 0.5%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
All checks were successful
Security CI / stale-deps (push) Has been skipped
Security CI / security (push) Successful in 2m14s
Release patrimoine/android / verify-version (push) Successful in 1m59s
Android CI / android (push) Successful in 8m20s
Release patrimoine/android / android (push) Successful in 17m21s
Release patrimoine/android / test (push) Successful in 0s
Release patrimoine/android / build-release (push) Successful in 11m20s
|
||
| .forgejo/workflows | ||
| android | ||
| backend | ||
| data/container | ||
| docs | ||
| frontend | ||
| web | ||
| .dockerignore | ||
| .gitignore | ||
| .gitleaksignore | ||
| .pre-commit-config.yaml | ||
| .tagme-authors.json | ||
| AGENTS.md | ||
| backup-db.sh | ||
| Caddyfile.example | ||
| CHANGELOG.md | ||
| ci-local.sh | ||
| CLAUDE.md | ||
| cliff.toml | ||
| docker-compose.e2e.yml | ||
| docker-compose.postgres.yml | ||
| docker-compose.yml | ||
| LICENSE | ||
| podman.sh | ||
| README.md | ||
| renovate.json | ||
| security-scan.sh | ||
| TODO.md | ||
Patrimoine
Self-hosted personal net-worth tracking application. Record account balances over time, visualize trends across interactive charts, manage budgets and investments, import existing data from spreadsheets, and export your data — all behind a secure, containerized deployment. Includes a native Android companion app covering the core workflow.
Features
- Net-worth tracking — aggregate all accounts (banking, investments, savings) into a single evolution chart
- Multi-currency — USD, GBP, CHF, JPY and more; auto-conversion via ECB rates (frankfurter.app) with historical rate lookup
- Budget tracking — transactions by category, monthly budgets with progress bars, income/expense summary
- Investment tracking — holdings, dividends, cost basis, ROI computation, portfolio summary
- Interactive dashboard — 25 drag-and-drop reorderable cards (sparkline, debt ratio, diversity, currency exposure, best/worst month, savings goals, and more)
- Advanced charts — 9 tabs: net worth (with CAGR projection + linear regression), per-account trends, stacked by type/category, allocation donuts, evolution bars, comparison, waterfall, drawdown, delta heatmap, savings goals progress
- Snapshot grid — frozen header/column, color-coded values (green/red/neutral vs previous snapshot), full row editing
- Import — CSV, ODS, XLSX with auto-detection of 7 French bank formats (CA, BNP, LCL, SG, CE, BP, CM); JSON backup import
- Export — CSV, JSON, ODS, XLSX for full data portability
- Android app — native Kotlin app with Jetpack Compose, OAuth2 PKCE auth, offline-ready, 24 screens (dashboard, accounts, snapshots, charts, budget, budget analytics, categories, tags, planned transactions, investments, savings goals, recurring snapshots, exchange rates, institutions, history, audit log, administration, system info, settings, import, export, analysis, login/register), plus biometric app lock, a weekly reminder notification, and a home screen widget — covers the core workflow, not full parity with the web app (no API tokens, webhooks, or chart annotations yet — see Android App Specification)
- i18n — FR/EN/ES/DE with locale-aware formatting (dates, currency)
- PWA — installable, offline support for cached data
- Auth — OIDC via Authentik (or any OIDC provider), local auth (email/password), mobile PKCE auth, API tokens, webhooks
- Security — audit logging, rate limiting, CSRF protection, container hardening, gitleaks CI scanning
See the Features page for what you can do with Patrimoine, or the feature tracker for implementation status.
Tech Stack
| Component | Technology |
|---|---|
| Backend | FastAPI (Python 3.13) + uvicorn + SQLAlchemy 2.0 async |
| Frontend | React 19 + Vite 8 + Tailwind CSS v4 + @dnd-kit + react-intl |
| Android | Kotlin 2.3 + Jetpack Compose + Hilt + Room + Ktor + AppAuth |
| Database | SQLite (WAL mode) or PostgreSQL (asyncpg, optional) — 30 tables |
| Queue | arq + Redis (optional, asyncio fallback) |
| Auth | OIDC via Authentik (or local email/password), mobile PKCE |
| Container | Podman (rootless) + podman compose |
| CI/CD | Forgejo Actions (lint, tests, audit, build images) |
| Frontend server | nginx (SPA + reverse proxy) |
See Architecture Overview for the full topology.
Quick Start
git clone <repo-url> patrimoine
cd patrimoine
mkdir -p ./data
cp backend/container/env.example backend/container/.env
# Edit backend/container/.env — set JWT_SECRET, configure OIDC or leave empty for local auth
# (frontend/container, web/container and data/container have optional templates too)
podman compose --env-file backend/container/.env up --build
Access at http://localhost:8080.
For local development without containers, see Getting Started.
Documentation
The documentation source lives in web/documentation/ (the landing page plus the User, Administrator and Developer Manuals), and the web container (web/container/) serves it as one site on SITE_URL: the landing page at /{locale}/, manuals under /{locale}/docs/.
| Category | Description |
|---|---|
| User Manual | Features, installing as an app |
| Administrator Manual | Quick start, deployment, configuration, backups, updating, security, troubleshooting |
| Developer Manual | Architecture, development, conventions, build and CI, specs, UI, API reference |
Useful Links
- Changelog
- TODO
- API Reference (generated on the docs site from
backend/openapi.json) - Environment Variables
- Security Checklist
- Troubleshooting
License
Released under the MIT License.