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
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.