ZakaWise is a full-stack personal finance management web application that allow users to take charge of their money. It provides users with the functionaliity of tracking their income and expenses, create and manage budgets, create and monitor saving goals and gives daily financial tips to users. This is secure with Firebase Authentication.
The Kanban board for ZakaWise was customized using the Automated Kanban template to support Agile development.
Two additional columns were added:
- Testing: This column is used to track tasks that have been implemented but require testing. This ensures quality assurance before completion.
- Blocked: This column is used to identify tasks that cannot proceed due to dependencies or technical issues. This helps in quickly identifying bottlenecks.
The board includes user stories and sprint tasks from Assignment 6, allowing full traceability between planning and implementation.
Automation was used to move tasks between "To Do", "In Progress", and "Done", improving workflow efficiency and reducing manual updates.
The system follows a layered architecture:
- Controller Layer (REST API endpoints)
- Service Layer (business logic)
- Repository Layer (data access using Spring Data JPA)
- Model Layer (entities representing database tables)
- Creational Patterns Layer (object creation logic/design patterns)
- Singleton pattern was used for DatabaseConnection to ensure only one instance of the database connection exists throughout the application lifecycle. This improves performance and prevents multiple unnecessary connections.
- Factory pattern was used in NotificationFactory and other object creation utilities to centralize object creation logic and reduce duplication in service classes.
- Builder pattern was Used for User, Budget, Transaction, SavingsGoal, and Notification objects because these entities contain multiple fields, some fields are optional, improves readability and maintainability prevents regeneration of constructors
- Java 17+
- Spring Boot
- Spring Data JPA
- Hibernate
- JUnit 5
- Mockito
- Maven
- Builder Pattern was chosen for complex entity creation.
- Service layer handles business logic only (no direct repository logic in controllers).
- Repository layer abstracts database operations.
- Mockito was avoided in final testing to demonstrate manual unit testing using JUnit and in-memory fakes.
I selected Dependency Injection (DI) as the primary pattern for managing repository dependencies in the service layer.
Reasons:
- Services do not depend on concrete repository implementations.
- Enables easy unit testing using mock or in-memory repositories.
- Spring Boot manages the instantiation of repository beans and injects them into services
- Repositories can be swapped without changing service code.
- git clone https://github.com/BokaMokoena/Finance-Management-System.git
- cd Finance-Management-System/zakawise
- mvn clean install
- mvn spring-boot:run
- mvn test
Triggered on:
- Push to any branch
- Pull requests to main
CI pipeline:
- Sets up Java environment (JDK 17)
- Builds the project using Maven
- Runs all unit tests
Triggered only when code is merged into main.
CD pipeline:
- Builds the Spring Boot JAR file
- Skips tests (after CI validation)
- Uploads .jar file as a GitHub Actions artifact
- Java 17
- Maven 3.8+
- Git
Clone the repository:
git https://github.com/BokaMokoena/Finance-Management-System.gitNavigate to the project directory:
cd Finance-Management-System/zakawiseInstall dependencies:
mvn clean installRun the application:
mvn spring-boot:runmvn test| Feature | Description | Difficulty |
|---|---|---|
| Transaction Export | Export transactions to CSV/PDF | Beginner |
| Savings Goal Alerts | Email reminders for goals | Intermediate |
| Analytics Dashboard | Financial visualizations | Intermediate |
| User Profile Management | Update account details | Beginner |
| Multi-Currency Support | Handle multiple currencies | Advanced |
| Redis Caching | Improve application performance | Advanced |
The project uses GitHub Actions to:
- Run automated tests on every push and pull request.
- Build the application automatically.
- Generate deployable artifacts on successful builds.
- System Specification
- System Architecture
- System Stakeholder
- System SystemRequirements
- System Test cases
- System Use case
- System Use case specifications
- System Use Stories
- System Sprint planning
- System Backlog planning
- System Reflection
- System State diagram
- System Activity diagram
- System Traceability
- System Domain model
- System Class diagram