Skip to content
Pierre JonkerResume
← All work

Personal finance tracker

Jonker's Vault

Manage your money in one place. Sign up, record transactions by category, set budgets and track your progress towards financial goals.

Role
Solo: API, database and frontend
Context
Built during my Compuways internship, 2024
Code
Code on GitHub ↗Watch the demo ↗

The problem

Most people track money across a banking app, a spreadsheet and their head. Jonker's Vault puts income, spending, budgets and savings goals in one place, behind a secure login.

What I built

  • Sign-up, login, profile updates and account deletion
  • Transactions by category: add, edit and delete
  • Budgets per category, and financial goals with progress tracking
  • A REST API documented in Swagger UI, used by a React frontend

How it works

Stateless authentication with JWT

A custom Spring Security filter reads the bearer token on every request and loads the user. A dedicated entry point returns a clean 401 when the token is missing or invalid. Passwords are hashed with BCrypt.

DTOs between the API and the database

Requests and responses use their own DTO classes, separate from the JPA entities. The API can change without touching the schema, and fields like password hashes can't leak into a response by accident.

Layered and documented

Controllers handle HTTP, services hold the business rules, repositories talk to PostgreSQL. springdoc generates the OpenAPI spec, so the frontend and anyone testing the API work from the same live documentation.

Secrets stay out of the repository

Database credentials and the JWT signing secret load from a local .env file. Only a .env.example with placeholders is committed.