Skip to content

HugoHSun/budget-tracker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Project Overview

1. Problem:

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.

Main features:

  • 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

High-level goals

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.

2. Roles and Responsibilities

Please note that for this section, every team member will be programming throughout this project. The team roles and responsibilities are as follows :

Product Owner - Autumn Nguyen

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.

Scrum Master - Aviral Singhal

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.

Developer - Tiffany Leung

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.

Developer - Hugo Sun

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.

Tester - Andrew Guo

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.

3. Running the Application

With Docker (Recommended)

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

Without Docker

Backend

  1. Ensure Java 21 (JDK 21) is installed.
  2. Run the server:

Linux / macOS

cd backend
./gradlew bootRun

Windows

cd backend
gradlew.bat bootRun

Frontend

  1. Ensure Node.js v20+ is installed.
  2. Install dependencies:
cd frontend
npm ci
  1. Run the development server:
npm run dev

Database

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

4. Testing

With Docker:

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

Without Docker:

cd backend
./gradlew test jacocoTestReport 

5. Technology Stack & Dependencies

Frontend Dependencies

The frontend of hte project is build using React, Vite, and other modern JavaScript libraries. See package.json for frontend dependencies configuration.

Core Libraries

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

Development Dependencies

  • 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.
  • @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.
  • Globals: ^16.3.0 - A package that provides global variable definitions for ESLint.

Backend Dependencies

The backend is built with Gradle (8.14.3) and includes the following dependencies and plugins. See build.gradle for backend dependencies configuraiton.

Plugins

  • Spring Boot: 3.5.4
  • Spring Dependency Management: 1.1.7
  • JaCoCo: (Latest stable version, 0.8.12 as of 2025)

Dependencies

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.

6. Current Working Functionalities

Authentication

  • User registration with email
  • Secure login with JWT authentication

Financial Management

  • Expense tracking and categorization
  • Transaction history viewing
  • Custom category creation

Budgeting Features

  • Monthly budget setting
  • Category-specific budget allocation
  • Budget progress tracking
  • Overspending alerts

Analytics & Reporting

  • Spending pattern visualization
  • Monthly expense breakdowns
  • Category-wise spending analysis
  • Interactive charts and graphs

Goal Management

  • Saving goal creation
  • Progress tracking towards goals
  • Goal completion notifications

Data Management

  • Transaction search and filtering
  • Custom date range selection

Project Structure

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)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 5