The “Personal Finance & Budget Tracker” addresses the challenge of managing expenses across different accounts and payment methods, poor saving habits, and a lack of financial clarity. Many individuals struggle to understand their finances and where their money is going, identify spending patterns, and stay motivated to reach saving goals.
- Expense Aggregation: a centralized dashboard to log and categorize all daily, weekly, and monthly expenses
- Spending Visualization: interactive charts and graphs to visualize spending habits over time, broken down by category (e.g. food, rent, entertainment)
- Set saving goals: functionality to set and track specific saving goals, providing a clear path towards financial objectives
- Custom Budgeting: set monthly or category-specific budgets with alerts for overspending
The primary goal is to empower users to take control of their financial well-being. By offering a clear overview of their spending, the tracker aims to help users identify areas for improvement, cultivate better spending habits and ultimately achieve their financial goals.
Please note that for this section, every team member will be programming throughout this project. The team roles and responsibilities are as follows :
As the Product Owner, Autumn is the individual who sets the long term vision, goals and objectives of the project. Her main week to week tasks are to manage the product backlog, ensuring high priority work gets delivered sprint by sprint and to manage communication between our end stakeholder, our group tutor.
As the Scrum Master, Aviral will ensure we follow Agile processes and the methodologies that underpin it. His main week to week tasks are to facilitate the Scrum spaces, most importantly our weekly stand ups and to remove any bottleneck/blockers in our development process.
As a developer, Tiffany will work with the development team (everyone) to design, build and deploy any deliverables via sprint increments throughout the project. Her main tasks week to week are to program and commit her changes to our shared git repository and work in collaboration with the product owner to ensure the correct backlog tasks are prioritised and delivered.
As a developer, Hugo will work with everyone to design, build and deploy any deliverables via sprint increments throughout the project. His main tasks week to week are to program and commit his changes to our shared git repository and work in collaboration with the product owner to ensure the correct backlog tasks are prioritised and delivered.
As a tester, Andrew will work with the development team (everyone) to test and ensure any deliverables via sprint increments throughout the project are of the quality, reliability and functionality desired. His main tasks week to week are to write tests for the codebase and document any bugs found and work in collaboration with the product owner to ensure that the backlog items meet the acceptance criteria.
cd infra
docker compose -f compose.dev.yaml up --build- Frontend: http://localhost:5173
- Backend: http://localhost:8080
- Database (PostgreSQL):
-
From inside other Docker containers (e.g. backend):
- Host: db
- Port: 5432
- Database: appdb
- User: app
- Password: app
-
From your host machine (tools like pgAdmin or psql):
- Host: localhost
- Port: 5433
- Database: appdb
- User: app
- Password: app
-
- Ensure Java 21 (JDK 21) is installed.
- Run the server:
Linux / macOS
cd backend
./gradlew bootRunWindows
cd backend
gradlew.bat bootRun- Ensure Node.js v20+ is installed.
- Install dependencies:
cd frontend
npm ci- Run the development server:
npm run dev- Frontend will start on http://localhost:5173
- All /api/* requests are proxied to the backend on http://localhost:8080
If not using Docker, you must install PostgreSQL 16+ locally and create a database with matching credentials:
- Host: localhost
- Port: 5432
- Database: appdb
- Username: app
- Password: app
(Or update the Spring Boot application-dev.properties file with your own database details.)
To run the test suite once before launching the app, replace CMD in backend/dev.Dockerfile with the following:
CMD ["/bin/sh","-lc", "\
./gradlew clean test --no-daemon || echo 'Tests failed, continuing anyway...' ; \
./gradlew -t classes --no-daemon & \
exec ./gradlew bootRun --no-daemon \
"]
To only exceute the test suite once, in Docker Desktop, open terminal for infra-backend-1 and execute ./gradlew clean test --no-daemon
cd backend
./gradlew test jacocoTestReport
The frontend of hte project is build using React, Vite, and other modern JavaScript libraries. See package.json for frontend dependencies configuration.
- React:
^19.1.1- A JavaScript library for building user interfaces. - React DOM:
^19.1.1- React's package for DOM rendering. - React Router DOM:
^7.8.1- Provides dynamic routing for React applications. - Axios:
^1.11.0- Promise-based HTTP client for the browser and Node.js. - Chart.js:
^4.5.0- A library for building interactive charts. - React Chart.js 2:
^5.3.0- A wrapper for Chart.js in React. - React Icons:
^5.5.0- A library for using popular icons in React applications. - Ant Design:
^5.27.1- A popular React UI framework with a set of high-quality components. - Ant Design Charts:
^2.6.4- A charting library built on top of Ant Design. - Emoji Picker React:
^4.14.1- React component for selecting emojis. - React Scroll:
^1.9.3- A smooth scrolling library for React. - @stomp/stompjs:
^7.2.0- A JavaScript library for working with the STOMP messaging protocol (useful for WebSockets). - @tanstack/react-query:
^5.90.2- A powerful data-fetching library for React. - @tanstack/react-query-devtools:
^5.90.2- DevTools extension for React Query.
- Vite:
^7.1.2- A modern, fast build tool for frontend projects. - ESLint:
^9.33.0- A static code analysis tool for identifying and fixing problems in JavaScript code. - TypeScript:
^5.9.2- A superset of JavaScript that adds type definitions. - @vitejs/plugin-react:
^5.0.0- Vite plugin for React support. - ESLint Plugins:
- @eslint/js:
^9.33.0- A plugin for ESLint to enforce JavaScript syntax rules. - eslint-plugin-react-hooks:
^5.2.0- ESLint plugin for React Hooks linting. - eslint-plugin-react-refresh:
^0.4.20- Plugin for React Refresh integration with ESLint.
- @eslint/js:
- @types:
- @types/node:
^24.3.0- TypeScript type definitions for Node.js. - @types/react:
^19.1.12- TypeScript type definitions for React. - @types/react-dom:
^19.1.9- TypeScript type definitions for React DOM.
- @types/node:
- Globals:
^16.3.0- A package that provides global variable definitions for ESLint.
The backend is built with Gradle (8.14.3) and includes the following dependencies and plugins. See build.gradle for backend dependencies configuraiton.
- Spring Boot:
3.5.4 - Spring Dependency Management:
1.1.7 - JaCoCo: (Latest stable version, 0.8.12 as of 2025)
Development Tools
spring-boot-devtools: Provides support for automatic restarts, live reload, and configurations for debugging.
Spring Boot Starters
spring-boot-starter-web: Starter for building web, including RESTful, applications using Spring MVC.spring-boot-starter-data-jpa: Starter for using Spring Data JPA with Hibernate.spring-boot-starter-validation: Starter for JSR-303/JSR-380 validation (Bean Validation 2.0) API.spring-boot-starter-security: Starter for Spring Security, providing authentication and authorization.spring-boot-starter-actuator: Provides production-ready features like monitoring and metrics.spring-boot-starter-websocket: Provides support for WebSocket-based communication.
JSON Web Token (JJWT)
jjwt-api: 0.12.5: The main API for creating and verifying JWTs.jjwt-impl: 0.12.5: The implementation library for JWT.jjwt-jackson: 0.12.5: Uses Jackson for serializing and deserializing JWT claims.
API Documentation (Swagger UI)
springdoc-openapi-starter-webmvc-ui: 2.8.0: Provides OpenAPI 3.0 documentation and Swagger UI integration for Spring Boot applications.
Database Driver
postgresql: The PostgreSQL JDBC driver (version auto-resolved by Gradle).
Lombok
lombok: A Java library that helps reduce boilerplate code (e.g., getters/setters, constructors) through annotations.
Testing Libraries
spring-boot-starter-test: Starter for testing Spring Boot applications, including JUnit, Hamcrest, and Mockito.spring-security-test: Provides support for testing Spring Security.junit-platform-launcher: For running tests with JUnit.
JaCoCo
- Tool Version:
0.8.12- JaCoCo is used for code coverage reporting and analysis.
Note
Some dependencies (e.g., Spring Boot Starters, Lombok, PostgreSQL) are versionless. They inherit versions based on the Spring Boot version or default Gradle behavior. The project uses Java 21, configured via Gradle's Java toolchain.
- User registration with email
- Secure login with JWT authentication
- Expense tracking and categorization
- Transaction history viewing
- Custom category creation
- Monthly budget setting
- Category-specific budget allocation
- Budget progress tracking
- Overspending alerts
- Spending pattern visualization
- Monthly expense breakdowns
- Category-wise spending analysis
- Interactive charts and graphs
- Saving goal creation
- Progress tracking towards goals
- Goal completion notifications
- Transaction search and filtering
- Custom date range selection
Showing only folder and files relevant for development/extension.
/ELEC5619_Practical07_Group_6
├── /frontend
│ ├── /src
│ │ ├── /api # API calls to backend services
│ │ ├── /assets # Static resources (images, fonts, etc.)
│ │ ├── /components # Reusable UI components
│ │ ├── /pages # Page-level components
│ │ ├── /queries # TanStack React Query hooks
│ │ ├── /utils # Helper functions and utilities
│ │ ├── App.css # Application-wide styling
│ │ ├── App.jsx # Root application component
│ │ ├── index.css # Application-wide styling
│ │ └── main.jsx # Application entry point
│ ├── package.json # Frontend dependencies and scripts
│ └── vite.config.ts # Vite configuration
│
├── /backend
│ ├── /src
│ │ ├── /main
│ │ │ ├── /java/au/edu/sydney/uni/trackerbackend
│ │ │ │ ├── /controller # REST API endpoints
│ │ │ │ ├── /dto # Data Transfer Objects
│ │ │ │ ├── /errors # Application's specific errors
│ │ │ │ ├── /model # Data models/entities
│ │ │ │ ├── /repository # Database access layer
│ │ │ │ ├── /security # Authentication and JWT
│ │ │ │ ├── /service # Business logic layer
│ │ │ │ └── /websocket # Websocket for client communication
│ │ │ └── /resources # Application properties and sql scripts
│ │ └── /test # Test files
│ ├── build.gradle # Gradle build configuration
│ └── settings.gradle # Gradle settings
│
├── /infra
│ └── compose.dev.yaml # Docker compose for development
│
└── README.md # Project documentation (this document)