FinancialManager è un gestore economico con backend in Go e app mobile in flutter, pensato per tracciare ogni singola spesa, fino alle più irrisorie.
  • Dart 55.4%
  • Go 42.1%
  • C++ 1%
  • CMake 0.7%
  • Shell 0.3%
  • Other 0.4%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Alex Violatto 9190f9f860 Docs: the client IP is resolved behind the proxy but not stored anywhere
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.
2026-10-22 16:09:14 +02:00
.github/workflows App: on-device engines (LiteRT-LM and llama.cpp) and the Android build for them 2026-10-21 16:01:01 +02:00
docs Docs: the client IP is resolved behind the proxy but not stored anywhere 2026-10-22 16:09:14 +02:00
financial-manager-app Docs: release signing, HTTPS behind Caddy and the move to the new VPS 2026-10-22 14:17:13 +02:00
financial-manager-backend Deploy: block /api/metrics inside handle_path, where it actually applies 2026-10-22 15:41:29 +02:00
plan.md Docs: the client IP is resolved behind the proxy but not stored anywhere 2026-10-22 16:09:14 +02:00
README.md Deploy: Caddy site block for financialmanager.alexviolatto.dev, new API URL 2026-10-22 14:11:51 +02:00

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