All projects

G-Finance

The personal finance app I use every day

Role
Personal project: product, back end, front end and infrastructure
Status
In production

The problem

Spreadsheets didn’t answer my everyday questions: how much is already on the credit card bill, how much will be left at the end of the month, and how my balance will evolve over the next years. I also wanted to log an expense in seconds, wherever I was.

What I built

  • Transactions, categories and accounts, with a dashboard and monthly and yearly reports.
  • Credit card with a provisional statement, updated on every purchase and closed automatically on the 1st.
  • Envelope-style food budget, kept apart from the monthly totals.
  • Balance forecasts from 1 to 40 years with configurable inflation, salary raises and yield, plus “what if” simulation.
  • Comparison with the previous month, proportional to the day of the month.
  • Installable iPhone app (PWA) with push notifications: card statement, food budget and weekly summary.
  • Expenses via Telegram: a bot receives short messages and records the transaction.

Architecture

  1. Angular PWASignals, light/dark theme, service worker
  2. TraefikHTTPS (Let’s Encrypt)
  3. Spring Boot APIJWT, business rules, schedulers
  4. PostgreSQL 16Flyway, SQL with MyBatis

The Telegram bot arrives through a webhook and uses the same service layer as the web app. Notifications go out via Web Push.

Technical decisions

MyBatis with explicit SQL instead of JPA

Reports and aggregations stay readable and easy to tune with indexes. All SQL is parameterized.

Financial math in one place

Amounts in BigDecimal and NUMERIC(14,2), with HALF_EVEN rounding centralized in a tested FinancialCalculator.

Channel-independent service

The web app and the Telegram bot send the same transaction command, so the rules are written only once.

Short sessions, safe renewal

30-minute JWTs with a rotating refresh token in a 60-day HttpOnly cookie.

PWA instead of an app store app

Instant install on the iPhone, push notifications and a single codebase.

Technologies

  • Java 21
  • Spring Boot 4
  • Spring Security (JWT)
  • MyBatis
  • PostgreSQL 16
  • Flyway
  • JUnit 5 + Testcontainers
  • Angular 22
  • Signals
  • PWA + Web Push
  • Telegram Bot API
  • Docker

Outcome

I use G-Finance every day to manage my household finances. Every push to the main branch is tested and deployed automatically, with a Telegram notification.