Since I started working, I noticed that it’s beneficial dividing income into specific categories. I divided them into 'savings', 'daily expenses', and those related to 'entertainment'. This allowed me to manage my budget more effectively, and the savings I generated helped build a financial cushion. In the beginning, I did this on paper. In fact, long before I started working, I would note my expenses on sheets of paper, which often got lost. That's why I decided to switch to electronic record-keeping. I chose Excel spreadsheets for this purpose. However, I didn't really like it due to its clunky appearance and lack of functionalities I wanted.
In the meantime, I decided to start designing my own application. It was supposed to automate the processes I previously had to calculate and manage manually. Additionally, I wanted it to be simple to use and include the functionalities I needed. The best part is that I can design and implement features by myself. Without much hesitation, I began creating this application.
In the 'Budget' tab, you can view your monthly expenses. It's best to start by adding the income for the current month. This includes any funds added to your budget, such as a salary, winnings from a bet, or even money found on the street. When adding the first income for the month, the system will prompt you to select a pattern for distributing your income. Choose the one that suits you best. If none of the available patterns fit, you can create a new one in the options window. After successfully adding the income, the application will automatically allocate it to various categories according to the selected pattern and update the data in the tables. You can now start adding individual transactions. (Transactions can also be added without selecting a pattern or having any income for the month. In that case, only the transaction itself will be visible without a percentage allocation.) If you make a mistake with a category, you can easily move the transaction between columns. When you hover over a transaction with the mouse, the date and the description you entered will appear after a moment. If you click on the transaction, a window will open where you can edit or delete it.
Additionally, the application allows you to add recurring transactions. The user can define the date range and the frequency of repetition. A recurring transaction can be either an income or an expense. These transactions appear as regular ones but are visually distinguished by a different border. Recurring transactions that have not yet been confirmed are displayed with a white border and are not included in the summary. Once confirmed by the user, they are highlighted with a green border and counted in the statistics.
The architecture used in this application is based on Clean Architecture, which has become the standard for developing WebAPIs.
It separates business logic from databases and user interfaces, creating a layered structure where each layer communicates with the others in a well-defined manner.
Additionally, the application is built using a distributed architecture, specifically microservices. It is divided into modules, such as the API responsible for business logic related to transactions and budgeting, and the graphical user interface. Thesemodules
are connected by an API Gateway, which routes requests between the modules. My assumption is that each group of functionalities related to a single aspect will be implemented as a separate microservice.
Firstly, the application had three microservices: budgetapi, apigateway, and GUI. In the future, microservices responsible for the calendar, user and payments will be added.
Currently, I added IdentityApi that manages user actions. This WebApi works together with Keycloak API. Keycloak is an open-source identity and access management platform. All user-related requests, such as login, registration, token retrieval, and fetching user resources, go through IdentityApi, which redirects these requests to Keycloak.
I use Postman for API documentation. The current state of my application's endpoints is shown in the picture below. The documentation is organized into folders, each representing a specific controller. Within each folder, there are requests corresponding to that controller.

🔜 Add calendar representation.
* Add pdf summary.
* Add Healtch checks.
* Add 2FA
* Add saving goals feature.
* Add payment feature.
✅ Add Recurring transactions.
✅ Add Admin Panel.
⛔ Add authorization. => Keycloak BUG🐛
✅ Add email verification. => Completed but Keycloak BUG 🐛
✅ Add Unit test.
✅ Add Login and Registration.
✅ Add Internationalization.
✅ Add searching fields for transactions and incomes.
✅ Add statistics summary.
✅ Change logic by introducing the CQRS architectural pattern.
✅ Add income preview.
✅ Add patterns preview.
✅ Add forms validators.
✅ Add dark theme.
✅ Add main page carousel.
✅ Add dialogs.
✅ Add budget gui page.
✅ Add income api (controllers, services, respositories, mappers ect.).
✅ Add transactions api (controllers, services, respositories, mappers ect.).
✅ Add patterns and monthpatterns api (controllers, services, respositories, mappers ect.).
✅ Set project architecture.
❔❔ Mobile app.

