- Dart 55.4%
- Go 42.1%
- C++ 1%
- CMake 0.7%
- Shell 0.3%
- Other 0.4%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
docs/build-deploy.md (section 2) and plan.md 19.5 said the real client IP ends up in the session's IP hash. Checked on production after the move: sessions.ip_hash is NULL for every session, old and new. The password login computes clientIPHash and passes it in LoginInput, but nothing writes it, and the Google exchange does not compute it at all. Both docs now say what TRUSTED_PROXY_CIDRS does today (r.RemoteAddr is the client for any code that reads it) and that storing the hash, for password and Google logins, is open work. |
||
| .github/workflows | ||
| docs | ||
| financial-manager-app | ||
| financial-manager-backend | ||
| plan.md | ||
| README.md | ||
FinancialManager
A personal finance app for tracking a single wallet: record income and expenses in seconds, browse and search a full transaction history, and understand spending trends over time — without needing any accounting knowledge.
The product is built around four goals: speed (a common transaction takes seconds to enter), reliability (every balance change is traceable — no direct balance edits, only recorded transactions and explicit adjustments), readability (balance, income, expenses, and trend are always understandable), and extensibility (the MVP is designed to grow into multiple accounts, budgets, recurring transactions, and bank sync without a rewrite). Amounts are always handled as integer minor units (cents), never floating point, and all dates are stored in UTC and shown in the user's local time zone.
See plan.md for the full product and architecture specification.
Stack
Flutter (Android + iOS) · Go · PostgreSQL · Redis · Docker · MinIO
Repository structure
financial-manager-backend/— Go modular-monolith API (PostgreSQL as the source of truth, Redis as an accelerator/coordinator only, MinIO for images).financial-manager-app/— Flutter mobile client.plan.md— full product and architecture spec (screens, data model, API contract, security, roadmap, etc.).
Getting started
Backend
cd financial-manager-backend
cp .env.example .env
docker compose -f compose.yaml -f compose.dev.yaml up --build
Default host ports: PostgreSQL 10001, Redis 10002, API 10003, MinIO 10004. In production the backend runs on the alex-violatto VPS behind Caddy, and clients use https://financialmanager.alexviolatto.dev/api/v1 (the API is published only on 127.0.0.1:10003); ports are configurable through the backend .env file. See docs/build-deploy.md for deploy, HTTPS and Android release signing. See financial-manager-backend/README.md for running without Docker, migrations, and health checks.
App
cd financial-manager-app
flutter pub get
flutter run
flutter pub get/flutter run regenerate the localized strings (AppLocalizations, from lib/l10n/*.arb) automatically; run flutter gen-l10n directly only if you need to regenerate them without building the app.
Testing
# backend
cd financial-manager-backend && go test ./...
# app
cd financial-manager-app && flutter test
Further reading
plan.md— full specification.financial-manager-backend/docs/backup-restore.md— backup and restore procedures.docs/build-deploy.md— VPS deployment and app builds (Italian).docs/privacy.md— privacy notice, including the AI analysis in the cloud and on the device (Italian).docs/ai-on-device-spike.md— on-device AI prototype: engines, models and measurements (Italian).financial-manager-app/README.md— app structure and the AI analysis modules.